이전 버전의 PHP에서는 return new self()를 사용하여 이 클래스의 인스턴스를 반환했지만 이 메서드에는 큰 단점이 있습니다. 즉, self는 호출 컨텍스트가 아닌 구문 분석 컨텍스트를 참조합니다. 이 기사는 주로 PHP 지연 정적 바인딩 정적에 대한 자세한 설명을 공유하므로 도움이 되기를 바랍니다.
abstract class father { public static function create() { return new self(); } } class son1 extends father { } son1::create();
즉, 위 코드에서 create() 메서드를 호출하는 하위 클래스는 실제로 상위 클래스의 인스턴스를 반환합니다. 왜냐하면 self는 호출된 위치가 아니라 정의된 위치를 가리키기 때문입니다. 아버지 클래스는 추상 클래스이므로 이 단락의 코드는 치명적인 오류를 보고합니다.
지연된 정적 바인딩은 PHP 5.3 이후 static 키워드를 사용하여 도입되었습니다. <code> <br>
abstract class father { public static function create() { return new static(); } } class son1 extends father { } son1::create();
self를 static으로 변경하면 static이 정의된 클래스가 아닌 호출된 클래스를 가리키기 때문에 정상적으로 실행됩니다.
정적이 아닌 컨텍스트에서 호출되는 경우에도 static을 정적 메서드의 식별자로 사용할 수도 있습니다. 이에 대해서는 나중에 쓰겠습니다.
관련 권장사항:
php 지연 정적 바인딩이란 무엇인가요? 지연된 정적 바인딩 예제 코드에 대한 자세한 설명
위 내용은 PHP 지연 정적 바인딩 정적에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!