PHP中的static與Java中的static不太一樣,PHP中的static是用來保留變數的值
例如
function test() { static $count = 0; return $count++; } print test(); print test(); print test();
上面的範例,每次呼叫test()函式時,count變數會持續累加(可以應用在遞迴上面)
另外在物件的應用上,最典型的就是Singleton pattern(static將instance保留)
class TEST { private static $_instance = null; private static $_count = 0; private function __construct(){ self::$_count++; } public static function getInstance() { if( self::$_instance === null ){ self::$_instance = new self(); } return self::$_instance; } public function getCount() { return self::$_count; } } //同一個instance $test = TEST::getInstance(); print $test -> getCount(); // print 1 $test2 = TEST::getInstance(); print $test2 -> getCount();// print 1
最後還有一點要注意,使用static::呼叫和用self::呼叫是不同的
如果在有繼承方法的狀況下,self::是呼叫父類別,而static::才是呼叫本身
範例
class A { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class B extends A {} class C extends B {} echo get_class(B::getSelf()); // A echo get_class(C::getSelf()); // A echo get_class(C::getStatic()); // C echo get_class(B::getStatic()); // B echo get_class(A::getStatic()); // A