>  기사  >  백엔드 개발  >  [PHP 클래스 및 객체] 후기 정적 바인딩

[PHP 클래스 및 객체] 후기 정적 바인딩

不言
不言원래의
2018-04-17 14:00:461304검색

이 기사에서는 특정 참조 가치가 있는 [php 클래스 및 객체] 후기 정적 바인딩의 내용을 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구들이 참조할 수 있습니다.

후기 정적 바인딩

PHP 5.3.0

용도: 상속 범위에서 정적으로 호출된 클래스 참조

작동 원리:

  • 이전 "비전달 호출"의 클래스 이름을 저장합니다.

  • 정적 메서드 호출 시 클래스 이름은 명시적으로 지정됩니다(보통 :: 연산자의 왼쪽 부분).

  • 비정적 메서드 호출 시 클래스 이름은 다음과 같습니다. 그 물건이 종류에 속하는 것.

전달 호출: self::, parent::, static::,ward_static_call()을 통한 정적 호출(정적 메서드 호출).
get_called_class() 함수를 사용하여 호출된 메서드의 클래스 이름을 가져올 수 있으며 static::은 해당 범위를 가리킵니다.

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

<?phpclass A {
    public static function who() {
        echo __CLASS__; //返回该类被定义时的名字
    }    public static function test() {
        self::who();
    }
}class B extends A {
    // public static function who() {
    //     echo __CLASS__;
    // }}

B::test();  //A?>

후기 정적 바인딩 사용

후기 정적 바인딩은 런타임에 처음 호출되는 클래스를 나타내는 새 키워드를 도입하여 제한을 우회하기 위한 것이었습니다.

간단히 말하면 이 키워드를 사용하면 위 예에서 test()를 호출할 때 A 클래스 대신 B 클래스를 참조할 수 있습니다. 결국 새로운 키워드를 도입하지 않고 이미 예약된 정적 키워드를 사용하기로 결정되었습니다.

Example #2 static:: 简单用法<?phpclass A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who(); // 注意使用static,后期静态绑定从这里开始
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();  //B?>

비정적 환경에서 호출되는 클래스는 객체 인스턴스가 속한 클래스입니다. $this->는 동일한 범위에서 개인 메소드를 호출하려고 시도하므로 static::은 다른 결과를 제공할 수 있습니다.
또 다른 차이점은 static::은 정적 속성에만 사용할 수 있다는 것입니다.

후기 정적 바인딩

PHP 5.3.0

사용 대상: 상속 범위에서 정적으로 호출된 클래스에 대한 참조

작동 원리:

  • 이전 "비 전달 호출"(비 전달 호출) 클래스를 저장합니다. 이름.

  • 정적 메서드 호출 시 클래스 이름은 명시적으로 지정됩니다(보통 :: 연산자의 왼쪽 부분).

  • 비정적 메서드 호출 시 클래스 이름은 다음과 같습니다. 그 물건이 종류에 속하는 것.

전달 호출: self::, parent::, static::,ward_static_call()을 통한 정적 호출(정적 메서드 호출).
get_called_class() 함수를 사용하여 호출된 메서드의 클래스 이름을 가져올 수 있으며 static::은 해당 범위를 가리킵니다.

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

<?phpclass A {
    public static function who() {
        echo __CLASS__; //返回该类被定义时的名字
    }    public static function test() {
        self::who();
    }
}class B extends A {
    // public static function who() {
    //     echo __CLASS__;
    // }}

B::test();  //A?>

후기 정적 바인딩 사용

후기 정적 바인딩은 런타임에 처음 호출되는 클래스를 나타내는 새 키워드를 도입하여 제한을 우회하기 위한 것이었습니다.

간단히 말하면 이 키워드를 사용하면 위 예에서 test()를 호출할 때 A 클래스 대신 B 클래스를 참조할 수 있습니다. 결국 새로운 키워드를 도입하지 않고 이미 예약된 정적 키워드를 사용하기로 결정되었습니다.

Example #2 static:: 简单用法<?phpclass A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who(); // 注意使用static,后期静态绑定从这里开始
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();  //B?>

비정적 환경에서 호출되는 클래스는 객체 인스턴스가 속한 클래스입니다. $this->는 동일한 범위에서 개인 메소드를 호출하려고 시도하므로 static::은 다른 결과를 제공할 수 있습니다.
또 다른 차이점은 static::은 정적 속성에만 사용할 수 있다는 것입니다.

관련 권장 사항:

【php 클래스 및 객체】유형 제약 조건

【php 클래스 및 객체】객체 복사

【php 클래스 및 객체】magic method

위 내용은 [PHP 클래스 및 객체] 후기 정적 바인딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.