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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php new static,PHP面向对象中new self( )和 new static( ) 的区别

發(fā)布時間:2023/12/15 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php new static,PHP面向对象中new self( )和 new static( ) 的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先闡明結(jié)論,在PHP中 self指向定義了當(dāng)前被調(diào)用方法的類, static指向調(diào)用當(dāng)前靜態(tài)方法的類。

接下來通過一個例子來證明上面的結(jié)果

class A

{

public static $_a = 'Class A';

public static function echoProperty()

{

echo self::$_a . PHP_EOL;

}

}

class B extends A

{

public static $_a = 'Class B';

}

$obj = new B();

B::echoProperty();//輸出 Class A

之所以會這樣是因為使用self:: 或者__CLASS__對當(dāng)前類的靜態(tài)引用,取決于定義被調(diào)用方法所在的類,將上面Class A的方法echoProperty做一下修改變成:

class A

{

public static $_a = 'Class A';

public static function echoProperty()

{

echo static::$_a . PHP_EOL;

}

}

//再次調(diào)用B::echoProperty將輸出 'CLASS B'

為了避免上面第一個例子中看到的子類重寫父類的靜態(tài)屬性后,使用繼承來的方法仍然訪問父類的靜態(tài)屬性, PHP5.3增加了一個新的語法:后期靜態(tài)綁定(Late static binding), 使用static關(guān)鍵字替代self關(guān)鍵字,使得static指向與get_called_class()返回的相同的類,即當(dāng)前調(diào)用靜態(tài)方法的類, 該關(guān)鍵字對于靜態(tài)方法的訪問同樣有效。

下面的例子更好的說明了new self()和new static()之間的差異(后者使用了PHP的后期靜態(tài)綁定指向調(diào)用方法的當(dāng)前類)

class A

{

public static function get_self()

{

return new self();

}

public static function get_static()

{

return new static();

}

}

class B extends A {}

echo get_class(B::get_self()); // A

echo get_class(B::get_static()); // B

echo get_class(A::get_self()); // A

echo get_class(A::get_static()); // A

總結(jié)

以上是生活随笔為你收集整理的php new static,PHP面向对象中new self( )和 new static( ) 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。