有没有办法链接PHP方法,同时还返回一些东西?

时间:2013-11-03 00:41:33

标签: php recursion chaining

我有一个名为getPropertyValue($ object,$ property)的递归定义函数,如果在$ object中任意深度不存在$ property,则返回false,否则返回$ object内找到的第一个$属性的值。它本质上是PHP内置函数property_exists()

的通用版本

我想让这个方法可链接,我知道要做到这一点,我只是在方法中返回对类实例($ this)的引用,但我已经返回,如上所述,值对应于$ object中找到的第一个$属性。

如何在仍然返回此值的同时使此方法可链接?我想有可能返回一个包含$ this和该属性值/ false的对象,如果找到/找不到它。这是一种可行的方法吗?在这种情况下实现可连接性的最佳方法是什么?

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以通过将多个值放入数组中来返回多个值:

return array($value,$this); // so you return both.

答案 1 :(得分:0)

当您想要返回数据时,这种API并不真正起作用。

用于构建复杂对象可以是方便,其中可以使用较少的样板代码执行多种方法。这些方法倾向于以描述性方式命名,从而很好地了解所做的工作。

一个例子是'查询构建器'模式,通过链式方法构建SQL语句。

$sql = $qb->select()->from('table')->where()->field('foo')->equals('bar');

不要被愚弄,这只是让你免于使用setter。

$qb->setSelect();
$qb->setFrom('table');
$qb->setField('foo');  
$qb->setEquals('bar');

显然你没有创建一个查询构建器,并且同一个API有不同的实现,但关键是它们都将数据添加到对象而不是返回它。