정확하게 말하면 후기 정적 바인딩의 작동 원리는 이전 "비전달 호출"에 클래스 이름을 저장하는 것입니다. 정적 메서드 호출을 수행할 때 클래스 이름은 명시적으로 지정된 이름입니다(일반적으로 :: 연산자의 왼쪽에 있음). 비정적 메서드 호출을 수행할 때는 개체가 속한 클래스입니다. 소위 "전달 호출"은 다음과 같은 방식으로 이루어진 정적 호출을 의미합니다: self::
, parent::
, static: :
및 forward_static_call()
. get_called_class()
함수를 사용하여 호출된 메서드의 클래스 이름을 가져올 수 있으며 static::은 해당 범위를 가리킵니다.
전달된 통화
소위 전달된 통화는 메서드 호출에서 호출 정보(호출 스택 정보로 이해될 수 있음)를 전달하는 것을 의미합니다. self::
,parent::
,static::
以及 forward_static_call()
。可用 get_called_class()
函数来得到被调用的方法所在的类名,static:: 则指出了其范围。
所谓的转发调用是指:在类的方法调用中转发调用信息
<?phpclass A{public static function foo(){ static::who();}public static function who(){ echo __CLASS__ . "\n";}}class B extends A{public static function test(){ //非转发调用 A::foo(); //转发调用 parent::foo(); //转发调用 self::foo();}public static function who(){ echo __CLASS__ . "\n";}}class C extends B{public static function who(){ echo __CLASS__ . "\n";}}//非转发调用C::test();
이 문장은 프로그램 실행 중에 어떤 클래스가 정적인지 확인하는 방법을 의미합니다. 결정 규칙은 마지막으로 저장된 전달되지 않은 호출 클래스를 가져오는 것입니다
위 내용은 PHP 객체지향의 후기 정적 바인딩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!