나는 다음 오전 클래스를 기반으로 코딩 코딩 기반 클래스의 기능 ..때때로 우리는 "이 &"앞서 최근 몇 번 우리가 앞서 함수 이름의 "&"를 넣어 보았의 발전이 프로젝트에 대한
의에 대한 선언 예 ..
보다는 정의는
function test()
는
function &test()
,536 같이 정의된다
특별한 의미가 "&"입니까?
나는 다음 오전 클래스를 기반으로 코딩 코딩 기반 클래스의 기능 ..때때로 우리는 "이 &"앞서 최근 몇 번 우리가 앞서 함수 이름의 "&"를 넣어 보았의 발전이 프로젝트에 대한
의에 대한 선언 예 ..
보다는 정의는
function test()
는
function &test()
,536 같이 정의된다
특별한 의미가 "&"입니까?
을 @philip 언급, 그것은이 return a reference에 :
참고 : 매개 변수 전달과는 달리, 여기 당신이 가지고있는 위의 링크에서
두 위치 모두 &을 사용하십시오. 참조가 아닌 사본으로 리턴하려는 것을 나타내며, $ myValue에 대해 일] 지정 대신 참조 Y 인딩이 수행되어야 함을 나타내십시오.
PHP를 저장한다 ZVAL 용기 내의 모든 변수. 상기 링크에서
:
zval 컨테이너에 포함 된 변수의 종류와 값 이외는 information.The 추가 2 비트들은 제 "is_ref"라고하고 있는지의 여부를 나타내는 부울 값이다 변수는 "참조 집합"의 일부입니다. 이 비트로 PHP의 엔진은 일반적인 변수와 참조를 구별하는 방법을 알고 있습니다. PHP는 & 연산자로 생성 된 사용자 - 땅 참조를 허용하므로, zval 컨테이너는 메모리 사용을 최적화하기위한 내부 참조 계산 메커니즘을 가지고 있습니다. "refcount"라고하는이 두 번째 추가 정보에는이 하나의 zval 컨테이너를 가리키는 변수 이름 (기호라고도 함)이 포함됩니다.
은 출력 변수의 값을 관찰 :
는 반환 값의 할당에 &
없이 다음을 고려
$b=0;
function &func ($name) {
global $b;
$b = 10;
return $b;
}
$a = func("myname");// no & at assignment
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/>";
상기 코드에 대한 출력 :
$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11
함수는 참조로 반환되지만 참조는 ret입니다. urned 값의 zval 컨테이너. 이제 반환 된 값을 할당하려고 할 때 (할당시 &
없이) "refcount"만 증가합니다. 여기서 "is_ref"는 변경되지 않습니다.'반환 값이 저장된 변수'가 변경하려고하면 C.O.W (copy on write)이 발생하고 새로운 zval 컨테이너가 생성되어 참조가 쓸모 없게 렌더링됩니다. 따라서 반환 값의 할당에 &
을 추가해야합니다.
는 반환 값의 할당에 &
와 함께 다음과 같은 고려 :
$b=0;
function &func ($name) {
global $b;
$b = 10;
return $b;
}
$a =& func("myname");// & at assignment
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/>";
출력 :
$a= 11 $b= 11
a: (refcount=2, is_ref=1)=11
이 함수는 변수에 대한 참조를 반환하는 것을 의미한다. 당신은 여기에 대한 자세한 내용을보실 수 있습니다 : http://php.net/manual/en/language.references.php
나는 당신의 연결을 확인했다 .. 그 기능의가 (이 함수 foo 같이 정의된다 & $ bar) {} 변수의 앞에없는 함수 앞에 "&"를 넣는 지 묻습니다. –
두 링크가 모두 설명 할 수 있다고 생각합니다. 반환 참조는 설명입니다. y 우리의 쿼리 – Philip
foo (& $ bar) {}에서 참조로 변수를 전달할 것이고 & foo ($ bar)에서 참조로 어떤 것을 반환 할 것이기 때문입니다. –