leadaxe
Новичок
Использование механизма Рефлексии для решения задач навигации
Я не могу написать полную статью из-за нехватки времени, но предоставлю простой для понимания идее пример кода.
Этот код можно использовать даже на начальном уровне знаний
Коротко задача:
Хочется максимально "заточить" объект под вывод информации. Часто даже в коде опытных программистов я вижу вереницы case, обрабатывающие URL запрос. Как научить объект понимать этот запрос самостоятельно? или понятнее: Для добавления новой функциональной страницы я хочу только написать метод и поставить на него ссылку типа smartclass.php?do=show
Далее в программе мы пишем:
Где getAuthType возвращает тип авторизации пользователя
а классы AdminShell и GuestShell порождены от shell и реализуют те самые "методы - функциональные страницы"
Теперь, если я хочу создать новую страницу для гостя я должен просто добавить публичный метод.
Отмечу что закрытые методы мы оставляем для внутренней реализации.
В общем это достаточно удобный подход для написания графических интерфейсов. Его можно легко использовать в простых проектах, а с легкой доработкой и в сложных.
Я не могу написать полную статью из-за нехватки времени, но предоставлю простой для понимания идее пример кода.
Этот код можно использовать даже на начальном уровне знаний
Коротко задача:
Хочется максимально "заточить" объект под вывод информации. Часто даже в коде опытных программистов я вижу вереницы case, обрабатывающие URL запрос. Как научить объект понимать этот запрос самостоятельно? или понятнее: Для добавления новой функциональной страницы я хочу только написать метод и поставить на него ссылку типа smartclass.php?do=show
PHP:
<?php
/**
* PHP version 5
* @package demo application
* @author Shulman Alexanderl
* @copyright BR technologies 2007
*/
/**
* Служит оболочкой для работы с пользователем системы.
*/
abstract class Shell{
/**
* @param int $type
* @return Shell
*/
public final static function factory($type){
$shell=null;
switch($type){
case 1 : $shell=new AdminShell();
break;
default: $shell=new GuestShell();
}
return $shell;
}
protected function __construct(){
}
/**
* out 404 error;
*/
public function error404(){
echo '404 Этой страницы не существует.';
}
abstract public function startPage();
public final function buildPage($action){
if (method_exists($this, strtolower($action))){
$method = new ReflectionMethod($this, $action);
if ($method->isPublic()){
$this->$action();
}else $this->error404();
}else{
if (empty($action))
$this->startPage();
else $this->error404();
}
}
}
?>
PHP:
$shell=Shell::factory(getAuthType());
$shell->buildPage(isSet($_GET['do']) ? $_GET['do']:'');
а классы AdminShell и GuestShell порождены от shell и реализуют те самые "методы - функциональные страницы"
Теперь, если я хочу создать новую страницу для гостя я должен просто добавить публичный метод.
Отмечу что закрытые методы мы оставляем для внутренней реализации.
В общем это достаточно удобный подход для написания графических интерфейсов. Его можно легко использовать в простых проектах, а с легкой доработкой и в сложных.

