眾所周知,OOP的目的就是了把一個次編寫代碼,復制復制再復制,繼承繼承再繼承的合理利用每一次的工作,同時也方便代碼管理。哪個環節出錯了就去找哪個環節。但是有時候我們寫的類,最終發現它只使用了一次,並沒有生成多個的實例。這個時候再去new, 不僅影響效率,代碼也顯得不夠簡潔。
所以非常感性的php,為我們提供了一種便捷高效的方法 static 有了它以後這些統統不再是問題。
下面鄙人為大家講講static 的使用方法和特性。
class hw{ public static function hi(){ return 'Hello World!!!'; } } echo hw::hi();
class hw{ public function hi(){ return 'Hello World!!!'; } } echo hw::hi();
從上面的例子可以看出了,使用了static和不使用static屬性以後可以直接使用::方法從外面直接調用,但是為了效率和其他方面因素,還是建議使用static 來限制。
class foo{ private static function c(){ return 'abcd'; } public static function a(){ echo self::c(); } } foo::a();
使用了static 關鍵字來限制方法是必須使用self:: 在本類內部引用,上面的例子已經將的很清楚了。
class foo{ public static $a; public static function a(){ self::$a='abcd'; } } foo::a(); echo foo::$a;
我們同樣可以使用static關鍵字來限制變量 這個時候變量不會一直保持上一次負值時候的值。
class foo{ public static $a; public static function a(){ return 'abcd'; } } class oo extends foo{ public static function a(){ echo '1234'; } } oo::a();
static 的繼承和普通類的繼承方法一樣,並沒有太大的區別。
class foo{ public static $a; public static function a(){ return 'abcd'; } } class oo extends foo{ public static function aa(){ echo parent::a(); } } oo::aa();
只是使用的時候有寫區別,必須是parent::方法來引用父類的方法,並不能直接self::來使用父類的方法,如下例子,則不會顯示任何值:
class foo{ public static $a; public static function a(){ return 'abcd'; } } class oo extends foo{ public static function aa(){ echo self::a(); } } oo::a();
再一個簡單的例子
<?php class Status { public static $ICE = -1; public static $WATER = 0; public static $VAPOR = 1; } ?>? <?php $exStatus = Status::$ICE; if ($exStatus == Status::$ICE) echo "Ice"; else echo "Water"; ?>