2011-06-10 87 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