У меня есть веб-приложение, где я использую класс реестра.Класс реестра содержит важные классы, которые мне нужны во всем приложении.
Я сделал класс реестра классом Singleton, и этот класс является статическим.
Содержимое класса реестра находится здесь:
<?php
class registry
{
private static $objects = array();
private static $instance;
private function __construct(){}
private function __clone(){}
public static function singleton()
{
if( !isset( self::$instance ) )
{
self::$instance = new registry();
}
return self::$instance;
}
public function storeObjects()
{
$Objects = array_merge($GLOBALS['EXTRA_LIBS'],array('data','page','session','uri','loader','modules'));
foreach($Objects as $name)
{
$this->$name = $name;
}
}
public function __set( $object, $key )
{
require_once(__LIBRARIES . DS . $object . '.class.php');
self::$objects[ $key ] = new $object( self::$instance );
}
public function __get( $key )
{
if( is_object ( self::$objects[ $key ] ) )
{
return self::$objects[ $key ];
}
}
public function returnAllObjects()
{
return self::$objects;
}
}
?>
Теперь, когда я хочу использовать один из классов здесь, в моем приложении, я делаю:
registry::singleton()->data->adddata('somedata');
Я часто использую классы в своем приложении, минимум 1 раз в каждомметод.
Теперь мой вопрос: что лучше всего сделать:
1) вызывать все это каждый раз
2) Класс $registry = registry::singleton();
один раз в каждом методеа затем просто используйте локальную переменную.(Я не знаю, сработает ли это)
Или есть более элегантный способ решения этой проблемы.