2011-06-10 2 views
4

클래스에 설정되지 않은 경우에도 해당 클래스 외부에 새로운 정적 변수를 선언하는 방법이 있습니까?클래스 외부에 새 정적 변수 선언

// Using this class as a static object. 
Class someclass { 
    // There is no definition for static variables. 
} 

// This can be initialized 
Class classA { 
    public function __construct() { 
     // Some codes goes here 
    } 
} 

/* Declaration */ 
// Notice that there is no static declaration for $classA in someclass 
$class = 'classA' 
someclass::$$class = new $class(); 

어떻게 할 수 있습니까?

귀하의 조언에 감사드립니다.

답변

2

, 정적 변수 때문에, 음 ... STATIC이다 따라서 동적으로 선언 할 수 없습니다.

편집 : 레지스트리를 사용해 볼 수도 있습니다.

class Registry { 

    /** 
    * 
    * Array of instances 
    * @var array 
    */ 
    private static $instances = array(); 

    /** 
    * 
    * Returns an instance of a given class. 
    * @param string $class_name 
    */ 
    public static function getInstance($class_name) { 
     if(!isset(self::$instances[$class_name])) { 
      self::$instances[$class_name] = new $class_name; 
     } 

     return self::$instances[$class_name]; 
    } 

} 

Registry::getInstance('YourClass'); 
+0

클래스 내에서 정적 함수로 선언하는 것은 어떻습니까? 'public static function set ($ 클래스) {self :: $$ class = new $ class(); }' – Valour

+1

이것은 문맥과 관련이 없으며, ** 정적 변수는 런타임에 선언 할 수 없습니다. ** 이렇게하면, 치명적인 오류가 발생합니다. – cypher

2

__get() PHP의 마법 메서드는 객체의 존재하지 않는 속성에 액세스 할 때 호출됩니다.

http://php.net/manual/en/language.oop5.magic.php

당신은 당신이이 문제를 해결할 수 있습니다있는 내 용기를 가질 수있다.

편집 :

이 참조 :이 작업을 수행 할 수없는

Magic __get getter for static properties in PHP

+0

이것은 정적 변수에는 적용되지 않습니다. 정적 변수는 ** CLASS **의 속성이며 ** OBJECT **가 아닙니다. – cypher

+1

내 편집 된 게시물보기 및 downvote를 제거하십시오. –

+0

그래서 내 안에 함수가 있다고 선언 할 수 없다는 말입니까? 예 :'public static function set ($ class) {self :: $$ class = new $ class(); } ' – Valour