PHP 속성이 함수를 사용할 수 없는 이유는 무엇입니까?
PHP에서 속성 기본값은 함수 호출을 포함할 수 없습니다. 이는 의문을 제기할 수 있는 제한 사항입니다. 그 구현에 대해. 이 기사에서는 이 디자인 선택의 기술적 토대를 자세히 살펴봅니다.
이유
컴파일러 코드는 이러한 제한이 의도적인 것임을 나타내지만 그 이유는 공개되지 않습니다. 컴파일 프로세스를 조사하면 몇 가지 통찰력을 얻을 수 있습니다.
컴파일 프로세스
클래스 변수 선언을 구문 분석할 때 컴파일러는 특정 문법을 따릅니다. 할당은 정적 스칼라 정의를 준수해야 합니다. 이러한 정의 내의 배열에는 정적 스칼라도 포함되어야 합니다.
문법에서 비정적 배열을 허용하는 경우 코드는 구문 검사를 통과합니다. 그러나 초기 바인딩 단계에서 "잘못된 바인딩 유형" 컴파일 오류가 발생하여 현재 배열의 마지막 opcode가 특정 유형과 일치하는지 확인합니다.
문제가 있는 Opcode
비정적 배열을 할당할 때 컴파일러는 INIT_ARRAY 및 DO_FCALL과 같은 추가 opcode를 생성합니다. 이러한 opcode는 초기 바인딩 중에 불일치를 유발하여 오류를 유발합니다.
가능한 솔루션 및 구현 과제
다른 동적 언어가 이러한 시나리오를 처리합니다. PHP의 잠재적인 솔루션은 다음과 같습니다.
이러한 솔루션을 구현하려면 컴파일러에 대한 신중한 고려와 사소한 변경이 필요합니다.
결론
PHP 속성에서 함수를 사용할 수 없는 것은 PHP 내부의 설계 결정에서 비롯됩니다. 컴파일 과정. 이것이 한계처럼 보일 수도 있지만 언어 디자이너가 의식적으로 선택한 것으로 보입니다. 대체 솔루션을 구현하려면 컴파일 프로세스의 상당한 재구성이 필요하며 이는 우선 순위로 간주되지 않을 수 있습니다.
위 내용은 PHP 속성이 함수 호출을 지원할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!