我有三个类都有一个名为'create'的静态函数。 我想根据表单的输出动态调用适当的函数,但是语法有点麻烦。无论如何要执行此操作?
$class = $_POST['class'];
$class::create();
非常感谢任何建议。
感谢。
答案 0 :(得分:8)
如果您使用的是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;请参阅Static Keyword的手册页,关于:
从PHP 5.3.0开始,它是可能的 使用变量引用类。 变量的值不能是a 关键字(例如自我,父母和 静态)。
答案 1 :(得分:2)
PHP 5.3的作品。
PS。您应该考虑清理$ _POST ['class'],因为您无法确定其中的内容。
答案 2 :(得分:1)
使用call_user_func
来自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'));
答案 3 :(得分:0)
我相信这只能在PHP 5.3.0之后完成。检查this page并搜索$classname::$my_static
以查看示例。
答案 4 :(得分:-2)
我可能误解了你想要的东西,但是这个怎么样?
switch ($_POST['ClassType']) {
case "Class1":
$class1::create();
break;
case "Class2":
$class2::create();
break;
// etc.
}
如果这不起作用,你应该调查EVAL(危险,小心。)