제목 | PHP의 Returning Reference에 대하여.. | ||
---|---|---|---|
글쓴이 | mycastor | 작성시각 | 2010/07/09 00:03:29 |
|
|||
음.. CI가 아니라서 그냥 자게에 올려봅니다. PHP레퍼런스를 보는중 Returning Reference가 있는데요.. 몇십분째 반복해서 보는데 도저히 이해가 안가네요.. 너무 복잡하게 생각해서 일까요? 아님 머리가 나쁜걸까요? ㅜㅜ http://www.tuxradar.com/practicalphp/4/15/4 http://theserverpages.com/php/manual/en/language.references.return.php 이해 되시는분은 살짝 코멘트좀 부탁드리겠습니다. 특히 아래 소스가 이해가 안가네요.. <?php function & func_b () { $some_var = 2; return $some_var; } function func_a (& $param) { # $param is 1 here $param = & func_b(); # $param is 2 here } $var = 1; func_a($var); # $var is still 1 here!!! ?>도움 부탁드립니다~~ |
|||
다음글 | [취소]저녁에 맥주한잔 하실분? (7) | ||
이전글 | 궁하면 통한다고 (1) | ||
mycastor
/
2010/07/09 00:06:01 /
추천
0
|
배강민
/
2010/07/09 10:10:12 /
추천
0
으.. 이해안돼... 머리아파.... |
Max
/
2010/07/09 14:30:16 /
추천
0
원문을 보면
"작은 예외가 있는데 참조형태로 리턴되는 함수의 결과(참조=reference)를 넘겨받는 값을 할당할때 참조바인딩(reference binding)이라고 나타내기위해 &를 사용할 필요 없다.." 라고 하네요. 즉, 아래에서는 <?php function & func_b () { $some_var = 2; return $some_var; } function func_a (& $param) { # $param is 1 here $param = & func_b(); # $param is 2 here } $var = 1; func_a($var); # $var is still 1 here!!! ?> 참조바인딩이라는걸 나타내기위해 &를 사용했는데 예상과 달리 2가 아닌 1일 떨어진다고... 이것이 작은 예외라고... 그래서 다음처럼 &을 빼고 해보니 <?php function & func_b () { $some_var = 2; return $some_var; } function func_a (& $param) { # $param is 1 here $param = func_b(); # $param is 2 here } $var = 1; func_a($var); # $var is 2 here as intended ?> 예상데로 2가 떨어진다고 하네요.. 따라서 참조바인딩(reference binding)이라고 나타내기위해 &를 사용할 필요 없다고... 자기도 겪은건데 왜 그런지는 언급 이 없네요.. ------- 제 단견으로는 &를 사용하면 받는 함수에서는 참조를 받게되는데 & func_b()에선 참조를 던지는데, 호출 함수 func_a($var); 는 참조호출이 아닌 일반 호출이라 그 던진 참조를 인지못해서 첫번째 경우에 1을 그대로 유지하는것 같습니다. 다음과 같이 해보니 2가 떨어지네요.. function & func_b ()
{
$some_var = 2;
return $some_var;
}
function func_a (& $param)
{
# $param is 1 here
$param = & func_b();
echo $param;
# $param is 2 here
return $param;
}
$var = 1;
$var1 = & func_a($var);
echo $var1;
즉 & func_a($var);처럼 여기에도 &를 사용하여 참조리턴을 했습니다. 두번째 경우는 $param = func_b();처럼 & 빼고 호출한지라 당연히 값복사이고 또 func_a($var);처럼 일반적인 경우라서 따라서 2가 떨어집니다.. 이글을 쓴 외국분은 예외라고 했는데 & func_a($var);처럼 &를 부쳐서 호울하면 2가 나오는거 보면 꼭 예외라 하기도 어려운것같습니다.. 위의 내용은 단지 저의 추측일뿐 틀릴 확률이 80% 이상입니다..^^ 그냥 이런 생각 하는 사람도 있다는 정도로..^^ 더 큰 고견을....... |
mycastor
/
2010/07/09 15:11:46 /
추천
0
Max님 //
저걸 실제로 어떻게 사용할까 고민을 많이 했습니다. 아직도 갈팡질팡하고 해결이 안되었지만 그래도 Max님 덕에 많은 도움이 되었습니다. 친절한 설명 감사드립니다 ^^ |
mycastor
/
2010/07/09 15:14:02 /
추천
0
강민형 //
저도 대학다닐때 포인터 때문에 C를 되게 겁나했어요 ㅋㅋ 아무래도 웹이다보니 포인터 개념이 익숙치가 않나봐요.. 하여튼 더 고민해봐야 할 문제네요.. 같이 고민해줘서 고마워요 형 ㅎㅎㅎㅎ |
변종원(웅파)
/
2010/07/09 15:38:06 /
추천
0
나도 c의 포인터 때문에 독학하다가 학원을 다녔지만 c의 포인터와 php의 참조는 개념이 틀림.
참조란 무엇인가PHP에서 참조란 다른 이름으로 같은 변수의 내용에 접근한다는 것을 의미한다. C 포인터와 비슷한 개념은 아닙니다; 심볼 테이블이라고 볼 수 있다. PHP에서 변수명과 변수의 내용은 다르다. 그래서 같은 내용이 다른 이름을 가질 수 있다. 가장 가까운 개념은 유닉스 파일명과 파일입니다 - 변수명은 디렉토리 엔트리이고, 변수 내용은 파일 자체입니다. 참조는 유닉스 파일시스템의 하드 링크와 유사하게 볼 수 있습니다. |
jois
/
2010/07/10 14:30:24 /
추천
0
이런 애매한 코드는 작성하지 않는 것이 좋다고 생각합니다.
(딱 봐서 어떤 값일지 예상할 수 없는 코드) |
음 모르겠다.. ㅜㅜ