2016-01-22 128 views
0

我與第三方類的工作,我需要能夠運行的代碼段的兩種方式,這取決於一個...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) 

我的問題是我不知道如何短語問題谷歌...我假設有上述問題的解決方案。

在此先感謝您的幫助!

回答

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 
}); 
+0

非常感謝你,工作就像一個魅力! – SoWizardly

0

替代巴爾馬爾的答案,哪個imho有點清晰。

$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 
});