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();

...しかし、私の知る限り、 のように定数を直接使用することはできません。new MYCLASS()もちろん、 という名前のクラスを探すからですMYCLASS

補足:大文字であっても、classやなどの予約語と競合する名前の定数を使用することはできません。function

何らかの理由でこれを頻繁に行っている場合、次のようなばかげたことを行うことができます。

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

…が、あまりお勧めしません。また、おそらくそれほど多くの定数は必要ないか、定数をまったく必要としない、よりエレガントな方法があると思います。

于 2012-05-14T16:03:59.777 に答える