Наследование классов наоборот

Vlad

Новичок
Наследование классов наоборот

Apache 2.2.3, PHP 5.2.3, MySQL 5.0.37
У меня имеется класс-синглтон Core: (modules/core/core.php)
PHP:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  class Core {
    private static $instance;

    public function __construct() {
      self::$instance = $this;
      require_once(BASEPATH.'modules/core/config'.EXT);
      log_message('debug', 'Ядро системы инициализировано.');
    }

    public static function &get_instance() {
      return self::$instance;
    }
  }
?>
Есть класс Logger (modules/logger/logger.php), Database (modules/database/database.php), ..., ..., ...
Как мне сделать так, чтобы при старте синглтона Core автоматом создавались все экземпляры классов (коих неизвестное количество) из других модулей системы? (кстати может можно сделать эту "модульную" архитектуру интереснее?)
т.е. для этого примера почле старта $CORE = new Core(); автоматом создавались $LOGGER = new Logger(); $DATABASE = new Database();, ..., ..., ...
 

Wicked

Новичок
дак у тебя просто какой-то неправильный синглтон, и отсюда все проблемы. Сделай конструктор приватным, убери из него self::$instance = $this;, а в get_instance() добавь
if(is_null(self::$instance)) self::$instance = new self();

Тогда тебе твои объекты создавать заранее не нужно будет, а можно будет обращаться сразу к Core::get_instance(), Logger::get_instance(), и т.д.
 

Vlad

Новичок
Но как система будет знать сколько модулей в директории modules кроме core и как указать ей что все их нужно стартануть?
Я только начал учить ПХП, мог бы пожалуйста показать кодом?

Вот что у меня с Core вышло:
PHP:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  class Core {
    private static $instance = null;

    public function __construct() {
      require_once(BASEPATH.'modules/core/config'.EXT);
      log_message('debug', 'Ядро системы инициализировано.');
    }

    public static function &get_instance() {
      if(is_null(self::$instance)) self::$instance = new self();
    }
  }
?>
Но как мне стартануть все остальные модули (плюс должны еще подгрузится конфиги для модулей modules/logger/config.php, modules/database/config.php?
 

Vlad

Новичок
Дело в том, что стартует Core который потом должен обслуживать сайт по xml-rpc по этому думаю стоит держать все стартнутым?
поправьте меня?
 

Vlad

Новичок
Нормальный ли это способ стартовать класс?
$LOGGER = $CORE->load_class(Logger);

PHP:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  class Core {
    private static $instance = null;

    public function __construct() {
      require_once(BASEPATH.'modules/core/config'.EXT);
      log_message('debug', 'Ядро системы инициализировано.');
    }

    public static function &get_instance() {
      if(is_null(self::$instance)) self::$instance = new self();
    }

    public function load_class($class) {
      static $objects = array();
      static $config = array();
      static $class_lowercase;

      $class_lowercase = strtolower($class);

      if (isset($objects[$class])) {
        return $objects[$class];
      }

      require(BASEPATH.'modules/'.$class_lowercase.'/'.$class_lowercase.EXT);

      if (file_exists(BASEPATH.'modules/'.$class_lowercase.'/config'.EXT)) {
        require(BASEPATH.'modules/'.$class_lowercase.'/config'.EXT);
      }

      $objects[$class] = new $class($config);
      return $objects[$class];
    }
  }
?>
Еще раз извиняюсь за глупые вопросы -- Я совсем начинающий .:)
 

HraKK

Мудак
Команда форума
StUV
А мне и такой вариант и такой не нравиться. Не люблю шаманские игры вокруг костра.
 

Vlad

Новичок
HraKK, как тогда посоветуешь?
Я ковырял сорцы как Битрикс работу с модулями сделали, но так и не смог разобраться, намучено у них там как-то...
Мне нужно чтобы админка была полностью статическая, вот в чем прикол. т.е. мне прийдется юзать XMLHTTPRequest через ифрейм или другой вид прокси в ней.
Т.е. вся серверная часть должна работать автоматом.
Можете посоветовать как такое можно сделать?
 

Андрейка

Senior pomidor developer
Vlad
а "загрузка класса LOGGER автоматом" является обязательным условием "статической админки"?
 

Vlad

Новичок
у меня есть 5 модулей, к примеру:
Logger, Exceptions, Templates, Database и Catalog
мне нужно чтобы все они работали.
Тем не менее хотелось бы чтобы из админки можно было отключить необязательный модуль Catalog, когда как остальные как бы должны быть внутри Core поидее и не отключаться.
 

Андрейка

Senior pomidor developer
Тем не менее хотелось бы чтобы из админки можно было отключить необязательный модуль Catalog
ну и как это соотносицца с первоначальным сообщением?
просто не могу понять какую ты проблему пытаешься себе придумать
 

Vlad

Новичок
Я пытаюсь придумать проблему в том, как мне сделать систему модулей работающую по XML-RPC со статической админкой.
 

StUV

Rotaredom
HraKK
StUV
А мне и такой вариант и такой не нравиться. Не люблю шаманские игры вокруг костра.
у меня нет никакого шаманства
автолоад генерит Exception, который перехватывается в try/catch верхнего уровня - все достаточно прозрачно =)
 

Vlad

Новичок
У меня есть система управления с модулями (у меня её пока нет но должна быть) которая работает со статической админкой по XML-RPC, мне нужно в общем чтобы оно работало.
Пока же Я не могу в точности правильно придумать структуру модульности
 

Vlad

Новичок
В моем понимании Модуль -- это Класс либо несколько классов которые работают.

Не работает потому что:
а) мало знаний пока у меня
б) пока руки из 5-й точки так как кроме Сингтона, Декоратора, ДатаМаппера и синтаксиса и немного ООП в ПХП ничего не ( знаю (знаю только в конкурентном языке который знать не обязательно), но обязательно нужно знать.

А знать нужно потому что клиент думает что Я знаю.

Сорри за оффтоп.
 
Сверху