0

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

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

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

非常感谢。

4

2 回答 2

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 有不同的实现,但关键是它们都将数据添加到对象而不是返回它。

于 2013-11-03T11:33:47.047 回答
0

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

return array($value,$this); // so you return both.
于 2013-11-03T00:54:52.660 回答