使用定义的常量创建对象


Using defined constants to create objects

任意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 的类。

旁注:不能使用名称与保留字冲突的常量,例如 classfunction ,即使它们是大写的。

如果出于某种原因你经常这样做,你可以做这样愚蠢的事情:

function newClass($str, $args = NULL) {
    return new $str($args);
}
$class = newClass(MYCLASS);

。但我真的不推荐它。我还猜你可能不需要那么多常量,或者有一种更优雅的方式来做你正在做的事情,根本不涉及常量。