日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php static method,php 类方法用static::hello(); 等同于 $this-hello();吗?

發布時間:2023/12/19 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php static method,php 类方法用static::hello(); 等同于 $this-hello();吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自 PHP 5.3.0 起,PHP 增加了一個叫做后期靜態綁定的功能,用于在繼承范圍內引用靜態調用的類。

class 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() 時引用的類是 B 而不是 A。最終決定不引入新的關鍵字,而是使用已經預留的 static 關鍵字。

在非靜態環境下,所調用的類即為該對象實例所屬的類。由于 $this-> 會在同一作用范圍內嘗試調用私有方法,而 static:: 則可能給出不同結果。另一個區別是 static:: 只能用于靜態屬性。

class A {

private function foo() {

echo "success!\n";

}

public function test() {

$this->foo();

static::foo();

}

}

class B extends A {

/* foo() will be copied to B, hence its scope will still be A and

* the call be successful */

}

class C extends A {

private function foo() {

/* original method is replaced; the scope of the new one is C */

}

}

$b = new B();

$b->test();

$c = new C();

$c->test(); //fails

以上例程會輸出:

success!

success!

success!

Fatal error: Call to private method C::foo() from context 'A' in /tmp/test.php on line 9

總結

以上是生活随笔為你收集整理的php static method,php 类方法用static::hello(); 等同于 $this-hello();吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。