[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Курс "MVC от теории к практике"
Alehandr
Registry

Всем привет!

Сегодня мы напишем замену паттерну Singleton, ибо его я бы предпочел использовать только начиная с версии PHP 5.3 (об этом в прошлой лекции).

Registry (core/classes/registry.php):
<?php if (!defined('APP')) die('Access is forbidden!!!');

class Registry_Core {

/**
*
@var array Объекты
*/

public static $objects = array();

/**
* Возвращает объект по имени и идентификатору
*
*
@param string $class
*
@param string $id
*
@return Object
*/

public static function get($class, $id = 'default') {
$class = strtolower($class);
if (!isset(self::$objects[$class])) {
self::$objects[$class] = array();
}
if (!isset(self::$objects[$class][$id])) {
if (class_exists($class, true)) {
self::$objects[$class][$id] = new $class();
} else {
self::$objects[$class][$id] = false;
}
}

return self::$objects[$class][$id];
}

}


if (!defined('REGISTRY_CLASS')) {
class Registry extends Registry_Core { }
}

Надеюсь объяснять что тут и как работает не придется, ибо все довольно просто...

Ну а теперь добавим две функции в класс Object для упрощения работы с классом Registry.

Object (core/classes/object.php):
<?php if (!defined('APP')) die('Access is forbidden!!!');

abstract class Object_Core extends Observed {

/**
* Возвращает объект контроллера по имени
*
*
@param string $controller
*
@param string $id
*
@return Object
*/

private function getController($controller, $id = 'default') {
return Registry::get($controller . '_Controller', $id);
}

/**
* Возвращает объект модели по имени
*
*
@param string $controller
*
@param string $id
*
@return Object
*/

private function getModel($model, $id = 'default') {
return Registry::get($model . '_Model', $id);
}

}


if (!defined('OBJECT_CLASS')) {
abstract class Object extends Object_Core { }
}

Возможно это и бред, но когда под рукой удобный редактор с autocomplet'ом, при обращении к разным контроллерам и моделям постоянно писать _Controller и _Model не придется и время, затрачиваемое на разработку, малость уменьшится...

На этом пока все... Заданий пока не будет...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.