3

クラス内で静的関数を呼び出すときに、クラス名として変数を使用する際に問題が発生しました。私のコードは次のとおりです。

class test {
     static function getInstance() {
         return new test();
     }
}

$className = "test";
$test = $className::getInstance();

クラスの名前はデータベースから取得されているため、変数にクラス名を定義する必要があるため、インスタンスを作成するクラスがわかりません。

注:現在、次のエラーが発生しています。

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM 

ありがとう

4

2 に答える 2

8
$test = call_user_func(array($className, 'getInstance'));

call_user_funcコールバックを参照してください。

于 2010-01-17T20:49:02.530 に答える
0

リフレクションAPIを使用すると、次のようなことができます。

$className = 'Test';
$reflector = new ReflectionClass($className);
$method = $reflector->getMethod('getInstance');
$instance = $method->invoke(null);

あるいは:

$className = 'Test';
$reflector = new ReflectionClass($className);
$instance = $reflector->newInstance(); 
// or $instance = $reflector->newInstanceArgs([array]);
// or $instance = $reflector->newInstanceWithoutConstructor();

文字列の値をクラス名として直接解釈したり、友人を使用したりするよりも、どちらも私にははるかにわかりやすいように思えますcall_user_func

于 2012-05-03T08:26:43.550 に答える