SlideShare a Scribd company logo
1 of 53
PHP SPL && Design
Patterns
Стандартнаябиблиотека php и паттерны проектирования
AreYou ready?!
• В: Вы когда-либоиспользовалиSPL?
• В: Вы когда-либоиспользовалиSPL и не сошли с ума?
Документация по SPL
http://www.php.net/spl
Нет исчерпывающейдокументации
Очень мало примеров
Классификация SPL
Интерфейсы (Interfaces)
Итераторы (Iterators)
Структуры данных (Data structures)
Исключения (Exceptions)
Различные функциональные возможности (Miscellaneous functionality)
Интерфейсы (Interfaces)
Traversable
(не входитв «spl интерфейсы»)
«Абстрактный базовый интерфейс,который не можетбыть реализован
сам по себе. Вместо этого он должен быть реализован
используя IteratorAggregate или Iterator.»
Не может быть реализован самостоятельно
Может быть обнаружен (instanceof)
foreach() обнаруживает travesable interface и делает магию
Iterators (Итераторы)
(все ещене spl :D)
«Интерфейс для внешних итераторов или объектов, которыемогут
повторять себя изнутри.»
Интерфейс Итератора
Iterator
FilterIterator
“Chains” iterators together
IteratorAggregate
Отфильтроватьвсе MP3 и JPG файлы
Отфильтроватьвсе MP3 файлыкоторые занимаю
мeста больше чем 6MB
Не фильтроватьвообще
Поиск файлов по подкаталогам
Поиск файлов по нескольким директориям
Как мы можем протестировать данный код? (никак)
Как мы можем поддерживать данный код? (никак)
Как мы можем повторно использовать данный код? (никак)
DirectoryIterator
(этоуже входитв spl ;) )
«Класс DirectoryIteratorпредоставляет простой интерфейсдля
просмотрасодержимого каталогов файловой системы.»
RegexIterator
«Этот итератор можетбыть использован для фильтрации другого
итератора на основе регулярныхвыражений.»
LimitIterator
«Класс LimitIterator позволяет сделать перебор ограниченного
количества элементов в Iterator.»
Переиспользование.Мы можем использоватьитераторы где угодно.
Тестируемость. Итераторы могут быть протестированыв отдельности.
Поддерживаемость. Нет необходимости адаптироватьпод нашу
бизнес логику.
Countable
(Ура! Это spl интерфейс )
«Классы, которые реализуют интерфейсCountable,могут быть
использованы с функцией count().»
SeekableIterator
Это не итератор, это интерфейс
seek() (перемещение/поиск)
Имплементация «SeekableIterator»может ускорить другие итераторы
Iterators(Итераторы)
SPL Iterators
AppendIterator NoRewindIterator
ArrayIterator ParentIterator
CachingIterator RecursiveArrayIterator
CallbackFilterIterator RecursiveCachingIterator
DirectoryIterator RecursiveDirectoryIterator
EmptyIterator RecursiveCallbackFilterIterator
FilesystemIterator RecursiveIteratorIterator
FilterIterator RecursiveRegexIterator
GlobIterator RecursiveTreeIterator
InfiniteIterator RecursiveFilterIterator
IteratorIterator RegexIterator
LimitIterator SimpleXMLIterator
MultipleIterator
SPL Iterators
http://php.net/manual/ru/spl.iterators.php
IteratorIterator?
RecursiveIterator?
RecursiveIteratorIterator?
RecursiveCallbackFilterIterator?
IteratorIterator
Recursive*Iterator
Рекурсивные итераторы добавляют возможностьрекурсивно
итерировать над данными
You still need implement it!
RecursiveCallbackFilterIterator
Включает рекурсивность
Это фильтруемый итератор (Не обязательно должен возвращатьвсе
элементы)
Фильтры реализуются через функции обратного вызова
CatchingIterator
(2 поцене одного)
«Смотрящийвперед»(Lookahead)итератор
Кеширует значения,но понарошку 
Мощные __toString функциональные возможности(которые вероятно
никто не использует)
Не изменяйте кешируемые данные(Выможете, но не нужно этого
делать)
Кеширование заключаетсяв том, что запоминается результат методов
key, valid, current.Такимобразом вызов этих методов не вызывает
повторного обращения к оригинальномуитератору
Ценится за удобную функцию hasNext(Вероятней всего его нужно было
назвать LookAheadIterator)
Очищает кеш при вызове функции rewind (и таким образом, при
следующем foreach())
SPL Итераторы,…
Имеют «причуды»
Документация не всегдаможет помочь
НазванияОЧЕНЬ сбивают с толку(CachingIterator, RecursiveIterator,
SeekableIterator)
Но их стоит использовать.
Шаблоны проектирования
Порождающие
AbstractFactory
FactoryMethod
Singleton
Prototype
Builder
Структурные
Adapter
Bridge
Composite
Decorator
Façade
Flyweught(Приспособленец)
Proxy
Паттерны поведения
Chain of Repository
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
TemplateMethod
Visitor
Strategy
Observer
Php spl and design patterns

More Related Content

Similar to Php spl and design patterns

Mastering PHP SPL (ru)
Mastering PHP SPL (ru)Mastering PHP SPL (ru)
Mastering PHP SPL (ru)Eugene Dorosh
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0akrakovetsky
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыUnguryan Vitaliy
 
Tofu и его окружение
Tofu и его окружениеTofu и его окружение
Tofu и его окружениеKirill Shelopugin
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
 
Pavel Rumantsev - Java Script
Pavel Rumantsev - Java ScriptPavel Rumantsev - Java Script
Pavel Rumantsev - Java Scriptbeloslab
 
введение в Javascript
введение в Javascriptвведение в Javascript
введение в Javascriptinqubick
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernateUnguryan Vitaliy
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
урок 3 6 класс
урок 3 6 классурок 3 6 класс
урок 3 6 классmrsvetlana01
 
Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages_ymn
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
 
Некоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программированияНекоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программированияAlexander Byndyu
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноVladislav Bezverhiy
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 

Similar to Php spl and design patterns (20)

Mastering PHP SPL (ru)
Mastering PHP SPL (ru)Mastering PHP SPL (ru)
Mastering PHP SPL (ru)
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Scala: introduction
Scala: introductionScala: introduction
Scala: introduction
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Java. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторыJava. Переменные, типы данных, операторы
Java. Переменные, типы данных, операторы
 
Tofu и его окружение
Tofu и его окружениеTofu и его окружение
Tofu и его окружение
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
Underscore js
Underscore jsUnderscore js
Underscore js
 
Pavel Rumantsev - Java Script
Pavel Rumantsev - Java ScriptPavel Rumantsev - Java Script
Pavel Rumantsev - Java Script
 
введение в Javascript
введение в Javascriptвведение в Javascript
введение в Javascript
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
урок 3 6 класс
урок 3 6 классурок 3 6 класс
урок 3 6 класс
 
Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Некоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программированияНекоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программирования
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 

Php spl and design patterns