PHP實戰技巧(11)PHP中的靜態知識:靜態類屬性、方法
前言
靜態變量用的不多,但是靜態的類屬性、類方法,則是工作中必不可少的一個知識點。
基礎語法
先看代碼,下面逐一進行解釋。
“::” 是什麽?
它是兩組冒號,調用靜態資源專屬語法,基本功能接近 ->。
定義靜態方法、屬性
在屬性、方法前加 static 關鍵字,就可以將其定義為靜態。
調用靜態屬性
必須通過 類::$屬性名 的形式,不能使用 $this->屬性名。
調用靜態方法
可以通過 類::方法名() 的形式,也可以通過 $this->方法名() 的形式。
關於 $this 偽變量
因為靜態調用沒有 new 類() 的過程,所以
實戰意義
不用 new,用起來省事,這是表面上最容易看到的優點。
除此之外,看一個例子
下面的代碼,執行結果是什麽?
會報錯!因為 $x 是局部變量,離開函數後就銷毀了。
看另一個例子
執行後會怎樣?(SoDevel 這個類來自第一段代碼)
不會報錯,可以正常使用。
為什麽會這樣?
普通局部變量,一旦函數執行完畢就銷毀,但是靜態變量不會。
靜態類屬性就更牛了,不光不會銷毀,還可以被其他局部環境所調用。(靜態變量雖然沒有銷毀,但是只能在定義它的函數內使用)
這樣有什麽意義?
意義大了。
在面向對象編程中,我們主要代碼都在局部環境(也就是類方法裏),而在方法中定義的變量,都是局部變量。就算使用 $this->var 定義成類屬性,也只能在類的內部使用。
而 靜態類屬性 可以無視所有規則,在任何地方都能隨時進行賦值、讀取操作。
你用過MVC結構的框架嗎?
在控制器裏定義變量,都需要用 $this->assign() 或者類似的語法,傳遞給模板。
如果使用靜態類屬性,就可以免去這個過程,模板拿來即用。
那為什麽框架不這樣做?
因為某些特定情況不好處理,並且會導致性能下降(靜態資源直到程序執行完畢才釋放)
轉載出處:http://www.iis7.com/c/90/
PHP實戰技巧(11)PHP中的靜態知識:靜態類屬性、方法