任意PHP问题,或多或少出于好奇。如果这是一个愚蠢的问题,我深表歉意。
$class = 'ClassName';
$object = new $class();
或
$object = $class::functionName();
这显然是有效的。
define(CLASS, 'ClassName');
$object = new CLASS();
或
$object = CLASS::functionName();
这行不通。
只是想知道是否可以使用定义的常量来创建新对象。如果没有,我绝对明白为什么。
好吧,你可以这样做:
define(MYCLASS, 'ClassName');
$class = MYCLASS;
$object = new $class();
。但据我所知,你不能像new MYCLASS()
那样直接使用常量,因为它当然会寻找名为 MYCLASS
的类。
旁注:不能使用名称与保留字冲突的常量,例如 class
或 function
,即使它们是大写的。
如果出于某种原因你经常这样做,你可以做这样愚蠢的事情:
function newClass($str, $args = NULL) {
return new $str($args);
}
$class = newClass(MYCLASS);
。但我真的不推荐它。我还猜你可能不需要那么多常量,或者有一种更优雅的方式来做你正在做的事情,根本不涉及常量。