本篇主要介紹PHP中的靜態變數有什麼作用,有興趣的朋友參考下,希望對大家有幫助。
推薦手冊:php完全自學手冊
#靜態變數只存在於函數作用域內,也就是說,靜態變數只存活在堆疊中。
一般的函數內變數會在函數結束後釋放,例如局部變量,但是靜態變數卻不會。
就是說,下次再呼叫這個函數的時候,變數的值會保留下來。
#只要在變數前面加上關鍵字static,變數就變成靜態變數了。
<?php function test() { static $nm = ; $nm = $nm * ; print $nm."<br />"; } // 第一次执行,$nm = test(); // 第一次执行,$nm = test(); // 第一次执行,$nm = test(); ?>
程式運行結果:
1 2 2 4 3 8
函數test()執行後,變數$nm的值都保存了下來。
在class中常使用到靜態屬性,例如靜態成員、靜態方法。
相關文章推薦:
1.php靜態變數什麼時候銷毀
2.在PHP中靜態變數和全域變數有哪些不同?
相關影片推薦:
1.獨孤九賤(4)_PHP影片教學
Program List :類別的靜態成員
靜態變數$nm屬於類別nowamagic,而不屬於類別的某個實例。這個變數對所有實例都有效。
::是作用域限定運算符,這裡用的是self作用域,而不是$this作用域,$this作用域只表示類別的目前實例,self::表示的是類別本身。
<?php class nowamagic { public static $nm = ; function nmMethod() { self::$nm += ; echo self::$nm . '<br />'; } } $nmInstance = new nowamagic(); $nmInstance -> nmMethod(); $nmInstance = new nowamagic(); $nmInstance -> nmMethod(); ?>
程式執行結果:
1 3 2 5
Program List:靜態屬性
<?php class NowaMagic { public static $nm = 'www.nowamagic.net'; public function nmMethod() { return self::$nm; } } class Article extends NowaMagic { public function articleMethod() { return parent::$nm; } } // 通过作用于限定操作符访问静态变量 print NowaMagic::$nm . "<br />"; // 调用类的方法 $nowamagic = new NowaMagic(); print $nowamagic->nmMethod() . "<br />"; print Article::$nm . "<br />"; $nmArticle = new Article(); print $nmArticle->nmMethod() . "<br />"; ?>
程式運行結果:
www.nowamagic.net www.nowamagic.net www.nowamagic.net www.nowamagic.net
Program List:簡單的靜態建構器
PHP沒有靜態建構器,你可能需要初始化靜態類,有一個很簡單的方法,在類別定義後面直接呼叫類別的Demonstration( )方法。
<?php function Demonstration() { return 'This is the result of demonstration()'; } class MyStaticClass { //public static $MyStaticVar = Demonstration(); //!!! FAILS: syntax error public static $MyStaticVar = null; public static function MyStaticInit() { //this is the static constructor //because in a function, everything is allowed, including initializing using other functions self::$MyStaticVar = Demonstration(); } } MyStaticClass::MyStaticInit(); //Call the static constructor echo MyStaticClass::$MyStaticVar; //This is the result of demonstration() ?>
程式運行結果:
This is the result of demonstration()
下面介紹PHP靜態變數static的使用介紹
static關鍵字在C#程式設計中非常常見,它用來修飾符聲明屬於類型本身而不是屬於特定物件的靜態成員。 static 修飾符可用於類別、欄位、方法、屬性、運算子、事件和建構函數,但不能用於索引器、析構函數或類別以外的類型。
宣告為static的類別、函數和變數將無法引用實例方法或變量,另外在C#中一旦類別被加入了static修飾符,則其內部所有變數和方法都必須是靜態的。靜態變數和方法必須透過類別名稱進行引用而不能透過實例物件引用。
那麼static關鍵字在php中與C#都有些不同呢?
聲明範圍
相對C#來說,PHP中static變數的使用範圍要更廣一些,我們不只可以在類,方法或變數前面加上static修飾符,我們甚至還能為函數內部變數加入static關鍵字。新增了static修飾符的變數即使在該函數執行完畢值仍然不會遺失,也就是說,在下次呼叫這個函數時,變數仍然記得原來的值。如:
<?php function test() { static $var=; $var+=; echo $var.' '; } test(); test(); test(); ?>
運行結果如下:
3 5 7
這裡有一點要注意的是,變數的賦值操作只會在變數第一次初始化時會被調用,在之後函數的執行過程中,這個操作不會被呼叫。
由於PHP中函數同樣是一等公民,所以不同於C#,我們可以直接定義函數,並直接在程式碼的任何地方調用,這一點跟javascript倒是有些相似。因此這時候函數靜態變數會比定義全域變數更有用,它可以避免變數重複定義導致衝突。
而由於C#中函數無法直接定義和調用,它必須寄宿在類別中,所以如果函數需要靜態變量,我們只需要在類別中定義便能達到相同效果。
呼叫方式
C#中,我們呼叫靜態成員的方式非常簡單和一致,因為靜態成員不屬於實例對象,所以無論是方法還是變量,C#對其靜態成員的存取方式一律是透過類別名稱.方法(變數)進行。
且在C#中,靜態函數是不能被設定為虛方法或覆寫的。而PHP對此提供了更為靈活多樣的支援。
首先,我們知道PHP中調用實例方法都是透過如:
someobj->someFun()調用,那麼我們調用靜態函數是否也能像C#那樣透過SomeClass-> ;someFun()呼叫呢?
答案是否定的,在PHP中,對靜態成員的呼叫只能透過::的方式進行,如:SomeClass::someFun()。
<?php class TestC { public static $var=; public $var=; function t() { self::$var+=; echo self::$var.' '; echo $this->var.' '; } public static function t() { self::$var+=; echo self::$var.' '; } } $t=new TestC(); $t->t(); TestC::t(); ?>
運行結果如下:
3 1 5
另外一点和C#中不同的是,在类中的方法中,如果我们需要调用静态变量,必须通过self::$somVar静态变量(注意变量前面的$符号,实例变量不需要),而调用静态方法则为self::someFun()(这里不需要$符号)。如上例。
另外,与C#最大的不同之处就是,PHP中,子类是可以覆盖父类的静态函数或变量的,不仅如此,(站在C#程序员的角度来看,我觉得PHP这点反而将事情搞复杂了),由于默认self::staticFun()调用的是子类的静态函数,这个时候如果我们想调用父类的静态变量怎么办呢?
这里PHP提供了额外的parent来调用基类的静态成员。如:
<?php class TestC { public static $var=; public $var=; function t() { self::$var+=; echo self::$var.' '; echo $this->var.' '; } public static function t() { self::$var+=; echo self::$var.' '; } } $t=new TestC(); $t->t(); TestC::t(); ?>
运行结果如下:
3 5 ‘Hello'
最好,根据上面的例子我们很容易想到,子类访问父类可以使用parent关键字,那么父类如何访问子类的静态方法呢?这里给出static的另外一个用法,这里如果将调用的静态方法前面的作用域换成static的话,PHP会根据该类的继承层次来计算最终的静态方法。如:
<?php class Test { function t() { static::t(); } public static function t() { echo self::'Test '; } } class Test extends Test { static function t() { echo self::'Test '; } } $t=new Test(); $t->t(); Test::t(); ?>
运行结果如下:
Test2 Test2
这里t实例在t1方法调用t2静态方法时,会根据其实例找到最终的静态方法并输出Test2。
相关推荐:
以上是PHP中的靜態變數有什麼作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

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

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境