眾所周知,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";
?>