2

任意 PHP 问题,或多/少出于好奇。如果这是一个愚蠢的问题,我深表歉意。

$class  = 'ClassName';
$object = new $class();

或者

$object = $class::functionName();

这显然有效。

define(CLASS, 'ClassName');
$object = new CLASS();

或者

$object = CLASS::functionName();

这不起作用。

只是想知道是否可以使用已定义的常量来创建新对象。如果不是,我绝对明白为什么。

4

1 回答 1

3

好吧,你可以这样做:

define(MYCLASS, 'ClassName');
$class = MYCLASS;
$object = new $class();

...但据我所知,您不能像 in 那样直接使用常量new MYCLASS(),因为它当然会查找名为MYCLASS.

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

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

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

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

于 2012-05-14T16:03:59.777 回答