2016-01-22 6 views
0

Я работаю с классом третьей стороной, и мне нужно, чтобы иметь возможность запускать часть кода одного из двух способов, в зависимости ...PHP Несколько переменных свойств объекта

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

ИЛИ

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

Моя проблема в том, я не знаю, как фраза вопрос для Google ... Я предполагаю, что есть решение для указанной задачи.

Заранее благодарим за любую помощь!

ответ

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 
}); 
Смежные вопросы