массивы — PHP метод цепочки с динамическими именами

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

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

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

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

3

Решение

Это не проверено. Что-то вроде:

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

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

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

3

Другие решения

Вы также можете использовать функцию 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();
0