的,也可以稱之為“靜態系結”,因為它可以用于(但不限于)靜態方法的呼叫,
下面是php中非靜態環境下轉發呼叫的代碼實體的相關內容,文章教程主要講述與靜態 轉發 呼叫 相關的一些技術與知識,下面是教程講解:
靜態訪問類的成員:
1.非轉發呼叫
1)類名明確(A::funcA())
2.轉發呼叫
1)self::
2)parent::
3)static::
4)forward_static_call()
5)get_called_class()
注意:
“后期系結”的意思是說,static:: 不再被決議為定義當前方法所在的類,而是在實際運行時計算的,也可以稱之為“靜態系結”,因為它可以用于(但不限于)靜態方法的呼叫,
<?php
class 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();
}https://www.hfxskyyj.com/
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
?>
運行結果:
A
C
C
Note:
在非靜態環境下,所呼叫的類即為該物件實體所屬的類,由于 $this-> 會在同一作用范圍內嘗試呼叫私有方法,而 static:: 則可能給出不同結果,另一個區別是 static:: 只能用于靜態屬性,
繼承的財產屬于自己
繼承鏈 優先訪問當前類,依據保留字特性進行訪問,然后依據繼承鏈進行訪問,
$this 訪問成員 (呼叫背景關系)
self:: 訪問成員(決議背景關系)
<?php
class A{
protected $value = "https://www.cnblogs.com/zqw111/p/A value";
public function printValue(){
echo $this->value;
}
}
class B extends A{
protected $value = "https://www.cnblogs.com/zqw111/p/B value";
}
$app = new B();
$app->printValue();
運行結果:B value
<?php
class A{
//只有將屬性定義為靜態的才能使用self::進行呼叫
static protected $value = "https://www.cnblogs.com/zqw111/p/A static value";
public function printValue(){
echo self::$value;
}
}
class B extends A{
static protected $value = "https://www.cnblogs.com/zqw111/p/B static value";
}
$app = new B();
$app->printValue();
運行結果:A static value
<?php
class A{
static protected $value = "https://www.cnblogs.com/zqw111/p/A static value";
}
class B extends A{
public function printValue(){
echo self::$value;
}
}
$app = new B();
$app->printValue();
運行結果:A static value
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/38658.html
標籤:PHP
