Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Рабочая тетрадь(4)

.pdf
Скачиваний:
36
Добавлен:
10.02.2016
Размер:
7 Мб
Скачать
☆

•Проверьте, был ли передан HTTP-методом POST параметр format

•Измените код так, чтобы в переменной $dvd создавался экземпляр класса

DVDStrategy

•Вызовите метод setStrategy() объекта $dvd, передавая ему в качестве параметра либо экземпляр класса DVDAsXML, либо экземпляр класса DVDAsJSON, в зависимости от значения параметра format

•Вызовите метод get() объекта $dvd

•Сохраните файл catalog\actions.class.php

Упражнение 3: Использование шаблона Стратегия

•Запустите браузер

•В адресной строке наберите http://mysite.local/catalog/catalog.php

•В колонке Название кликните по любой ссылке

•Нажмите на кнопку [Распечатать]

•В директории catalog\output должен появиться файл c расширением xml

•Откройте xml-файл и убедитесь, что в файле содержится корректная запись в формате xml

•Переключитесь в браузер и опять кликните по любой ссылке в колонке Название

•Выберите несколько элементов формы checkbox

•Выберите checkbox как JSON и нажмите на кнопку [Распечатать]

•В директории catalog\output должен появиться файл c расширением json

•Откройте json-файл и убедитесь, что в файле содержится корректная запись в формате json

•Убедитесь, что код работает без ошибок

Обзор UML

Диаграмма классов

Введение в шаблоны проектирования

Шаблоны проектирования

Singleton Pattern

Factory Pattern

Strategy Pattern

Игорь Борисов http://igor-borisov.ru

SPL – Standard PHP Library

Общие принципы

Интерфейсы

Итераторы

Классы

Структуры данных

Функции

Наша мантра:

$result = mysql_query("SELECT id, name FROM table"); while ($row = mysql_fetch_array($result)) {}

$dir = opendir("/home/folder/files"); while ($file = readdir($dir)) {}

$f = fopen("/home/folder/files/file.txt", "r"); while (!feof($f)) {}

spl_classes()

Стандартная библиотека PHP — коллекция классов и

интерфейсов для решения стандартных проблем в PHP.

Библиотека была введена в PHP 5 и доступна по умолчанию, начиная с PHP 5.3

Класс Closure

Встроенные интерфейсы

Traversable

Iterator

ArrayAccess

IteratorAggregate

Serializable

Интерфейсы SPL

Countable

OuterIterator

RecursiveIterator

SeekableIterator

Анонимная функция

$greet = function($name){ printf("Hello %s\r\n", $name);

};

$greet('World'); $greet('PHP');

Замыкание

$fn = function() use (&$country) { echo $country . "\n";

};

$country = 'Russia'; $fn();

Итератор — объект, позволяющий перебирать все элементы коллекции без учёта особенностей её реализации

rewind()

false

valid()

Traversable

Iterator extends Traversable

mixed current ( void )

scalar key ( void )

void next ( void )

void rewind ( void )

boolean valid ( void )

true $key = key()

$value = current()

next()

Лабораторная работа 2.1

Использование интерфейса Iterator

Упражнение 1: Создание класса, наследника интерфейса Iterator

•Запустите браузер

•В адресной строке наберите http://mysite.local/news/news.php

•Вы должны увидеть список новостей. Убедитесь, что список выводится корректно, без ошибок

•В текстовом редакторе откройте файл news\FetchIterator.class.php

•Опишите метод __construct() как: $this->fetchCallback = $fetchCallback; $this->count = 0;

•Опишите метод current() как: $this->count || $this->next(); return $this->current;

•Опишите метод key() как: $this->count || $this->next(); return $this->count - 1;

•Опишите метод valid() как: $this->count || $this->next(); return $this->validate();

•Опишите метод validate() как:

return false != $this->current || is_string($this->current);

•Опишите метод next() как:

if ($this->count && ! $this->validate()) { return;

}

$this->fetch(); $this->count++;

•Опишите метод fetch() как:

$func = $this->fetchCallback; $this->current = $func();

•Сохраните файл news\FetchIterator.class.php

Упражнение 2: Изменение логики метода класса

•В текстовом редакторе откройте файл news\NewsDB.class.php

•Найдите метод getNews()

•В методе закомментируйте строку: return $this->db2Arr($result);

•Ниже закомментированной строки допишите:

$fetchFunction = function() use ($result) {

return $result->fetchArray(SQLITE3_ASSOC);

};

return new FetchIterator($fetchFunction);

• Сохраните файл news\NewsDB.class.php

Упражнение 3: Проверка работы скрипта

•Запустите браузер

•В адресной строке наберите http://mysite.local/news/news.php

•Вы не должны увидеть каких-либо изменений по сравнению с первым запуском

•Если есть ошибки, найдите и исправьте их