2010-11-29 72 views
3

爲什麼下面的代碼打印出「1,1,1」而不是「4,5,6」?PHP中的靜態實例


class MyClass { 
    // singleton instance 
    private static $instance = 3; 

    function __construct() { 
$instance++; 
echo $instance . ","; 
    } 
} 

for($i = 0; $i < 3; $i++) { 
$obj = new MyClass(); 
} 

回答

10

$instance是一個局部變量,而不是靜態類屬性。不像Java中,你總是必須訪問變量或屬性在theire範圍

$var; // local variable 
$this->var; // object property 
self::$var; // class property 

我剛纔看到

// singleton instance 

的單例模式通常被實現不同

class SingletonClass { 
    protected $instance = null; 
    protected $var = 3; 
    protected __construct() {} 
    protected __clone() {} 
    public static function getInstance() { 
     if (is_null(self::$instance)) { self::$instance = new self(); } 
     return self::$instance; 
    } 
    public function doSomething() { 
     $this->var++; 
     echo $this->var; 
    } 
} 
$a = SingletonClass::getInstance(); 
$a->doSomething(); 

單例模式確保,即你總是與一個類的一個實例進行交互。

3

在您的構造函數中,$instance尚未定義。您必須使用:

self::$instance++; 
echo self::$instance . ","; 

引用您的類的靜態屬性。