괄호를 사용하여 함수 호출 결과를 표현식으로 변환
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!