有没有办法在链接 php 方法的同时返回一些东西


Is there a way to chain php methods while also returning something?

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

我想使此方法可链接,并且我知道要做到这一点,我只需返回对方法中类实例 ($this) 的引用,但如上所述,我已经返回了对应于$object中找到的第一个$property的值。

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

非常感谢。

当您想要返回数据时,这种 API 实际上不起作用。

它可以方便地构建复杂对象,其中可以使用较少的样板代码执行许多方法。这些方法倾向于描述性地命名,从而很好地了解正在做什么。

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

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

但是不要被愚弄,这只是让您免于使用二传手。

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

很明显,您不是在创建查询构建器,并且同一 API 有不同的实现,但关键是它们都向对象添加数据而不是返回它。

您可以通过

将它们放入数组中来返回多个值:

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