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

PHP-如何调用作为对象一部分的函数,其中一部分是变量?,php,method-call,Php,Method Call,我需要调用一个作为对象一部分的函数。以下调用的工作原理与预期相同: $someobject = getobject(); $result = $someobject->somefunction->value(); 但是,我需要将“somefunction”组件作为变量 我试着这样做: $var = 'somefunction'; $result = '$someobject->' . $var '->value'(); 这不起作用,但我希望它传达了我所寻找的。我还尝试

我需要调用一个作为对象一部分的函数。以下调用的工作原理与预期相同:

$someobject = getobject();
$result = $someobject->somefunction->value();
但是,我需要将“somefunction”组件作为变量

我试着这样做:

$var = 'somefunction';
$result = '$someobject->' . $var '->value'();
这不起作用,但我希望它传达了我所寻找的。我还尝试了许多基于
call\u user\u func()
的变体,但没有找到有效的语法


我正在运行:php7.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!';
公共函数somefunction(){
返回“你好,世界”;
}
}
$someobject=newfoo;
然后我们可以正常访问该属性:

echo$someobject->someproperty;
或按名称动态更改:

$var='someproperty';
echo$someobject->$var;
同样,我们可以正常访问该方法:

echo$someobject->somefunction();
或按名称动态更改:

$var='somefunction';
$result=$someobject->$var();
请注意,您的示例有点混乱,因为您谈论的是“访问一个函数,其中一部分是变量”,但实际上您所要做的只是动态访问一个属性,然后碰巧调用了存储在该属性中的对象上的方法。因此,您调用的
somefunction
部分实际上是一个属性的名称

下面是一个有点像您的示例,但名称已更改:

A类{
公帑$foo;
}
B类{
公共功能值(){
返回“你好,世界”;
}
}
$a=新a;
$a->foo=新B;
$propertyname='foo';
echo$a->$propertyname->value();
万岁

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

$foobar = 'somefunction';
$result = $someobject->$foobar->value();
$result = $someobject->{$foobar}->value();
以下是:

$foobar = 'somefunction';
$result = $someobject->${foobar}->value();
也起作用(即产生预期结果),但也会产生以下警告:

警告:使用未定义的常量foobar-假定为“foobar”(这将在PHP的未来版本中引发错误)


非常感谢所有评论。特别是阮德和波达尔。我认为是阮德的评论加上斯维坦克·波达尔的以下评论最终破解了它。

这有用吗<代码>$result=$someobject->{$var}()$result=$result.value()在你的问题中
$someobject->somefunction->value()值是一个函数。但是somefunction不是,也许你的意思是这个
$result=$someobject->${var}->value()等等,var是PHP中的保留关键字。请尝试将“var”变量的名称更改为其他名称,然后再试一次。@SwetankPoddar是,但无论如何,
->${foo}
是错误的语法;这将把
foo
解释为常量,尝试将该常量的值用作变量名,然后将该变量的值用作属性(或方法)名!您考虑的是
->{$foo}
,但是在像这样的简单情况下,大括号实际上是不必要的。很好的解释。我同意我对这个问题的理解令人困惑。我不是一个PHP向导,所以这是由于我缺乏经验。请随意编辑问题以清理术语。请为您的答案提供一些上下文,而不仅仅是提供代码。