我有两个类,class ClassOne { }
和class ClassTwo {}
。我得到了一个可以是"One"
或"Two"
的字符串。
而不是使用长switch
语句,例如:
switch ($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
有没有一种方法可以使用字符串创建实例,即new Class("Class" . $str);
发布于 2011-01-02 20:23:37
可以,停那儿吧!
$str = 'One';
$class = 'Class'.$str;
$object = new $class();
使用命名空间时,请提供fully qualified name
$class = '\Foo\Bar\MyClass';
$instance = new $class();
你可以在php中做的其他很酷的事情有:
$personCount = 123;
$varname = 'personCount';
echo $$varname; // echo's 123
和可变函数和方法。
$func = 'my_function';
$func('param1'); // calls my_function('param1');
$method = 'doStuff';
$object = new MyClass();
$object->$method(); // calls the MyClass->doStuff() method.
发布于 2011-01-02 20:24:57
您可以简单地使用以下语法来创建一个新类(如果您正在创建一个factory,这将非常方便):
$className = $whatever;
$object = new $className;
作为一个(异常粗糙的)工厂方法示例:
public function &factory($className) {
require_once($className . '.php');
if(class_exists($className)) return new $className;
die('Cannot create new "' . $className . '" class - includes not found or class unavailable.');
}
发布于 2011-01-02 20:24:37
看一下来自http://www.php.net/manual/en/language.oop5.basic.php的示例3
$className = 'Foo';
$instance = new $className(); // Foo()
https://stackoverflow.com/questions/4578335
复制相似问题