2010-11-29 74 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 . ","; 

引用您的类的静态属性。