Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование классов, Проблема реализации 
:(
    Опции темы
Render
  Дата 20.9.2005, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 12.5.2005

Репутация: нет
Всего: 3



Написан класс управления БД `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

Это сообщение отредактировал(а) Render - 20.9.2005, 21:05
PM   Вверх
Mal Hack
Дата 20.9.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



1. & new..
2. через global включай создагнный объект куда нужно.
PM ICQ   Вверх
Render
Дата 20.9.2005, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 12.5.2005

Репутация: нет
Всего: 3



Первый способ по подробнее пожалуйста... типа & new sql давать ссылку на экземпляр...где, и каким образом, мне нужно по возможности отделить классы, то есть обойтись вообще без наследования...
А второй тоже не удовлетворяет условию!
PM   Вверх
Mal Hack
Дата 20.9.2005, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Цитата(Render @ 20.9.2005, 22:03)
Первый способ по подробнее пожалуйста...

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

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

Почему?
PM ICQ   Вверх
AntonioBanderaz
Дата 20.9.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Можно на прямую в конструкторе передавать ссылку на экзэмпляр

Код

..
function __costruct($linkSql) {
     $this->sql = $linkSql;
}
...



--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Guest
Дата 21.9.2005, 11:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











То есть в классе `modules`:

Код

<?

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

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

?>


Я правильно понял, просто временно не могу протестировать...
  Вверх
AntonioBanderaz
Дата 21.9.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Цитата(Guest @ 21.9.2005, 11:58)
function __construct()
  {
  $this->getModulesList();
  }

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

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


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Render
Дата 21.9.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 12.5.2005

Репутация: нет
Всего: 3



Я как раз уже вовсю юзаю пятую версию. =)

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

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

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


Эт как?
PM   Вверх
AntonioBanderaz
Дата 21.9.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Если 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


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Render
Дата 21.9.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 12.5.2005

Репутация: нет
Всего: 3



Отличная мысля, спасибо!

Хотя что-то тут больно наворочено всё, вариант с амперсандом подходит больше, именно из-за своей лаконичности...

Это сообщение отредактировал(а) Render - 21.9.2005, 22:36
PM   Вверх
<Spawn>
Дата 27.10.2005, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



ИМХО, правильнее всего было бы выделить класс подключения к БД и его экзепляр использовать в классах, использующих подключение к БД.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
AntonioBanderaz
Дата 28.10.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Если опять же php5, то он по умолчанию все структуры передаёт по ссылке.
Добавлено @ 18:51
Цитата
ИМХО, правильнее всего было бы выделить класс подключения к БД и его экзепляр использовать в классах, использующих подключение к БД.

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

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

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




--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




[ Время генерации скрипта: 0.0936 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.