У меня есть три класса, у которых есть статическая функция, называемая «create». Я хотел бы вызвать соответствующую функцию динамически на основе вывода из формы, но у меня небольшая проблема с синтаксисом. Есть ли способ выполнить это?
$class = $_POST['class']; $class::create();
Любые советы будут очень признательны.
Благодарю.
Если вы работаете с 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 (опасно, будьте осторожны).