2011-06-10 39 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($ class){self :: $$ class = new $ class(); }' – Valour 2011-06-10 13:32:41

+1

這不是關於上下文的,**靜態變量不能在運行時聲明**如果以這種方式嘗試,你將會發生一個致命錯誤。 – cypher 2011-06-10 13:38:10

2

__get()當您訪問對象的不存在的屬性時調用PHP中的魔術方法。

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

你可能有一個容器內,你會處理這個問題。

編輯:

看到這個:

Magic __get getter for static properties in PHP

+0

這不適用於靜態變量。靜態變量是** CLASS **的屬性,而不是** OBJECT **的屬性。 – cypher 2011-06-10 13:25:58

+1

看到我編輯的帖子,請刪除downvote。 – 2011-06-10 13:26:40

+0

所以你說我甚至不能用裏面的函數來聲明它?例子:'public static function set($ class){self :: $$ class = new $ class(); }' – Valour 2011-06-10 13:36:59