PHP Использование переменной при вызове статического метода

У меня есть три класса, у которых есть статическая функция, называемая «create». Я хотел бы вызвать соответствующую функцию динамически на основе вывода из формы, но у меня небольшая проблема с синтаксисом. Есть ли способ выполнить это?

$class = $_POST['class']; $class::create(); 

Любые советы будут очень признательны.

Благодарю.

Solutions Collecting From Web of "PHP Использование переменной при вызове статического метода"

Если вы работаете с PHP 5.2, вы можете использовать call_user_func (или call_user_func_array ):

 $className = 'A'; call_user_func(array($className, 'method')); class A { public static function method() { echo 'Hello, A'; } } 

Вы получите:

 Hello, A 

Тип синтаксиса, который вы использовали в своем вопросе, возможен только с PHP> = 5.3; см. страницу руководства Статического Ключевого слова :

Начиная с PHP 5.3.0, можно ссылаться на класс, используя переменную. Значение переменной не может быть ключевым словом (например, self, parent и static).

Что вы делаете с PHP 5.3 .

пс. Вы должны рассмотреть возможность очистки $ _POST ['class'], так как вы не можете быть уверены, что будет в нем.

использовать call_user_func

heres пример из php.net

 class myclass { static function say_hello() { echo "Hello!\n"; } } $classname = "myclass"; call_user_func(array($classname, 'say_hello')); call_user_func($classname .'::say_hello'); // As of 5.2.3 $myobject = new myclass(); call_user_func(array($myobject, 'say_hello')); 

Я считаю, что это можно сделать только с PHP 5.3.0. Проверьте эту страницу и найдите $classname::$my_static чтобы увидеть пример.

Возможно, я не понимаю, чего вы хотите, но как насчет этого?

 switch ($_POST['ClassType']) { case "Class1": $class1::create(); break; case "Class2": $class2::create(); break; // etc. } 

Если это не сработает, вы должны изучить EVAL (опасно, будьте осторожны).