開啟PHP Static 關(guān)鍵字之旅模式
聲明類成員或方法為static,就可以不實(shí)例化類而直接訪問(wèn)。不能通過(guò)一個(gè)對(duì)象來(lái)訪問(wèn)其中的靜態(tài)成員(靜態(tài)方法除外)。
為了兼容PHP4,如果沒(méi)有指定“可見性”,屬性和方法默認(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)用類。但該變量的值不能為關(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)鍵字即可。
在類中,static關(guān)鍵字有兩種主要用法,一是用來(lái)定義靜態(tài)成員,一是用來(lái)定義靜態(tài)方法。在類的內(nèi)部,可以使用作用域限定符 (::) 來(lái)訪問(wèn)不同層次作用域的變量。
靜態(tài)方法
靜態(tài)方法和非靜態(tài)方法之間有一個(gè)重要的區(qū)別:在調(diào)用靜態(tài)方法時(shí),不再需要擁有類的實(shí)例。
靜態(tài)方法和非靜態(tài)方法使用原則:一是如果某個(gè)方法中不包含$this變量,就應(yīng)該時(shí)靜態(tài)方法;如果不需要類的實(shí)例,可能還應(yīng)該使用靜態(tài)類,這樣可以免去實(shí)例化類的工作。另,在靜態(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類中的$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)文章
怎樣給PHP源代碼加密?PHP二進(jìn)制加密與解密的解決辦法
本篇文章小編為大家介紹,怎樣給PHP源代碼加密?PHP二進(jìn)制加密與解密的解決辦法。需要的朋友參考下2013-04-04
YII2 實(shí)現(xiàn)多語(yǔ)言配置的方法分享
這篇文章主要介紹了YII2實(shí)現(xiàn)多語(yǔ)言配置的方法,文中YII2的版本是2.0.7,可能會(huì)與其他教程有不同,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01
thinkphp,onethink和thinkox中驗(yàn)證碼不顯示的解決方法分析
這篇文章主要介紹了thinkphp,onethink和thinkox中驗(yàn)證碼不顯示的解決方法,簡(jiǎn)單分析了thinkPHP驗(yàn)證碼不顯示的原因與相應(yīng)的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
ThinkPHP3.2.3數(shù)據(jù)庫(kù)設(shè)置新特性
前篇文章,我們總結(jié)了下ThinkPHP3.2中所產(chǎn)生的新變化,本文我們來(lái)詳細(xì)看下關(guān)于數(shù)據(jù)庫(kù)這塊有哪些新特性,非常細(xì)致,有需要的小伙伴參考下。2015-03-03
Laravel 5.5基于內(nèi)置的Auth模塊實(shí)現(xiàn)前后臺(tái)登陸詳解
最近在使用laravel5.5,利用其實(shí)現(xiàn)了一個(gè)功能,下面分享給大家,這篇文章主要給大家介紹了關(guān)于Laravel 5.5基于內(nèi)置的Auth模塊如何實(shí)現(xiàn)前后臺(tái)登陸的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
thinkphp隱藏index.php/home并允許訪問(wèn)其他模塊的實(shí)現(xiàn)方法
這篇文章主要介紹了thinkphp隱藏index.php/home并允許訪問(wèn)其他模塊的實(shí)現(xiàn)方法,想要達(dá)成的效果很簡(jiǎn)單,我有兩個(gè)模塊,Home、Wechat。具體詳情請(qǐng)參考下本文。感興趣的朋友一起看看吧2016-10-10
thinkPHP連接sqlite3數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法(附Thinkphp代碼生成器下載)
這篇文章主要介紹了thinkPHP連接sqlite3數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,涉及thinkPHP的數(shù)據(jù)庫(kù)相關(guān)配置技巧,并附帶了Thinkphp代碼生成器供讀者下載使用,需要的朋友可以參考下2016-05-05
php+mysql不用遞歸實(shí)現(xiàn)的無(wú)限級(jí)分類實(shí)例(非遞歸)
這篇文章主要介紹了php+mysql不用遞歸實(shí)現(xiàn)的無(wú)限級(jí)分類實(shí)例,重點(diǎn)在不使用遞歸,需要的朋友可以參考下2014-07-07
Yii視圖CGridView實(shí)現(xiàn)操作按鈕定義地址示例
這篇文章主要介紹了Yii視圖CGridView實(shí)現(xiàn)操作按鈕定義地址的方法,涉及Yii視圖按鈕操作相關(guān)技巧,需要的朋友可以參考下2016-07-07

