سؤال
أنا كائن أن تنفذ ArrayAccess, مكرر و معدود.التي تنتج قريب مثالية مجموعة اخفاء.لا يمكن الوصول إليه مع إزاحة ($object[foo]
) انا يمكن رميها في foreach
-حلقة, و العديد من الأشياء الأخرى.
ولكن ما لا أستطيع فعله هو أن تعطيه الأم صفيف مكرر وظائف (next()
, reset()
, current()
, key()
) ، على الرغم من أنني قد نفذت الطرق اللازمة من التكرار.PHP يبدو أن بعناد محاولة تكرار خلال الأعضاء المتغيرات, و يتجاهل تماما مكرر-أساليب.
هل هناك واجهة من شأنها أن ربط كائن إلى ما تبقى من مجموعة-العبور-وظائف أو أنا عالقة مع ما لدي ؟
تحديث: في بلدان لا يبدو أن يكون الجواب أيضا.في حين أنه يستخدم في foreach
-الحلقات الأساسية صفيف مكرر وظائف لا استدعاء الأساليب.
المحلول
التغييرات الأخيرة في PHP منع ArrayIterators شكل يجري التلاعب بها باستخدام معيار مجموعة وظائف (إعادة المقبل ، إلخ).
هذا ينبغي أن يكون استعادة قريبا:http://news.php.net/php.internals/42015
نصائح أخرى
طريقة واحدة للحصول على هذا العمل هو تحديد الخاصة بك مكرر في فئة منفصلة ، ومن ثم أقول الرئيسية الخاصة بك الطبقة الجديد التكرار بدلا من الافتراضي.
class MyIterator implements Iterator {
public function key() {
//
}
public function rewind() {
//
}
// etc.
}
class MyMainClass implements IteratorAggregate {
private $_data = array();
// getIterator is required for the IteratorAggregate interface.
public function getIterator() {
return new MyIterator($this->_data);
}
// etc.
}
ثم يجب أن يكون لديك السيطرة قدر عليك.(و يمكنك إعادة استخدام الخاص بك MyIterator عبر عدد من الطبقات).
أي اختبار يتم على ما سبق ، ولكن المبدأ هو الصحيح ، على ما أعتقد.
ويساعد هذا الأمل!
هو ArrayIterator لا ما كنت تبحث عنه ؟ أو ماذا عن ArrayObject, التي يبدو أن SPL واجهة على ما كنت تحاول تحقيق.