함수 호출을 괄호로 묶으면 PHP의 표현식으로 변환되는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-31 07:45:02
원래의
487명이 탐색했습니다.

Why Does Wrapping a Function Call in Parentheses Transform it into an Expression in PHP?

괄호를 사용하여 함수 호출 결과를 표현식으로 변환

PHP에서 함수 호출 결과를 괄호로 묶으면 놀랍게도 결과를 표현식으로 변환할 수 있습니다. полноценное выражение, 다음 예에서 볼 수 있듯이:

<?php

function get_array() {
   return array();
}

function foo() {
   return reset((get_array()));
}

foo();
로그인 후 복사

위 코드는 문서에 명확한 설명이 없지만 오류 없이 작동합니다. 이 동작을 자세히 조사해 보겠습니다.

첫 번째 조건: 비함수 호출 인수

추가된 괄호로 인해 PHP는 더 이상 인수를 함수 호출로 식별하지 않지만 "expr_without_variable"로. 이러한 구문 분석 변경은 코드 컴파일 방법에 영향을 미치며 궁극적으로 "SEND_VAR_NO_REF" opcode에서 "함수 호출" 플래그를 제거합니다.

두 번째 조건: 참조 횟수 1

Zend 엔진은 때때로 참조가 예상되는 경우 참조 횟수가 1인 비참조를 허용합니다. 이 예에서 반환된 배열의 참조 횟수는 1이며 이 조건을 충족합니다. 그러나 배열이 다른 곳에서 참조된 경우 두 번째 조건이 충족되지 않아 오류가 발생합니다.

결론

이 동작은 편리해 보일 수 있지만 이는 문서화된 기능이 아니며 가능한 버그로 처리되어야 한다는 점에 유의하는 것이 중요합니다. 이에 의존하면 코드에 예상치 못한 오류와 불안정성이 발생할 수 있습니다. 따라서 모호함을 피하고 예측 가능한 결과를 보장하려면 이 구문을 피하고 대신 올바른 표현식을 사용하는 것이 좋습니다.

위 내용은 함수 호출을 괄호로 묶으면 PHP의 표현식으로 변환되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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