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

Linda Hamilton
풀어 주다: 2024-10-26 20:54:02
원래의
150명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!