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