سؤال

جرب كما قد لا أستطيع الحصول على رأسي حول ما يفعله فئة IteratorIterator بالفعل. أتفهم أن الفصول يمكن أن تنفذ المسافة بحيث يعرف المحرك أنه يمكن أن يحلق باستخدام foreach و أدرك أنه من المفترض أن يقوم Iteratoriterator بتحويل أي شيء يمكن اجتيازه إلى جهاز تكرار ، لكن لا يمكنني أن أفهم كيف أفهم كيف.

خذ على سبيل المثال ، pdostatement صف دراسي؛ كيف سيتم تنفيذ أساليب التكرار القياسية (التالية ، المفتاح ، الترجيع ، إلخ) للسماح بالتكرار على Pdostatement؟

آسف إذا كان سؤالي غير واضح ، فأنا أعاني فقط من أجل فهم السبب الدقيق لهذا الفئة والوثائق الموجودة عليه ضئيلة.

شكرًا،

إرادة

تحديث: مرور ملفات PHPT ، وجدت اختبارًا واحدًا يستخدم ITERATARITERATOR:

<?php

$root = simplexml_load_string('<?xml version="1.0"?>
<root>
    <child>Hello</child>
    <child>World</child>
</root>
');

foreach (new IteratorIterator($root->child) as $child) {
    echo $child."\n";
}

?>

الناتج المتوقع هو:

Hello
World

أنا لا أتابع حقًا كيف يأخذ بناء iteratoriterator الطفل $- جذر> كحجة وكيف يدير التكرار على العناصر الفرعية.

هل كانت مفيدة؟

المحلول

مرتكز على هذه, ، أعتقد أنه يتيح لك التكرار على الأشياء المتكررة. أي يمكنك سحب كائنات أخرى في كائنك الرئيسي واستخدام IteratorIterator على كائنك الرئيسي ، وتكرار الكائنات الطفل أيضًا.

تحديث: بناءً على التحديث الخاص بك. هذا أمر منطقي بالنسبة لي ، على الرغم من وجود كائن جذر واحد فقط ، لذا فإن التكرار لا ينطبق حقًا في هذا المثال ، ولكن يمكنك أن يكون هناك المزيد من الكائنات الجذرية. وبعبارة أخرى ، أعتقد أن iteratoriterator هو نفسه وجود حلقات foreach المتداخلة ، دون الحاجة إلى معرفة جميع عناصر كل كائن. وبعبارة أخرى ، فإن foreach متداخلة باستخدام كائنات موجهة للكائنات ... هناك بيان زائد. :-)

نصائح أخرى

إذا لم تجدها بعد ، https://www.phpro.org/tutorials/introduction-to-spl.html لديه بعض الأمثلة التي قد تساعدك.


iteratoriTerator>

  • "يسمح غلاف التكرار هذا بتحويل أي شيء يمكن اجتيازه إلى مؤلف."

يمكن اجتيازه>

  • "واجهة لاكتشاف ما إذا كان الفئة يمكن اجتيازها باستخدام foreach."
  • "يمكن استخدام الفئات الداخلية (المدمجة) التي تنفذ هذه الواجهة في بنية foreach ولا تحتاج إلى تنفيذ iteratoraggregate أو iterator."
  • "هذه واجهة محرك داخلية لا يمكن تنفيذها في البرامج النصية PHP. إما أن يتم استخدام iteratoraggregate أو ايتراتور بدلاً من ذلك."

يحتوي الموقع على بعض أمثلة متكررة قد تكون مفيدة ولكن ، ولكن ، إذا حصلت عليه بشكل صحيح, ، Iteratoriterator هو من وجهة نظر البرمجة النصية عديمة الفائدة إلى حد ما (عند استخدامها على الأقل على الأقل).

إنه ينشئ كائنات قابلة للتكرار من الكائنات التي تنفذ الواجهة القابلة للتجاوز ، ولكن فئات المتدربين التي تنفذ الواجهة القابلة للتجاوز يمكن أن تكون قابلة للتطبيق على أي حال ولا يمكن للنصوص تنفيذ التجارة ...

(لم يرد ذكر في المستندات ، فإن SimplexMlelement تنفذ عبر)

اعتقدت المثال رقم 2 هنا هو مستقيم جدا إلى الأمام ...
يتيح لك أساسًا تنفيذ سلوك محدد لفصلك لوظائف مجموعة المصفوفة التالية/السابقة/الحالية/الترجيع/المفاتيح ، المتوقع بواسطة محلل PHP Foreach.

لذلك لتنفيذ سؤالك ، يمكن للمرء أن ينشئ فئة Iterator مع pdostatement مثل Memeber ، على سبيل المثال ، استخدم الطريقة التالية للاتصال بـ pdostatement :: جلب لإرجاع بيانها التالي. تخزينه سيتيح لك تنفيذ كل من perivous والحديثة. لم يستخدم هذا الفصل كثيرًا ، لكنني أراهن أنه ليس من الصعب تنفيذ الترجيع والمفتاح. لاحظ أن هذا متطاير لذلك قد أكون مخطئًا في التفاصيل ، لكنني أعتقد أن المفهوم يجب أن يكون واضحًا

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