2013-11-03 49 views
0

我有一個名爲getPropertyValue($ object,$ property)的遞歸定義的函數,如果$ property不存在任意深度到$ object中,則返回false,否則返回與$ object內第一個$ property相對應的值。它本質上是PHP的內置函數的一個通用版本property_exists()有沒有辦法鏈接PHP方法,同時也返回一些東西?

我想使這個方法是可鏈接的,我知道要做到這一點,我只需要返回對類實例的引用($ this)該方法,但如上所述,我已經返回與$ object內第一個$ property相對應的值。

我怎樣才能讓這個方法可鏈接,而仍然返回此值?我想有一種可能性是返回一個包含$ this和該屬性/ false值的對象,如果分別找到/未找到。這是一種可行的方法嗎?在這種情況下實現可鏈接性的最佳方式是什麼?

非常感謝。

+0

可能的重複[如何在PHP中鏈接方法?](http://stackoverflow.com/questions/7549423/how-do-i-chain-methods-in-php) – RafH

+2

您返回false。 Chaining意味着繼續;如果從一個方法返回false,那麼爲什麼繼續並返回另一個值,如果失敗? – AbraCadaver

回答

0

這種API時要返回的數據並未真正發揮作用。

它可以是便利用於構建複雜對象,其中可以用較少的樣板代碼執行許多方法。這些方法往往被描述性地命名,給出了正在做什麼的一個好主意。

一個示例是'query builder'模式,通過鏈式方法構建SQL語句。

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

不要被愚弄,但這只是使您避免使用setter。

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

明顯沒有創建一個查詢構建器,並且有相同的API的不同實現,但關鍵是他們都將數據添加到對象,而不是返回。

0

你可以將它們放入一個數組返回多個值:

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

是的,但在問題的背景下,這是sl。。他們期望將方法與最終結果聯繫起來或弄虛作假。我們是否應該編碼接受來自所有方法的數組,以防鏈中的某些內容爲假,但我們還是需要一些值? – AbraCadaver

+0

好吧,那麼你必須採取另一種方法:只返回$ this,並讓函數將其結果寫入一個extern關聯數組,其中鍵名=屬性名和值=屬性值,否則爲false。然後在函數完成其工作後再檢查數組。 – Adriana

相關問題