OOP in PHP: Class-function from a variable?

亡梦爱人 提交于 2020-01-01 03:52:05

问题


Is it possible to call functions from class like this:

$class = new class;
$function_name = "do_the_thing";
$req = $class->$function_name();

Something similar solution, this doesn't seem to work?


回答1:


Yes, it is possible, that is know as variable functions, have a look at this.

Example from PHP's official site:

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>

In your case, make sure that the function do_the_thing exists. Also note that you are storing the return value of the function:

$req = $class->$function_name();

Try to see what the variable $req contains. For example this should give you info:

print_r($req); // or simple echo as per return value of your function

Note:

Variable functions won't work with language constructs such as echo(), print(), unset(), isset(), empty(), include(), require() and the like. Utilize wrapper functions to make use of any of these constructs as variable functions.




回答2:


My easiest example is:

$class = new class;
$function_name = "do_the_thing";
$req = $class->${$function_name}();

${$function_name} is the trick

Also works with static methods:

$req = $class::{$function_name}();



回答3:


You can use ReflectionClass.

Example:

$functionName = 'myMethod';
$myClass = new MyClass();
$reflectionMyMethod = (new ReflectionClass($myClass))->getMethod($functionName);

$relectionMyMethod->invoke($myClass); // same as $myClass->myMethod();

Remember to catch ReflectionException If Method Not Exist.



来源:https://stackoverflow.com/questions/2657454/oop-in-php-class-function-from-a-variable

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!