Рабочая тетрадь(4)
.pdf
Методы
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public mixed Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
Экземпляр класса ReflectionClass
$rc = new ReflectionClass('Имя_класса');
Наследует ли класс тот или иной интерфейс?
$rc->implementsInterface('Имя_интерфейса');
Имеет ли класс тот или иной метод?
$rc->hasMethod('Имя_метода');
Экземпляр класса ReflectionMethod
$rm = $rc->getMethod('Имя_метода');
Является ли метод статическим?
$rm->isStatic();
Выполнение статического метода
$result = $rm->invoke(null);
Выполнение обычного метода
$instance = $rc->newInstance();
$result = $rm->invoke($instance);
Лабораторная работа 4
Использование отражений в системе плагинов
Упражнение 1: Создание класса для манипуляций с плагинами
•В текстовом редакторе откройте файл favorites\classes\Favorites.class.php
•Опишите конструктор класса, в котором производится подключение (через include или require) всех классов из папки classes. Это можно сделать с помощью функций opendir(), glob() или с помощью итераторов DirectoryIterator и RecursiveDirectoryIterator. Возможностей много - выбирайте любую
•Опишите метод findPlugins(), который из всех доступных приложению классов выбирает только те классы, которые наследуют интерфейс IPlugin
•Для каждого выбранного класса создайте экземпляр класса ReflectionClass и добавьте его в массив $_plugins - закрытое свойство класса
•Вызовите метод findPlugins() из конструктора класса
•Опишите метод getFavorites($methodName). Метод принимает в качестве аргумента имя метода (например, 'getLinksItems'), который может присутствовать в классах, наследующих интерфейс IPlugin
•В цикле обойдите классы из массива $_plugins и если нужный метод найден, то необходимо его вызвать и результат добавить в массив $list. Не забудьте, что искомый метод может быть статическим!
•Метод getFavorites() должен вернуть массив $list с результатами отработанных методов
•Сохраните файл favorites\classes\Favorites.class.php
Упражнение 2: Подключение плагинов и их использование
•В текстовом редакторе откройте файл favorites\index.php
•Создайте объект - экземпляр класса Favorites
•Вызовите метод getFavorites() последовательно передавая ему в качестве аргумента имена методов: getLinksItems, getArticlesItems и getAppsItems и полученные результаты сохраните в переменных
•Используя полученные результаты заполните HTML-списки ul
•Сохраните файл favorites\index.php
•Запустите браузер и в адресной строке наберите http://mysite.local/favorites/
•Убедитесь, что данные на странице отображаются корректно. Если есть ошибки, найдите их и исправьте
PHP Extension and Application Repository
Возможность установки пакетов PEAR
Пакеты с исходными кодами на языке PHP
Пакеты расширений PHP PECL
Стандарт оформления исходного кода, включая контроль версий
PHP.INI
include_path = ".;путь-к-папке-PHP\PEAR"
Сайт
http://pear.php.net/go-pear
CLI-версия PHP
Вывод списка установленных пакетов
pear list
Вывод полного списка стабильных пакетов в репозитарии
pear remote-list
Обновление всех установленных пакетов
pear upgrade-all
Установка пакета
pear install ИМЯ_ПАКЕТА
Удаление установленного ранее пакета
pear uninstall ИМЯ_ПАКЕТА
Обновление установленного пакета при условии, что имеются более новые версии
pear upgrade ИМЯ_ПАКЕТА
pear help install
-f, --force
-n, --nodeps
-r, --register-only
-s, --soft
-В, --nobuild
-Z, --nocompress
--ignore-errors
-a, --alldeps
-о, --onlyreqdeps
Где брать?
http://www.phpdoc.org/
Инсталляция
pear install phpDocumentor
Использование
phpdoc --target C:\...\docs
--directory C:\...\project --title MyDocumentation --sourcecode on --defaultpackagename User
Файл phpDocConfig.ini
title = Generated Documentation - No DocBlocks
directory = C:\Users\Zend\Apache2\htdocs\project
target = C:\Users\Zend\Apache2\htdocs\docs
output = HTML:frames:default
sourcecode = on
phpdoc -c C:\...\phpDocConfig.ini
@access [File] [Class] Method Property
@access (public|protected|private)
@method [Class]
@method return_type method_name(type $arg1[ = val1],
type $arg2[ = val2], …) [description]
@name [File]
@name $var_name
@property [Class]
@property[-read|-write] data_type $var_name [description]
@return Method
@return data_type
