سؤال

أنا كائن أن تنفذ 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 واجهة على ما كنت تحاول تحقيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top