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 Nguyen 和 Swetank Poddar。我认为是 Duc Nguyen 的评论结合 Swetank Poddar 的以下评论最终破解了它。
我需要调用作为对象一部分的函数。以下调用按预期工作:
$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 Nguyen 和 Swetank Poddar。我认为是 Duc Nguyen 的评论结合 Swetank Poddar 的以下评论最终破解了它。