2011-06-09 21 views
1

對象我有這個類:使用usort()使用實現ArrayIterator

class ResultSet 
    implements ArrayAccess, Countable, Iterator { 
    /// Rest of implementation ... 
} 

我()運行到一個問題,使用usort並通過我的對象作爲第一個參數。 usort()期望一個數組而不是一個對象,但是給定我的接口的實現,我不知道它可能需要什麼。

php返回的確切錯誤是: Warning: usort() expects parameter 1 to be array, object given

+1

即使'ArrayObject'的從這個苦,我會說這是任何一個錯誤,或者至少不需要的遺留問題... – Wrikken 2011-06-09 18:24:31

回答

0

usort如何知道你已經實施ArrayAccess?沒有定義的值保存的位置 - 靈活性是界面的全部要點。

如果要將元素存儲在作爲對象私有成員的數組中,則可以代理usort操作。例如:

public function usort($callback) { 
    usort($this->container, $callback); 
} 
+0

我也能猜到usort()可能已在內部調用class_implements()(或類似的東西),並找出是否通過它可以表現得像一個數組。我也不能使用代理,因爲我的內部數組擁有各種不同的對象,但我可以想到沿着這條線的東西。謝謝! – Julian 2011-06-09 19:35:54

0

如果內存服務,ArrayAccess頁面或其中一個註釋(實際上可能是後者)中有一個很大的警告標誌。它基本上是按照以下順序說的:接口有些沒用,因爲PHP的數組函數不會將它的任何成員識別爲數組。