php方法中的靜態變數是什麼
php中的靜態變數只存在於函數作用域內,也就是說,靜態變數只存活在堆疊中;在PHP只要在變數前面加上關鍵字static,變數就變成靜態變數了。
本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦
php方法中的靜態變數是什麼?
PHP中的靜態變數及static靜態變數使用詳解
靜態變數只存在於函數作用域內,也就是說,靜態變數只存活在堆疊中。一般的函數內變數在函數結束後會釋放,例如局部變量,但是靜態變數卻不會。是說,下次再呼叫這個函數的時候,該變數的值會保留下來。
#只要在變數前面加上關鍵字static,變數就變成靜態變數了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
程式運行結果:
1
2
2
4
3
8
函數test( )執行後,變數$nm的值都保存了下來。
在class中常使用到靜態屬性,例如靜態成員、靜態方法。
Program List:類別的靜態成員
靜態變數$nm屬於類別nowamagic,而不是類別的某個實例。這個變數對所有實例都有效。
::是作用域限定運算符,這裡用的是self作用域,而不是$this作用域,$this作用域只表示類別的目前實例,self::表示的是類別本身。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
程式執行結果:
1
3
2
5
Program List:靜態屬性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
程式運行結果:
www.nowamagic.net
www.nowamagic.net
www.nowamagic.net
www.nowamagic.net
Program List:簡單的靜態建構器
PHP沒有靜態建構器,你可能需要初始化靜態類,有一個很簡單的方法,在類別定義後面直接呼叫類別的Demonstration()方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
程式運行結果:
This is the result of demonstration()
下面要介紹PHP靜態變數static的使用介紹
static關鍵字在C#程式設計中非常常見,它用來修飾符宣告屬於類型本身而不是屬於特定物件的靜態成員。 static 修飾符可用於類別、欄位、方法、屬性、運算子、事件和建構函數,但不能用於索引器、析構函數或類別以外的類型。宣告為static的類別、函數和變數將不能引用實例方法或變量,另外在C#中一旦類別被添加了static修飾符,則其內部所有變數和方法都必須是靜態的。靜態變數和方法必須透過類別名稱進行引用而不能透過實例物件引用。
那麼static關鍵字在php中與C#都有些不同呢?
聲明範圍
相對C#來說,PHP中static變數的使用範圍要更廣一些,我們不僅可以在類,方法或變數前面加上static修飾符,甚至還能為函數內部變數新增static關鍵字。新增了static修飾符的變數即使在該函數執行完畢值仍然不會遺失,也就是說,在下次呼叫這個函數時,變數仍然記得原來的值。如:
1 2 3 4 5 6 7 8 9 10 11 |
|
運行結果如下:
3 5 7
這裡有一點要注意的是,變數的賦值運算只會在變數第一次初始化時會被調用,在之後函數的執行過程中,這個操作不會被調用。
由於PHP中函數同樣是一等公民,所以不同於C#,我們可以直接定義函數,並直接在程式碼的任何地方調用,這一點跟javascript倒是有些相似。因此這時候函數靜態變數會比定義全域變數更有用,它可以避免變數重複定義導致衝突。而由於C#中函數無法直接定義和調用,它必須寄宿在類別中,所以如果函數需要靜態變量,我們只需要在類別中定義便能達到相同效果。
呼叫方式
C#中,我們呼叫靜態成員的方式非常簡單和一致,因為靜態成員不屬於實例對象,所以無論是方法還是變量,C#對其靜態成員的存取方式一律是透過類別名稱.方法(變數)進行。且在C#中,靜態函數是不能被設定為虛方法或覆蓋的。而PHP對此提供了更為靈活多樣的支援。
首先,我們知道PHP中調用實例方法都是透過如:someobj->someFun()調用,那麼我們調用靜態函數是否也能像C#那樣透過SomeClass->someFun()調用呢?答案是否定的,在PHP中,對靜態成員的呼叫只能透過::的方式進行,如:SomeClass::someFun()。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
運行結果如下:
3 1 5
#另外一點和C#中不同的是,在類別中的方法中,如果我們需要呼叫靜態變量,必須透過self::$somVar靜態變數(注意變數前面的$符號,實例變數不需要),而呼叫靜態方法則為self::someFun()(這裡不需要$符號)。如上例。
另外,与C#最大的不同之处就是,PHP中,子类是可以覆盖父类的静态函数或变量的,不仅如此,(站在C#程序员的角度来看,我觉得PHP这点反而将事情搞复杂了),由于默认self::staticFun()调用的是子类的静态函数,这个时候如果我们想调用父类的静态变量怎么办呢?这里PHP提供了额外的parent来调用基类的静态成员。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
运行结果如下:
3 5 ‘Hello'
最好,根据上面的例子我们很容易想到,子类访问父类可以使用parent关键字,那么父类如何访问子类的静态方法呢?这里给出static的另外一个用法,这里如果将调用的静态方法前面的作用域换成static的话,PHP会根据该类的继承层次来计算最终的静态方法。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
运行结果如下:
Test2 Test2
这里t实例在t1方法调用t2静态方法时,会根据其实例找到最终的静态方法并输出Test2。
总结
从上面的分析,我们不难看出,对于静态成员的使用,PHP提供了比C#更为强大的功能或灵活性,但从我的角度来看,这种灵活性不见得就更好,从某种角度来看,如果类的继承层次过于复杂,它可能会让我产生混淆。当然,同样的工具不同人使用效果会完全不一样,既然PHP提供了更多样的选择,那么相信如果使用恰当的话,PHP中的static可能会提供比C#中更为强大而简便的使用方式。
推荐学习:《PHP视频教程》
以上是php方法中的靜態變數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

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

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

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

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

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。
