참조로 전달
참조로 변수를 함수에 전달하면 함수가 매개변수 값을 수정할 수 있습니다. 구문은 다음과 같습니다.
<?php function foo(&$var) { $var++; } $a=5; foo($a); // $a is 6 here ?>
함수 호출에는 참조 기호가 없으며 함수 정의에만 참조 기호가 있습니다. 함수 정의만으로도 매개변수가 참조로 올바르게 전달되기에 충분합니다. 최신 버전의 PHP에서는 foo(&$a);에서 &를 사용하면 "참조에 의한 호출 시간"이 더 이상 사용되지 않는다는 경고가 표시됩니다.
다음을 참조로 전달할 수 있습니다.
foo($a)와 같은 변수
foo(new foobar())와 같은 새 문
함수에서 반환된 참조(예:
<?php function &bar() { $a = 5; return $a; } foo(bar()); ?>
다른 표현식은 참조로 전달할 수 없으며 결과는 정의되지 않습니다.) 예를 들어, 참조로 전달하는 다음 예는 유효하지 않습니다.
<?php function bar() // Note the missing & { $a = 5; return $a; } foo(bar()); // 自 PHP 5.0.5 起导致致命错误 foo($a = 5) // 表达式,不是变量 foo(5) // 导致致命错误 ?>
이러한 조건은 PHP 4.0.4 이상 버전에서 사용할 수 있습니다.
참조 반환
참조 반환은 참조가 어떤 변수에 바인딩되어야 하는지 함수를 사용하려고 할 때 사용됩니다. 성능을 높이기 위해 반환 참조를 사용하지 마십시오. 엔진은 자체적으로 최적화할 만큼 똑똑합니다. 유효한 기술적 이유가 있는 경우에만 참조를 반환하십시오! 참조를 반환하려면 다음 구문을 사용하십시오.
<?php class foo { public $value = 42; public function &getValue() { return $this->value; } } $obj = new foo; $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. $obj->value = 2; echo $myValue; // prints the new value of $obj->value, i.e. 2. ?>
이 예에서는 참조 구문이 사용되지 않은 것처럼 getValue 함수에서 반환된 개체의 속성에 복사되지 않고 값이 할당됩니다.
참고: 매개변수 전달과 달리 여기에서는 & 기호를 두 위치 모두에서 사용해야 합니다. 이는 일반적인 복사본이 아닌 참조가 반환됨을 나타내고 $myValue가 참조로 바인딩됨을 나타냅니다. 평소 숙제.
참고: return ($this->value);와 같은 함수에서 참조를 반환하려고 하면 작동하지 않습니다. 참조된 변수. 함수에서는 참조 변수만 반환할 수 있으며 다른 방법은 없습니다. 코드가 동적 표현식이나 new 연산자의 결과를 반환하려고 하면 PHP 4.4.0 및 PHP 5.1.0부터 E_NOTICE 오류가 발생합니다.