PHP: имя переменной как экземпляр класса - PullRequest
3 голосов
/ 17 января 2010

У меня проблема с использованием переменной в качестве имени класса при вызове статической функции внутри класса. Мой код выглядит следующим образом:

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

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

Мне нужно определить имя класса для переменной, поскольку имя класса происходит из базы данных, поэтому я никогда не знаю, для какого класса создать экземпляр.

примечание: в настоящее время я получаю следующую ошибку:

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM 

Спасибо

Ответы [ 2 ]

8 голосов
/ 17 января 2010
$test = call_user_func(array($className, 'getInstance'));

См. call_user_func и обратные вызовы .

0 голосов
/ 03 мая 2012

Вы можете использовать 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 и друзей.

...