괄호와 함수 호출 결과의 의미
다음 예를 고려하세요.
<?php function get_array() { return array(); } function foo() { return reset(get_array()); // Error: "Only variables should be passed by reference" }
이 코드에서, 함수 호출 결과가 참조가 아니기 때문에 오류가 발생합니다. 그러나 결과를 괄호로 묶으면 오류가 사라집니다.
function foo() { return reset((get_array())); // OK }
무슨 일이 일어나고 있는 걸까요?
이 동작을 명시적으로 설명하는 문서가 없음에도 불구하고 다음을 살펴보면 이해할 수 있습니다. PHP 문법 및 컴파일러 구현.
파싱에 미치는 영향
괄호는 PHP 파서가 함수 호출 결과를 변수가 아닌 표현식으로 해석하도록 합니다. 이는 컴파일러가 코드, 특히 함수에 변수를 보내는 데 사용되는 opcode를 해석하는 방법에 영향을 미칩니다.
참조 횟수 및 Zend 엔진 최적화
PHP의 핵심 엔진인 Zend 엔진 , 참조가 예상되는 곳에 참조 카운트가 1인 비참조 변수를 사용할 수 있습니다. 위의 예에서 반환된 배열은 참조 횟수가 1인 새 객체입니다. 이를 통해 Zend 엔진은 코드를 최적화하고 오류 메시지를 피할 수 있습니다.
제한 사항
이 동작은 버그로 간주되므로 이에 의존해서는 안 된다는 점에 유의하는 것이 중요합니다. 함수 호출 결과의 참조 횟수는 향후 PHP 버전에서 변경될 수 있으며, 이로 인해 이 동작에 의존하는 코드가 손상될 수 있습니다.
대체 솔루션
이 잠재적으로 불안정한 것에 의존하지 않으려면 동작, 함수 호출의 결과를 변수에 명시적으로 할당:
function foo() { $result = get_array(); return reset($result); }
위 내용은 PHP 함수 호출에서 괄호가 \'Only Variables Should Be Passed by Reference\' 오류를 수정하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!