PHP中的OOP:从变量中调用类函数?

yx2lnoni  于 2022-11-28  发布在  PHP
关注(0)|答案(4)|浏览(193)

是否可以像这样从类中调用函数:

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

类似的东西解决,这个好像不太管用吧?

q1qsirdb

q1qsirdb1#

是的,这是可能的,即已知为变量函数,有**look at this.**

示例来自PHP官方网站:

<?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()

?>

在本例中,请确保函数do_the_thing存在。还要注意,您正在存储函数的返回值:

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

尝试查看变量$req包含的内容。例如,这应该会给您提供以下信息:

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

备注:

变量函数不能与echo(), print(), unset(), isset(), empty(), include(), require()等语言结构一起使用。利用 Package 函数将这些结构用作变量函数。

42fyovps

42fyovps2#

最简单的例子是:

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

**${$function_name}**是诀窍

也适用于静态方法:

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

ehxuflar3#

也可以试试这个(注意大括号{}):

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

v09wglhw4#

您可以使用ReflectionClass

范例:

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

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

如果方法不存在,请记住捕获ReflectionException。

相关问题