>백엔드 개발 >PHP 튜토리얼 >PHP 객체지향의 후기 정적 바인딩에 대한 자세한 설명

PHP 객체지향의 후기 정적 바인딩에 대한 자세한 설명

藏色散人
藏色散人앞으로
2021-01-18 14:57:143070검색

정확하게 말하면 후기 정적 바인딩의 작동 원리는 이전 "비전달 호출"에 클래스 이름을 저장하는 것입니다. 정적 메서드 호출을 수행할 때 클래스 이름은 명시적으로 지정된 이름입니다(일반적으로 :: 연산자의 왼쪽에 있음). 비정적 메서드 호출을 수행할 때는 개체가 속한 클래스입니다. 소위 "전달 호출"은 다음과 같은 방식으로 이루어진 정적 호출을 의미합니다: self::, parent::, static: :forward_static_call(). get_called_class() 함수를 사용하여 호출된 메서드의 클래스 이름을 가져올 수 있으며 static::은 해당 범위를 가리킵니다.

전달된 통화 및 전달되지 않은 통화

전달된 통화

소위 전달된 통화는 메서드 호출에서 호출 정보(호출 스택 정보로 이해될 수 있음)를 전달하는 것을 의미합니다. self::parent::static:: 以及 forward_static_call()。可用 get_called_class() 函数来得到被调用的方法所在的类名,static:: 则指出了其范围。

转发调用&非转发调用

转发调用

所谓的转发调用是指:在类的方法调用中转发调用信息

  • 통화 전달 시간

    • 부모 통화

    • 자체 통화

    • 정적 통화

    • forward_static_call()

      비 전달 ed call

      소위 The 전달되지 않은 호출은 다음을 의미합니다. 예 정적 호출 또는 개체(의사 개체) 인스턴스를 통한 호출에 대한 클래스 이름을 명시적으로 지정합니다

      코드 분석
      <?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();

      늦은 정적 바인딩

      이 함수의 이름은 "늦은 ​​정적 바인딩"입니다. 언어의 내부 관점에서." "후기 바인딩"은 static::이 더 이상 현재 메서드가 정의된 클래스로 확인되지 않고 실제 런타임에 계산된다는 의미입니다. 정적 메서드 호출에 사용할 수 있으므로(그러나 이에 국한되지는 않음) "정적 바인딩"이라고도 합니다.

      후기 정적 바인딩의 구현 원리

      후기 정적 바인딩의 작동 원리는 이전 "비전달 호출"에 클래스 이름을 저장하는 것입니다.

      이 문장은 프로그램 실행 중에 어떤 클래스가 정적인지 확인하는 방법을 의미합니다. 결정 규칙은 마지막으로 저장된 전달되지 않은 호출 클래스를 가져오는 것입니다

      나중에 정적 바인딩 적용

  • 단일 사례 상속 시나리오

  • 추상 클래스 및 구현 클래스

위 내용은 PHP 객체지향의 후기 정적 바인딩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제