我正在使用第三方课程,我需要能够以两种方式运行一段代码,具体取决于......
$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)
我的问题是我不确定如何用谷歌来表达问题......我假设有一个解决上述问题的方法。
提前感谢您的帮助!
答案 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
});