2010-11-29 5 views
3

다음 코드가 "4,5,6"대신 "1,1,1"을 인쇄하는 이유는 무엇입니까?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은 정적 변수 속성이 아닌 로컬 변수입니다. 자바와는 달리 당신은 항상, 그냥 싱글 톤 패턴은 일반적으로

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(); 

싱글 톤 패턴이 보장 다른 구현

// singleton instance 

을 보았다

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

theire 범위에 변수 또는 속성에 액세스가 있어야합니다 당신은 항상 정확히 하나의 클래스 인스턴스와 상호 작용합니다.

3

생성자에서 $instance은 아직 정의되지 않았습니다. 다음을 사용해야합니다 :

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

클래스의 정적 속성을 참조하십시오.

관련 문제