PHP在调用静态方法时使用变量

时间:2009-10-26 19:33:37

标签: php static methods

我有三个类都有一个名为'create'的静态函数。 我想根据表单的输出动态调用适当的函数,但是语法有点麻烦。无论如何要执行此操作?

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

非常感谢任何建议。

感谢。

5 个答案:

答案 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(危险,小心。)