PHP da takrorlanuvchilar

PHP uchun sikl
PHP da sana va vaqt

PHP da Iterable nima?

Iteratsiya - bu takrorlanishi mumkin bo'lgan qiymat. Bu tsiklni necha marta bosib o'tganingizni kuzatib borish uchun ajoyib imkoniyatdir. Misol uchun, agar siz 10 ta takrorlashdan so'ng tsikldan chiqmoqchi bo'lsangiz, uni iteratsiya yordamida qilishingiz mumkin.

PHP da Iterables dan qanday foydalanish kerak

  • Takrorlanadigan qiymat a tomonidan qabul qilingan har qanday qiymatdir har biriga pastadir.
  • PHP 7.1 ushbu psevdo-ma'lumotlar turini taqdim etdi va undan funktsiyalarning qaytariladigan ma'lumotlar turi sifatida foydalanish mumkin. Bundan tashqari, funktsiya o'z argumenti sifatida iterablelarni qabul qilishi mumkin.

Takrorlanuvchilar tsikllar bilan ishlashda iteratsiyalar sonini kuzatishning oddiy usulini beradi, bu ma'lum stsenariylarda qulay bo'lishi mumkin. Bundan tashqari, u funktsiyaning qaytish turi sifatida ishlatilishi mumkin va funktsiya argument sifatida takrorlanadiganlarni qabul qilishi mumkin.

Ob'ektning takrorlanishi mumkinligini qanday tekshirish mumkin

Ob'ekt IteratorAggregate yoki Iterator interfeyslarining namunasi ekanligini aniqlash uchun instanceof operatoridan foydalaning. Misol tariqasida:

$obj = new MyClass();
if ($obj instanceof IteratorAggregate || $obj instanceof Iterator) {
  // object is iterable
}

Qaytariladigan ob'ektni qanday aylantirish mumkin

Siz foydalanishingiz mumkin foreach takrorlanadigan ob'ekt ustida aylanish uchun loop. Misol uchun:

$iterable = new MyIterableClass();
foreach ($iterable as $value) {
  // do something with $value
}

O'zingizning Iterable sinfingizni yaratish

Sen qilishingiz shart amalga oshirish IteratorAggregate interfeysini tanlang va belgilang getIterator o'zingizning takrorlanadigan sinfingizni yaratish funktsiyasi. Misol tariqasida:

class MyIterableClass implements IteratorAggregate {
  private $data = array();
  
  public function __construct($data) {
    $this->data = $data;
  }
  
  public function getIterator() {
    return new ArrayIterator($this->data);
  }
}

Savol-javob

Savol: PHP da iterativlarning qanday turlari bor?
Javob: massivlar, ob'ektlar Iterator interfeysini amalga oshiradigan va Traversable interfeysini amalga oshiradigan ob'ektlar PHP-dagi takrorlanadigan narsalarga misoldir.

Savol: O'rtasidagi farqni tushuntirib bera olasizmi? Iterator va Traversable interfeyslar?
Javob: Iterator Interfeys ob'ekt bo'ylab takrorlash usullari to'plamini taklif qiladi, masalan, orqaga o'tkazish, joriy, kalit, keyingi va joriy. Boshqa tomondan, o'tish mumkin bo'lgan interfeys shunchaki sinfni o'tish mumkinligini aytadi va uni amalga oshirish uchun hech qanday aniq usullarni talab qilmaydi. Iterator tomonidan amalga oshirilgan sinflar Traversable interfeysini ham amalga oshirishi kerak.

Savol: Nima foydasi bor IteratorAggregate interfeys?
Javob: IteratorAggregate interfeysi ob'ekt tarkibini aylanib o'tadigan tashqi iterator ob'ektini o'rnatish orqali ob'ektni takrorlash imkonini beradi. Bu ob'ektga Iterator interfeysini amalga oshirishga hojat qoldirmasdan o'zining o'tish usulini yaratishga imkon beradi. Ushbu interfeysni amalga oshiradigan sinflar getIterator deb nomlangan yagona usulni ko'rsatishi kerak, bu Iterator interfeysi ob'ektining namunasini qaytaradi.

Savol: O'rtasidagi farq nima foreach va for iteratorlardan foydalanganda loop?
A: The foreach Loop iteratorlar bilan ishlash uchun maxsus ishlab chiqilgan bo'lib, u avtomatik ravishda chaqiradi rewind sikl boshida usul va valid takrorlash uchun ko'proq elementlar mavjudligini tekshirish usuli.

The for Loop iteratorlar bilan ham ishlatilishi mumkin, lekin dasturchi qo'lda qo'ng'iroq qilishni talab qiladi rewind, valid, current, keyva next tsiklning tegishli nuqtalarida usullar.

Savol: Iteratorni yopish bilan qanday ishlatish kerak?
Javob: Yopishlar PHP da iterator sifatida ishlatilishi mumkin. Buni amalga oshirish uchun IteratorIterator sinfining namunasini yarating va uni argument sifatida yopishingizni bering. Yopish hech qanday parametrlarni qabul qilmasligi va joriy kalit va qiymatni o'z ichiga olgan massivni qaytarishi kerak. Tashqi o'zgaruvchilarni yopish ichida mavjud qilish uchun yopish qo'shimcha ravishda foydalanish bayonotini o'z ichiga olishi kerak.

$myArray = [1, 2, 3, 4];
$iter = new IteratorIterator(new ArrayIterator($myArray));
foreach ($iter as $key => $val) {
    echo $val . PHP_EOL;
}

Bu yerda, IteratorIterator class ustidan takrorlash uchun ishlatiladi ArrayIterator keyin yopish funktsiyasidan o'tgan sinf.

mashqlar:

  1. PHP da iterativlar nima?
  2. PHP da for tsikli yordamida massivni qanday takrorlash mumkin?
  3. PHP da foreach tsikli yordamida massivni qanday takrorlash mumkin?
  4. PHP da foreach tsikli yordamida ob'ektni qanday takrorlash mumkin?
  5. PHP da maxsus sinf uchun iteratorni qanday yaratasiz?
  6. dan qanday foydalanasiz yield PHP da generator funksiyasini yaratish uchun kalit so'z?

javoblar:

  1. Takrorlanadigan ob'ekt, masalan, massiv yoki ob'ektni takrorlash (aylanish) mumkin.
  2. for ($i = 0; $i < count($array); $i++) { // code to be executed; }
  3. foreach ($array as $value) { // code to be executed; }
  4. foreach ($object as $property => $value) { // code to be executed; }
  5. Maxsus sinf uchun iterator yaratish uchun sinf buni amalga oshirishi kerak Iterator interfeysi va belgilang rewind, valid, current, keyva next usullari.
  6. function generator() { yield $value1; yield $value2; }
PHP uchun sikl
PHP da sana va vaqt
yaqin

PHP haqida yangiliklardan xabardor bo'ling!

Biz spam yubormaymiz!

en English
X
Top o'ting