开发者

PHP Using a variable when calling a static method

I have three classes that all have a static function called 'create'. I would like to call the appropriate function dynamicall开发者_StackOverflow社区y based on the output from a form, but am having a little trouble with the syntax. Is there anyway to perform this?

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

Any advice would be greatly appreciated.

Thanks.


If you are working with PHP 5.2, you can use call_user_func (or call_user_func_array) :

$className = 'A';

call_user_func(array($className, 'method'));

class A {
    public static function method() {
        echo 'Hello, A';
    }
}

Will get you :

Hello, A


The kind of syntax you were using in your question is only possible with PHP >= 5.3 ; see the manual page of Static Keyword, about that :

As of PHP 5.3.0, it's possible to reference the class using a variable. The variable's value can not be a keyword (e.g. self, parent and static).


What you have works as of PHP 5.3.

ps. You should consider cleaning the $_POST['class'] since you cannot be sure what will be in it.


use call_user_func

heres an example from 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'));


I believe this can only be done since PHP 5.3.0. Check this page and search for $classname::$my_static to see the example.


I may be misunderstanding what you want, but how about this?

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

If that doesn't work, you should look into EVAL (dangerous, be careful.)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜