開(kāi)啟PHP Static 關(guān)鍵字之旅模式
聲明類(lèi)成員或方法為static,就可以不實(shí)例化類(lèi)而直接訪問(wèn)。不能通過(guò)一個(gè)對(duì)象來(lái)訪問(wèn)其中的靜態(tài)成員(靜態(tài)方法除外)。
為了兼容PHP4,如果沒(méi)有指定“可見(jiàn)性”,屬性和方法默認(rèn)為public。
由于靜態(tài)方法不需要通過(guò)對(duì)象即可調(diào)用,所以偽變量$this在靜態(tài)方法中不可用。
靜態(tài)屬性不可以由對(duì)象通過(guò)->操作符來(lái)訪問(wèn)。
用::方式調(diào)用一個(gè)非靜態(tài)方法會(huì)導(dǎo)致一個(gè)E_STRICT級(jí)別的錯(cuò)誤。
就像其它所有的PHP靜態(tài)變量一樣,靜態(tài)屬性只能被初始化為一個(gè)字符值或一個(gè)常量,不能使用表達(dá)式。 所以你可以把靜態(tài)屬性初始化為整型或數(shù)組,但不能指向另一個(gè)變量或函數(shù)返回值,也不能指向一個(gè)對(duì)象。
PHP5.3.0之后,我們可以用一個(gè)變量來(lái)動(dòng)態(tài)調(diào)用類(lèi)。但該變量的值不能為關(guān)鍵字self, parent 或static。
Example #1 靜態(tài)成員代碼示例
<?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } class Bar extends Foo { public function fooStatic() { return parent::$my_static; } } print Foo::$my_static . " "; $foo = new Foo(); print $foo->staticValue() . " "; print $foo->my_static . " "; // Undefined "Property" my_static print $foo::$my_static . " "; $classname = 'Foo'; print $classname::$my_static . " "; // PHP 5.3.0之后可以動(dòng)態(tài)調(diào)用 print Bar::$my_static . " "; $bar = new Bar(); print $bar->fooStatic() . " "; ?>
Example #2 靜態(tài)方法代碼示例
<?php class Foo { public static function aStaticMethod() { // ... } } Foo::aStaticMethod(); $classname = 'Foo'; $classname::aStaticMethod(); // As of PHP 5.3.0 ?>
關(guān)于static 中靜態(tài)變量和靜態(tài)方法的總結(jié)
靜態(tài)變量
靜態(tài)變量是只存在于函數(shù)作用域的變量,不過(guò),在函數(shù)執(zhí)行完成后,這種變量的值不會(huì)丟失,也就是說(shuō),在下一次調(diào)用這個(gè)函數(shù)時(shí),變量仍然會(huì)記得原來(lái)的值。要將某個(gè)變量定義為靜態(tài)的,只需要在變量前加上 static 關(guān)鍵字即可。
在類(lèi)中,static關(guān)鍵字有兩種主要用法,一是用來(lái)定義靜態(tài)成員,一是用來(lái)定義靜態(tài)方法。在類(lèi)的內(nèi)部,可以使用作用域限定符 (::) 來(lái)訪問(wèn)不同層次作用域的變量。
靜態(tài)方法
靜態(tài)方法和非靜態(tài)方法之間有一個(gè)重要的區(qū)別:在調(diào)用靜態(tài)方法時(shí),不再需要擁有類(lèi)的實(shí)例。
靜態(tài)方法和非靜態(tài)方法使用原則:一是如果某個(gè)方法中不包含$this變量,就應(yīng)該時(shí)靜態(tài)方法;如果不需要類(lèi)的實(shí)例,可能還應(yīng)該使用靜態(tài)類(lèi),這樣可以免去實(shí)例化類(lèi)的工作。另,在靜態(tài)方法中時(shí)不能使用$this變量的,因?yàn)殪o態(tài)方法不屬于某個(gè)特定的實(shí)例。
- php Static關(guān)鍵字實(shí)用方法
- php面向?qū)ο笕ヂ?(十) final static const關(guān)鍵字的使用
- 理解PHP5中static和const關(guān)鍵字的區(qū)別
- PHP中static關(guān)鍵字以及與self關(guān)鍵字的區(qū)別
- php類(lèi)中的$this,static,final,const,self這幾個(gè)關(guān)鍵字使用方法
- PHP中static關(guān)鍵字原理的學(xué)習(xí)研究分析
- php中static和const關(guān)鍵字用法分析
- 深入理解PHP中的static和yield關(guān)鍵字
相關(guān)文章
Session的工作機(jī)制詳解和安全性問(wèn)題(PHP實(shí)例講解)
有一點(diǎn)我們必須承認(rèn),大多數(shù)web應(yīng)用程序都離不開(kāi)session的使用。這篇文章將會(huì)結(jié)合php以及http協(xié)議來(lái)分析如何建立一個(gè)安全的會(huì)話管理機(jī)制2014-04-04TP5 基于bootstrap實(shí)現(xiàn)多圖上傳插件
這篇文章主要介紹了TP5 基于bootstrap實(shí)現(xiàn)多圖上傳插件,需要的朋友可以參考下2018-07-07php+laravel依賴注入知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是關(guān)于php+laravel依賴注入知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-11-11yii插入數(shù)據(jù)庫(kù)防并發(fā)的簡(jiǎn)單代碼
這篇文章主要介紹了yii插入數(shù)據(jù)庫(kù)防并發(fā)的簡(jiǎn)單代碼,需要的朋友可以參考下2017-05-05laravel http 自定義公共驗(yàn)證和響應(yīng)的方法
今天小編就為大家分享一篇laravel http 自定義公共驗(yàn)證和響應(yīng)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09laravel數(shù)據(jù)庫(kù)查詢結(jié)果自動(dòng)轉(zhuǎn)數(shù)組修改實(shí)例
這篇文章主要介紹了laravel數(shù)據(jù)庫(kù)查詢結(jié)果自動(dòng)轉(zhuǎn)數(shù)組修改實(shí)例,有需要的同學(xué)可以借鑒參考下2021-02-02關(guān)于laravel5.5的定時(shí)任務(wù)詳解(demo)
今天小編就為大家分享一篇關(guān)于laravel5.5的定時(shí)任務(wù)詳解(demo),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10CodeIgniter框架鉤子機(jī)制實(shí)現(xiàn)方法【hooks類(lèi)】
這篇文章主要介紹了CodeIgniter框架鉤子機(jī)制實(shí)現(xiàn)方法,結(jié)合具體的hooks類(lèi)文件描述了鉤子機(jī)制的原理與相關(guān)操作技巧,需要的朋友可以參考下2018-08-08