PHP Class self與static有什麼差別?都怎麼用?

藏色散人
發布: 2023-04-10 16:40:01
轉載
3750 人瀏覽過

對大多數 PHPer 來說,self 與 static 兩個 PHP 關鍵字不算陌生。我們學會透過self::xxxx這種方式來呼叫目前類別的靜態屬性和方法。而 static 呢?想必很多人只知道它是用來定義一個靜態方法和類別屬性關鍵字。

這也是我之前的認知。

現在我們來回顧這兩個關鍵字的一些常見用法:

// self 用法 1 :调用静态成员属性 test();
登入後複製
// self 用法 2 :调用静态方法 test();
登入後複製
// self 用法 3 :创建一个当前对象 test();
登入後複製
關於 static 關鍵字的常見用法也在上面 3 個範例中得到綜合體現。

我深信上面的用法,任何一個入門的 PHPer 都是很熟悉的。現在我要講的是以下兩種方式:

new self() 与 new static() 的区别?
登入後複製

我相信很多人都知道new self()創建一個當前類別的對象,不知道new static( )也能建立一個目前類別的物件。

關於new static()這種用法呢,在官方文件有說明。網址:https://www.php.net/manual/zh/language.oop5.late-static-bindings.php

PHP 官方稱這種方式為:後期靜態綁定。

官方範例 1:


         
登入後複製

因為 Class B 繼承了 Class A。 A 與 B 都有靜態方法who()。此時經過B::test()的時候,呼叫的實際上是 Class A 的who()方法。

因為子類別 Class B 的靜態方法who()屬於在 Class A 之後的子類別裡面才定義的。而 PHP 的預設特性只允許呼叫最先定義的。

就這引出了後期靜態綁定的概念。

官方範例2:


         
登入後複製

我們把Class A 裡面的test()方法體的self改為static之後,static 代表的永遠是指向呼叫類別。也就是說雖然在 Class A 父類別裡面定義的方法與子類別有同名衝突的情況。但是,當子類別呼叫的時候,那麼自動切換到子類別的靜態同名方法。取決於調用者。

大家可以透過運行以上兩個範例來理解。

之所以會有本小節內容。是因為我在實際運行當中要繼承單例方法導致了這個問題。所以,才牽扯出這個特性。

推薦學習:《PHP影片教學

#

以上是PHP Class self與static有什麼差別?都怎麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!