PHP에서 "새로운 자아"와 "새로운 정적"의 차이점 이해
PHP 5.3 라이브러리를 PHP 5.2로 변환하는 것은 어려울 수 있습니다. , 주로 구문의 차이로 인해 발생합니다. 문제점 중 하나는 new static($options) 반환과 같은 후기 정적 바인딩을 사용하는 것입니다.
"새 자체"로 변환이 미치는 영향
return new static($options)을 return new self($options)로 변경하면 동일한 결과가 나오지 않습니다. PHP 5.3에 도입된 후기 정적 바인딩을 사용하면 메서드가 호출되는 클래스를 참조하는 static 키워드를 사용하여 클래스의 메서드를 호출할 수 있습니다. 그러나 PHP 5.2는 이 기능을 지원하지 않습니다.
"새 셀프"와 "새 정적"의 주요 차이점
예:
다음 사항을 고려하세요. code:
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A
이 예에서 get_self의 자체 호출은 메서드가 A에 정의되어 있으므로 클래스 A에 바인딩됩니다. 그러나 get_static의 정적 호출은 메서드가 있는 클래스에 바인딩됩니다. 호출되며 상황에 따라 달라집니다(예: 두 번째의 B 호출).
결론
PHP 5.2의 경우 늦은 정적 바인딩에 대한 직접적인 해결 방법은 없습니다. new static을 new self로 바꾸면 동일한 동작이 제공되지 않습니다. PHP 5.3 코드를 이전 버전으로 변환할 때 이러한 키워드 간의 차이점을 이해하는 것이 중요합니다.
위 내용은 PHP 5.2에서 5.3으로 마이그레이션: `new self()`와 `new static()`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!