Наследование классов

 
0
 
PHP
ava
Render | 20.09.2005, 21:10
Написан класс управления БД `sql`.
Есть класс управления модулями использующий БД. Проблема заключается в том, что создаётся лишний экземпляр класса. Например:


<?
function __autoload($name)
{
include_once('./classes/' .$name. '_class.php');
}

/*===========================================
                 Сценарий
===========================================*/

$db=new sql;
$result=$db->sqlQuery("Запрос...");
Что-нибудь делаем...

$modul=new modules;

?>


В классе `modules` приходится создавать новый экземпляр класса `sql` в методах использующих БД, но задача состоит в том чтобы использовать уже созданое соединение... В конструкторе класса sql можно проверять, не создано ли уже соединение, но проблема этим не решается, задача не создавть экземпляров класса `sql` в классе `modules`, но как обращаться к методам этого класса...

Вот блин объяснил... smile
Ответы (11)
ava
Mal Hack | 20.09.2005, 20:16 #
1. & new..
2. через global включай создагнный объект куда нужно.
ava
Render | 20.09.2005, 21:03 #
Первый способ по подробнее пожалуйста... типа & new sql давать ссылку на экземпляр...где, и каким образом, мне нужно по возможности отделить классы, то есть обойтись вообще без наследования...
А второй тоже не удовлетворяет условию!
ava
Mal Hack | 20.09.2005, 23:34 #
Цитата (Render @ 20.9.2005, 22:03)
Первый способ по подробнее пожалуйста...

Когда ты в 4 создаешь объект у тебя создается две его копии. & перед new создает одну копию.

Цитата (Render @ 20.9.2005, 22:03)
А второй тоже не удовлетворяет условию!


Почему?
ava
AntonioBanderaz | 20.09.2005, 23:47 #
Можно на прямую в конструкторе передавать ссылку на экзэмпляр


..
function __costruct($linkSql) {
$this->sql = $linkSql;
}
...
ava
guest | 21.09.2005, 11:58 #
То есть в классе `modules`:


<?

class modules
{
function __construct()
{
$this->getModulesList();
}

function getModulesList()
{
$db=&new sql;
.... ?????
}
}

?>


Я правильно понял, просто временно не могу протестировать...
ava
AntonioBanderaz | 21.09.2005, 15:08 #
Цитата (Guest @ 21.9.2005, 11:58)
function __construct()
  {
  $this->getModulesList();
  }

Только php5 - используй функцию с названием как у класса.
Только sql класс должен быть определён в том же файле или как включение сделан.
А так да.

Моё предложение - сделать общий класс для подгрузки модулей, и в нем уже ссылку в конструктор класса передавать напрямую.
ava
Render | 21.09.2005, 18:27 #
Я как раз уже вовсю юзаю пятую версию. =)

Цитата
Только sql класс должен быть определён в том же файле или как включение сделан.

Использую автолоад...

Цитата
Моё предложение - сделать общий класс для подгрузки модулей, и в нем уже ссылку в конструктор класса передавать напрямую.


Эт как?
ava
AntonioBanderaz | 21.09.2005, 21:47 #
Если 5, то используй приватный конструктор,

class singl {
static private $imst = NULL;
private function __construct() {
//Твоя иниациализация, по необходимости
}
static public function getInstance() {
if(self::$imst == NULL) self::$imst = new singl();
return self::$imst;
}
}


Благодаря приватному конструктору у тебя вызовет ошибку вызов экземпляра через new
И тебе придётся вызывать функцию getInstance(), которая либо создаёт новый экземпляр, либо возвращает существуещий. Здесь принцип, остальное сам. smile smile
ava
Render | 21.09.2005, 22:31 #
Отличная мысля, спасибо!

Хотя что-то тут больно наворочено всё, вариант с амперсандом подходит больше, именно из-за своей лаконичности...
ava
&lt;Spawn&gt; | 27.10.2005, 22:00 #
ИМХО, правильнее всего было бы выделить класс подключения к БД и его экзепляр использовать в классах, использующих подключение к БД.
ava
AntonioBanderaz | 28.10.2005, 18:49 #
Если опять же php5, то он по умолчанию все структуры передаёт по ссылке.
Добавлено позднее:
Цитата
ИМХО, правильнее всего было бы выделить класс подключения к БД и его экзепляр использовать в классах, использующих подключение к БД.

Мне тоже так кажется и хранить его где-нидь либо в $_SESSION либо в $_GLOBAL.
Добавлено позднее:
Цитата (Render @ 21.9.2005, 22:31)
Хотя что-то тут больно наворочено всё, вариант с амперсандом подходит больше, именно из-за своей лаконичности...

Тебе ничего не мешает создать новый екземпляр.

Мой вар это исключает...
Цитата (AntonioBanderaz @ 21.9.2005, 21:47)
Благодаря приватному конструктору у тебя вызовет ошибку вызов экземпляра через new

Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить