我有两个类,class ClassOne { }
和class ClassTwo {}
。我得到一个字符串,它可以是"One"
或"Two"
。
而不是使用长switch
语句,例如:
switch ($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
有没有一种方法可以使用字符串创建一个示例,即new Class("Class" . $str);
?
6条答案
按热度按时间qnyhuwrf1#
你可以的!
使用命名空间时,请提供fully qualified name:
你也可以动态调用变量函数和方法。
PHP也可以创建variables with a string,但这是一个非常糟糕的做法,应该尽可能避免。考虑使用数组代替。
lf3rwulv2#
您可以简单地使用以下语法来创建一个新类(如果您正在创建factory,这很方便):
作为一个(异常粗糙的)工厂方法示例:
uujelgoq3#
看一下http://www.php.net/manual/en/language.oop5.basic.php的示例3
vfh0ocws4#
假设
ClassOne
被定义为:使用PHP反射;
创建新示例:
调用一个方法:
使用变量作为方法:
使用Reflection而不是仅仅使用原始字符串来创建对象,可以让您更好地控制对象,并且更易于测试(PHPUnit非常依赖Reflection)
5anewei65#
pgccezyw6#
如果你在文件的顶部有一个命名空间。
在当前文件的顶部导入所需的类:
::class
将返回所需类的整个命名空间