PHP多个变量对象属性

时间:2016-01-22 22:22:35

标签: php

我正在使用第三方课程,我需要能够以两种方式运行一段代码,具体取决于......

 $reader->get()->first()->each(function($obj)
 {
    // Do stuff
 }

OR

 $reader->get()->each(function($obj)
 {
    // Do stuff
 }

我总是可以通过像...这样的东西来调节属性。

 $a = 1;
 $obj->{"$a"}

但不幸的是,下面的内容不起作用......

 if (some scenario)
 {
 $a = "get()->first()";
 }
 else
 {
 $a = "get()";
 }

 $reader->{"$a"}->each(function($obj)

我的问题是我不确定如何用谷歌来表达问题......我假设有一个解决上述问题的方法。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您只能使用->{$variable}作为类本身的属性和方法的名称,您不能将->之类的PHP语法放在那里。你可以做的是使用函数变量:

function get_all($reader) {
    return $reader->get();
}
function get_first($reader) {
    return $reader->get()->first();
}

$a = 'get_all'; // or $a = 'get_first';
$a($reader)->each(function($obj) {
    // do stuff
});

答案 1 :(得分:0)

替代Barmar的回答,这个回答更加清晰。

$it = function($obj) {
   // do stuff
});

if (some_scenario) {
   $reader->get()->first()->each($it);
} else {
   $reader->get()->each($it);
}

还有一个解决方案:

if (some_scenario) {
   $foo = $reader->get()->first();
} else {
   $foo = $reader->get();
}
$foo->each(function($obj) {
    // do stuff
});