есть класс Main который объединяет все модули.
index.php
require_once ("Main.php");
$main = new main();
Main.php
<?php
class Main
{
// Свойства - Классы API
private $classes = array(
'db' => array('name' => 'Mysql',
'path' => 'Class.Mysql.php'),
'config' => array('name' => 'Config',
'path'=>'Class.Config.php'),
'catalog' => array('catalog' => 'Catalog',
'path' => 'Class.Catalo.php'),
);
// Созданные объекты
private static $objects = array();
/**
* Конструктор оставим пустым, но определим его на случай обращения parent::__construct() в классах API
*/
public function __construct()
{
}
/**
* Магический метод, создает нужный объект API
*/
public function __get($name)
{
// Если такой объект уже существует, возвращаем его
if(isset(self::$objects[$name]))
{
return(self::$objects[$name]);
}
// Если запрошенного API не существует - ошибка
if(!array_key_exists($name, $this->classes))
{
return null;
}
// Определяем имя нужного класса
$class = $this->classes[$name];
// Подключаем его
include_once($class[path]);
// Сохраняем для будущих обращений к нему
self::$objects[$name] = new $class[name]();
// Возвращаем созданный объект
return self::$objects[$name];
}
}
?>
Class.Catalog.php
Как лучше обращаться к внешним классам?
class Catalog extends Main {
public function Catalog(){
$result=$this->db->query("select * from `catalog`");
while ($res=$this->db->fetch_row($result)){
$arr[] = $res;
}
return $arr;
}
}
или так
class Catalog {
public function Catalog(){
global $main;
$result=$main->db->query("select * from `catalog`");
while ($res=$main->db->fetch_row($result)){
$arr[] = $res;
}
return $arr;
}
}
Спустя 10 минут, 44 секунды (5.03.2012 - 09:53) m4a1fox написал(а):
Кажется вот тут будет уместна __autoload();
Спустя 3 часа, 4 минуты, 29 секунд (5.03.2012 - 12:57) SlavaFr написал(а):
1) global не должен вообще употреблятся в классе.
Если нужна переменная то передавай ее лучше в класс посредством set-методов.
2) таким участкам
в классе тоже нечего делать. путь к конфигурации должен передоватся как параметер. Ты ведь не хочеш при изменении имени конфига или при изменении его места менять класс котроый ты хочеш использовать многократно.
Если нужна переменная то передавай ее лучше в класс посредством set-методов.
2) таким участкам
private $classes = array(
'db' => array('name' => 'Mysql',
'path' => 'Class.Mysql.php'),
'config' => array('name' => 'Config',
'path'=>'Class.Config.php'),
'catalog' => array('catalog' => 'Catalog',
'path' => 'Class.Catalo.php'),
);
в классе тоже нечего делать. путь к конфигурации должен передоватся как параметер. Ты ведь не хочеш при изменении имени конфига или при изменении его места менять класс котроый ты хочеш использовать многократно.
Спустя 7 минут, 47 секунд (5.03.2012 - 13:05) caballero написал(а):
обычно класс для работы с БД делают в виде синглетона - тогда вопросы отпадают автоматически
_____________