我有一个名为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.