PHP static關鍵字用來定義靜態方法及屬性,在類別中可用來延遲靜態綁定以及在函數中修飾變數。
1:先來談談static在函數中的用法;
function add(){ static $a = 0; echo $a,"<br />"; $a++; }
這裡static的作用即類似C裡的static的作用,保證$a變數只有在add()第一次呼叫時才會被初始化,但要注意的是定義static變數的時候,可以不賦初值,可以給定初值,但是賦初值的時候不能使用表達式或是呼叫函數賦值,否則會報錯。
另外一點要注意的即是static變數不會儲存引用,如下:
function get_obj_ref(){ static $obj = null; echo 'Ststic obj:',"<br />"; var_dump($obj); if(is_null($obj)){ $obj = &new stdClass(); } return $obj; } $obj = get_obj_ref(); $obj2 = get_obj_ref(); function get_obj_noref(){ static $obj = null; echo 'Ststic obj:',"<br />"; var_dump($obj); if(is_null($obj)){ $obj = new stdClass(); } return $obj; } $obj = get_obj_noref(); $obj2 = get_obj_noref();
當static存儲引用時,二次呼叫函數後,變數的值並未被儲存下來,且執行上面程式會報Deprecated錯誤,即傳回引用值賦值的用法已棄。
2:static在類別中的延遲靜態綁定;
延遲靜態綁定是指允許在一個靜態繼承的上下文中引用被呼叫類別。延遲綁定的意思為:static::不再定義目前方法所在的類,而是實際執行時間所在的類別。註:它可以用於(但不限於)靜態方法的呼叫。
除了簡單的static延遲綁定的用法,還有一種轉發調用,即使用self::,parent::,static:: 以及forward_static_call( )(函數只能在方法中呼叫)將轉送呼叫訊息,如下:
class A { public static function foo() { static::who(); } public static function who() { echo CLASS."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo CLASS."\n"; } } class C extends B { public static function who() { echo CLASS."\n"; } } C::test();
這裡得到的結果是A C C,顯然在呼叫parent::foo()時,還是使用了運行時呼叫類別。
還有一點要注意的是:只有顯示宣告的static類別才是從屬與子類別的。
以下部分內容參考此部落格文章:點擊開啟連結:PHP static 繼承
<span style="font-size:18px;">class A { protected static $var1 = null; protected static $var2 = null; public static function test(){ if(!static::$var2){ static::$var2 = static::$var1; } echo get_called_class().' '.static::$var2.' '; } } class B extends A { protected static $var1 = 'b'; } class C extends A { protected static $var1 = 'c'; } B::test(); C::test(); </span>
這裡得到的結果是b b。這裡B類先呼叫過test()方法,呼叫後$var2變數已經被賦值,而C類未定義自己的$var2變量,且父類中$var2變量值已經存在,故直接使用,若在B C類中顯示定義$var2變量,則結果又會有所不同。
以上是php中關於static關鍵字的用法及注意點的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6
視覺化網頁開發工具

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