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

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

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

Методы

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