ПредишенСледващото

Ако чуете нещо за итератори, тогава вие вероятно знаете, че итерация - много важна концепция за света на програмирането, но изпълнението на необходимите интерфейси за създаване на итератор обект може да бъде много неприятен задача поради големия размер на шаблон код, който трябва да пиша за итератор. Но с излизането на PHP 5.5 за нас най-накрая дойде генератори!

В тази статия ще се спра на генераторите, които го правят по-големи усилия за изпълнение на функциите на един прост итератор без да се налага да изтегли пълен сложност Итераторът интерфейс.

Каква е разликата между генераторите?

Според Уикипедия генератор ", това е много подобен на функцията, която се връща на масива, защото осцилатора има входни параметри, тя може да се нарече и тя генерира поредица от ценности". това е една обща черта, но вместо да се връщат една стойност то дава най-много ценности, може да се изисква от него - генератор като цяло. Generator изглежда като функция, но се държи като итератор.

Генераторите използва ключовата дума добив вместо връщане на думата. Той се държи по подобен начин, и се връща в точката на разговори, с тази разлика, че функцията не се отстранява от стека, както и неговото състояние се запазва в паметта. Това позволява на функцията, за да продължи да работи с предишното състояние на следващия път, когато той се нарича. В действителност, не можете да използвате връщането ключовата дума да върне стойност от генератора, както и за да излезете от генератора.

PHP ръчни състояния: "Когато генераторът се нарича, той се връща обект, който може да се повтори." Той е обект на вътрешния клас генератор. който реализира интерфейса Итераторът. и се държи като еднопосочен итератор а. Стига да обхождане на един обект, PHP призовава генератора всеки път, когато той се нуждае, за да получите стойността. Членка се записва всеки път, когато генераторът извежда стойност, така че следващия път, когато PHP извлича стойността, генераторът да се възстанови предишното си състояние.

Този код показва следното:

Първата ни генератор

Нека да пренапише генератор проба Python за PHP. (Имайте предвид, че и двете парчета код не се грижи за проверка за грешки).

Функция генератор отваря файла и извежда всеки ред от файла, ако това се изисква. Всеки път, когато генераторът тя продължава с предишното му състояние. Той разполага с работата не започва отначало, тъй като състоянието му е била съхранявана, преди да изпълни отчета за добив. След като всички линии са изброени - генераторът е приключила своята работа е завършена и на цикъла.

ключ за връщане

Итераторите в PHP се състои от един чифт "ключ / стойност". В нашия пример, ние ще възстановим само стойността, както и ключовете в този случай са числови (цифровите бутони по подразбиране). Ако трябва да се върне един чифт асоциативен - просто смяна отчета за формат добив, така че да включва ключа и, като се използва синтаксис масив.

Изпълнение на ценности

оператор дава информация не само връща стойност - тя също може да бъде настроен да отвън. Това се прави, като се обадите за изпращане () генератор обект с предаването на необходимата стойност като параметър. Тази стойност може да се използва в изчисленията или други операции. Методът преминава стойността на генератора в резултат на добив, и отново изпълнение.

Изводът е, както следва:

Запазване на паметта с помощта на генератори

Генератори са добри, когато се обработват големи набори от данни, а вие не искате да се разпредели памет за междинни резултати, или ако не го направите, ще трябва всички тези резултати на всички. Поради начина на обработване на резултатите от използването на паметта може да бъде намалена до необходимия минимум, за да се съхранява само в резултат на тази работа.

Въвеждане на файла с функция резултат (). която връща всички редове четат файлове в масив. Ако сравним резултатите от функцията файл () и функцията на нашите file_lines () на един и същи файл с 100 произволни точки от текст, функцията файл () се използва около 110 пъти повече памет от генератора.

заключение

С въвеждането на PHP генератори осигурява мощен инструмент в ръцете на разработчиците. Сега ние може бързо да пиша итератори, като същевременно се поддържа значителни количества памет по време на работа. Надяваме се, че това ръководство, аз бях в състояние да ви даде достатъчно информация, така че можете да започнете да използвате генераторите във вашите проекти.

5 урока последната колона "PHP"

Когато става въпрос за сигурността на уеб сайт, фразата "Да се ​​филтрират всички, избяга всичко" винаги ще бъде от значение. Днес нека да поговорим за филтриране на данните.

  • Изразителен 2 поддържа връзка с други компоненти за специален режим на ZF. Не всеки харесва решението. В тази статия ще обсъдим как да се подобри процесът на свързване на няколко модула.

  • Да предположим, че трябва да изпратите информация за Google Анализ от страна на сървъра скрипт. Как да го направя. Отговорът в тази статия.

  • Селекция от няколко вида PHP пясък. На някои ви в онлайн режим ще бъде в състояние да тествате вашия код, но има и решения, които могат да бъдат приложени в сайта си.

    грешка в кода трябва да бъде проста ехо "Получен е $ I"; без п

    Генератори в PHP

    До получаване на информация от два канала (зрение и слух) на ефективността на обучението далеч по-добър живот от книги. А домашните задачи и онлайн тестове ще ви позволи да мисля постоянно в целевия език и веднага провери знанията си!

    Генератори в PHP

    Генератори в PHP

    Ако искате по-дълго време, за да проучи как да се HTML, че ме има, за което трябва добра новина!

    Генератори в PHP

    Ако вече сте се научили HTML и искат да се движи напред, следващата стъпка ще бъде да се проучи CSS технологията.

    Генератори в PHP

    Ако искате да се разбере концепцията на домейн и хостинг, да научат как да се създаде база данни, да качвате файлове към уеб сайт чрез FTP сървър, създаване на поддомейни, да конфигурирате пощенските кутии за сайта и мониторинг на посещаемостта, този курс е разработен специално за вас!

    Свързани статии

  • Подкрепете проекта - споделете линка, благодаря!