2015-05-28 2 views
3

Мне было интересно, можно ли создать цепочку методов, используя значения (или ключи) массива в качестве динамических имен методов.PHP Цепочка метода с динамическими именами

К примеру, у меня есть массив: $methods = ['first', 'second', 'third']

Можно ли создать следующий вызов?

first()->second()->third(); 

ответ

2

Это не проверено. Что-то вдоль линий:

$object = null; // set this to an initial object to call the methods on 

foreach ($methods as $value) 
{ 
    $object = $object->$value(); 
} 

Обратите внимание, что каждый метод вызове должен возвращать объект, который имеет метод будет называться следующим. Если это объект одного и того же класса, то он может просто вернуться к каждому связанному с ним методу.

+0

Спасибо, это то, что я искал. Решение было проще, чем тот, о котором я думал. – nteath

+1

Добро пожаловать, хотя вы, вероятно, должны заменить «$ value()» каким-то другим решением, например call_user_func(). http://php.net/manual/en/function.call-user-func.php – Marius

0

Вы также можете использовать функцию eval. Пример:

$object = new SomeClass(); // first, second, third 
$methods = ['first', 'second', 'third']; 

$callStr = 'return $object->'; 

foreach($methods as $method){ 
    $callStr.= $method . '()->'; 
} 

$callStr = substr($callStr, 0, -2); 
$callStr.= ';'; // return $object->first()->second()->third(); 

$result = eval($callStr); // return result of call - $object->first()->second()->third();