PHP方法与动态名称链接

时间:2015-05-28 06:43:08

标签: php arrays dynamic methods chaining

我想知道是否可以使用数组的值(或键)创建方法链接作为方法的动态名称。

例如,我有一个数组: $methods = ['first', 'second', 'third']

是否可以创建以下呼叫?

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

2 个答案:

答案 0 :(得分:3)

这是未经测试的。有点像:

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

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

请注意,您调用的每个方法都应返回一个对象,该对象具有下一个要调用的方法。如果它是同一个类的对象 - 那么它可以用每个可链接的方法返回自己。

答案 1 :(得分: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();