搜尋
首頁後端開發php教程php靜態變數的屬性與方法及延遲綁定用法詳解

靜態變數的型別關鍵字是static。本文主要是學習php中靜態屬性和靜態方法的使用方法和基本的範例以及延遲綁定

Static(靜態)關鍵字用來定義靜態方法和屬性,static 也可用於定義靜態變數以及後期靜態綁定

1、靜態變數 static variable

靜態變數僅在局部函數域中存在,但當程式執行離開此作用域時,其值並不遺失。也就是說,下次執行這個函數時,變數仍然會記得原來的值。要將某個變數定義為靜態的,只需要在變數前面加上static關鍵字即可。

function testing()
{
    static $a = 1;
    $a *= 2;
    echo $a."\n";
}
testing();
testing();
testing();
testing();
/**
 *    2
 *    4
 *    8
 *    16
 *    [Finished in 0.1s]
*/

靜態變數也提供了處理遞迴函數的方法。遞歸函數是一種呼叫自己的函數。寫遞歸函數時要小心,因為可能會無窮遞歸下去。必須確保有充分的方法來中止遞迴。

本例中 testing()函數在每次執行之後,都會在內部保存 $a 變數的值。在下一次 testing()函數被呼叫時,$a 的值就會恢復,然後 testing() 函數會將這個值乘以2,並印出。變數的初始預設值為1,此賦值操作只會在變數第一次初始化時發生。函數每次執行的過程中,這一操作不會被呼叫。

2、類別中靜態元素的使用

在類別中static 關鍵字有兩個主要的用法,一個是用來定義靜態成員,另一個種是用來定義靜態方法。聲明類別屬性或方法為靜態,就可以不實例化類別而直接存取。靜態屬性不能透過一個類別已實例化的物件來存取(但靜態方法可以)。靜態屬性不可以由物件透過 -> 操作符來存取。在類別的內部我們可以使用作用域限定運算子來存取不同層次作用域的變數。

2.1、靜態屬性

由於靜態方法不需要透過物件即可調用,所以偽變數 $this 在靜態方法中不可用。可以把靜態變數看成是屬於整個類別而不是屬於類別的某個實例。與一般的實例變數不同的是,靜態屬性只保留一個變數值,而這個變數值對所有的實例都有效,也就是說所有實例共享這一個屬性。

class MyObject
{
    public static $a = 0;
    function MyMethod()
    {
        self::$a += 2;
        echo self::$a . "\n";
    }
}
$instance1 = new MyObject();
$instance1 -> MyMethod();
$instance2 = new MyObject();
$instance2 -> MyMethod();
/**
 *
 * 2
 * 4
 * [Finished in 0.1s]
 *
 */

$this 指標是類別的目前實例,是一個到主叫物件的參考。

self:: 表示的是類別本身,使用self:: 作用域限定符時必須在運算子後面加上$ 符號,在類別之外的程式碼中不能使用這個操作符,而且它不能辨識自己在繼承樹層次結構中的位置。在擴充類別中使用 self:: 作用域時, self 可以呼叫基底類別中宣告的方法,但它所呼叫的總是已經在擴充類別中重寫的方法。

parent:: 在擴充類別中,在基底類別的方法被重寫的情況下,如果你要存取基底類別的方法,可以使用parent::

static:: 使我們不再需要使用self:: 和parent:: 。當希望指向最終的實作功能的類別時,就可以使用static,這個限定符會在程式碼執行之前立即計算出繼承層次結構上最後那個類別的成員。

2.3、靜態方法

靜態方法的規則和靜態變數是相同的。使用static關鍵字可以將方法標記為靜態方法,而透過類別的名稱 和 作用域限定運算元 (::)可以存取靜態方法。

靜態方法和非靜態方法之間有一個很重要的差異:在呼叫靜態方法時,我們不在需要擁有類別的實例。

class MyObjectBase
{
    static function MyMethod()
    {
        static::MyOtherMethod();
    }
    static function MyOtherMethod()
    {
        echo 'called from MyObject.';
    }
}
class MyExtendObject extends MyObjectBase
{
    static function MyOtherMethod()
    {
        echo 'called from MyExtendObject.';
    }
}
MyExtendObject::MyMethod();

上例程式碼會正確的呼叫MyExtendObject中的 MyOtherMethod 方法,輸出 called from MyExtendObject. [Finished in 0.1s]。

如果某個方法中不包含$this 變量,那麼這個方法就應該是靜態方法。如果不需要類別的實例,那麼也應該使用靜態類,這樣可以免去實例化的工作。另外,在靜態方法中是不能使用 $this 變數的,因為靜態方法不屬於某個特定的實例。

2.4、延遲綁定

static:: 使我們不再需要使用 self:: 和 parent:: 。當希望指向最終的實作功能的類別時,就可以使用static,這個限定符會在程式碼執行之前立即計算出繼承層次結構上最後那個類別的成員。這一過程被稱作延遲綁定。

3、總結

使用static關鍵字可以建立靜態變數,同時也可以提供一個預設的初始化值。靜態變數是經過修飾的函數變量,在某個函數執行完成之後,他的值仍保持不遺失。

static關鍵字也可以用在類別中來修飾屬性和方法。用在屬性上時,它使屬性不再為某個實例保存一個值,而是為整個類別本身保存一個值,靜態屬性可以在成員間共享。

要存取靜態方法可以用(::),它被稱為作用域限定符。這個運算子的左邊可以是一個類別名稱或某個預先定義作用域,預先定義作用域包含 self parent static。操作符的右邊是一個靜態方法、屬性。

以上是php靜態變數的屬性與方法及延遲綁定用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
繼續使用PHP:耐力的原因繼續使用PHP:耐力的原因Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python:探索他們的相似性和差異PHP和Python:探索他們的相似性和差異Apr 19, 2025 am 12:21 AM

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)