이 기사에서는 특정 참조 가치가 있는 [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 중국어 웹사이트의 기타 관련 기사를 참조하세요!