>백엔드 개발 >PHP 튜토리얼 >PHP 함수 호출에서 괄호가 \'Only Variables Should Be Passed by Reference\' 오류를 수정하는 이유는 무엇입니까?

PHP 함수 호출에서 괄호가 \'Only Variables Should Be Passed by Reference\' 오류를 수정하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 20:54:02266검색

Why do Parentheses Fix

괄호와 함수 호출 결과의 의미

다음 예를 고려하세요.

<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.