PHP - 如何调用作为对象一部分的函数,其中一部分是变量?

PHP - how to call a function that is part of an object where one part is a variable?

我需要调用作为对象一部分的函数。以下调用按预期工作:

$someobject = getobject();
$result = $someobject->somefunction->value();

但是,我需要 "somefunction" 组件是一个变量。

我试过这样做:

$var = 'somefunction';
$result = '$someobject->' . $var '->value'();

没有 工作,但我希望它传达了我正在寻找的内容。我还尝试了很多基于 call_user_func() 的变体——但没有找到有效的语法。

我是 运行: PHP 7.2.24-0ubuntu0.18.04.3。 Ubuntu 18.04 LTS 的原版。

class Blueprint 
{
    public function method() 
    {
        return 'placeholder';   
    }
}

$object = new Blueprint;
$method = 'method';

// this will output `placeholder`
echo $object->{$method}();

要根据其名称动态访问 属性 或方法,只需比平时多使用一个 $ 符号即可。

例如,如果我们有这个对象:

class Foo {
    public $someproperty = 'Hello!';

    public function somefunction() {
        return 'Hello World';
    }
}

$someobject = new Foo;

然后就可以正常访问属性了:

echo $someobject->someproperty;

或动态按名称:

$var = 'someproperty';
echo $someobject->$var;

同理,我们可以正常访问方法:

echo $someobject->somefunction();

或动态按名称:

$var = 'somefunction';
$result = $someobject->$var();

请注意,您的示例有点令人困惑,因为您谈论的是 "accessing a function where one part is a variable",但您实际上想要做的只是访问 属性 动态地,然后你恰好在存储在 属性 中的对象上调用一个方法。所以你称为 somefunction 的部分实际上是 属性.

的名称

这是一个看起来有点像您的示例,但名称已更改:

class A {
    public $foo;
}
class B {
    public function value() {
        return 'Hello World';
    }
}

$a = new A;
$a->foo = new B;

$propertyname = 'foo';

echo $a->$propertyname->value();

万岁!

以下(为第二行生成了两个可选的有效语法)按预期工作,没有产生任何错误:

$foobar = 'somefunction';
$result = $someobject->$foobar->value();
$result = $someobject->{$foobar}->value();

以下:

$foobar = 'somefunction';
$result = $someobject->${foobar}->value();

也有效(即它产生了预期的结果),但它也产生了这个警告:

Warning: Use of undefined constant foobar - assumed 'foobar' (this will throw an Error in a future version of PHP) …

非常感谢所有评论。特别是 Duc NguyenSwetank Poddar。我认为是 Duc Nguyen 的评论结合 Swetank Poddar 的以下评论最终破解了它。