日記
定数で指定したクラス名でnewできない (21:50)Edit

define('DEFINED_CLASS_NAME', 'FooClass');
$foo = new DEFINED_CLASS_NAME;

とかしても、FooClassが生成されないんでおかしいなーと思ったら、上記の文脈ではDEFINED_CLASS_NAMEが定数なのかクラス名なのかが判断つかないんだね。というか、この文脈ではクラス名であるとして評価されるんだね。

で、PHPでは未定義の定数は、その定数名の文字列として評価されるから、DEFINED_CLASS_NAMEというクラスを探しにいって、見つからないから、未定義のクラスを生成しようとしたエラーが出る、と。

回避策としては、

define('DEFINED_CLASS_NAME', 'FooClass');
$className = DEFINED_CLASS_NAME;
$foo = new $className;

とかするのが無難かな。

Published At2005-06-16 00:00Updated At2005-06-16 00:00