[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP наследование
Baton
Доброго времени суток, уважаемые форумчане.

У меня возник вопрос (касательно PHP и ООП). Точнее, необходимо направить мой мозг в правильное русло.
Есть необходимость в реализации следующего:
Реализация некоего универсального класса для работы с БД (CDatabase). И реализация конкретных классов для работы с конкретными СУБД (CDatabaseMySQL, CDatabaseSQLite и прочее). Самое главное, чтобы работа из движка производилась ТОЛЬКО через CDatabase, а этот класс уже смотрел по настройкам какой конкретный "подкласс" использовать и вызывать его методы.

До сего момента, делал "топорным" способом. в CDatabase хранился объект класса нужной СУБД, который создавался в конструкторе, после просмотра настроек и тп. И в CDatabase были реализованы ОДИНАКОВЫЕ с подклассами методы.
В качестве небольшого примера:

cdatabase.php
<?php
class
CDatabase
{
private $Subsystem;
function __construct(){
//читаем настройки и создаем Subsystem, как объект нужного класса.
}

function Query($query)
{
//пред обработка $query
$this->Subsystem->Query($query);
}
}

?>


cdatabasemysql.php
<?php
class
CDatabaseMySQL{
// ...
function Query($queryText){
// ...
$result = @mysql_query(...);
}
}

?>


Уважаемые форумчане, мне не понятна модель реализации. :( Как сделать без лишнего дублирования и "перевызова"? Надеюсь, понятно написал.
Игорь_Vasinsky
Не совсем понял...но наследование на скокая знаю прописывается через extends

т.е.

class Query extends Config

и получается класс Query наследует у класса Config

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
bulgakov
Блин то ли я чего-то не понимаю то ли действительно строительство велосипедов такое увлекательное занятие, есть же уже классы для работами с различными бд, вот они все вам их мало? Ну зачем тратить время на то что уже давным давно написано, оставьте ваше драгоценное время для творчества лучше.
linker
class CDatabase
{
private $Subsystem;

public function __construct()
{
//читаем настройки и создаем Subsystem, как объект нужного класса.
}

public function __call($name, $args)
{
if (method_exists($this->Subsystem, $name))
call_user_func_array(array($this->Subsystem, $name), $args);
else
die('Метода не существует');
}
}


_____________
Gear Framework
Gear Framework на Github
Guest
Цитата (bulgakov @ 5.07.2011 - 08:04)
Блин то ли я чего-то не понимаю то ли действительно строительство велосипедов такое увлекательное занятие, есть же уже классы для работами с различными бд, вот они все вам их мало? Ну зачем тратить время на то что уже давным давно написано, оставьте ваше драгоценное время для творчества лучше.

Огромное спасибо за ответ. Как раз уже думаю о том, чтобы использовать нечто готовое. Зачем полез? Пожалуй, лишь интереса ради. Неужели Вас не "беспокоят" вопросы из разряда "а как" и т.д.? laugh.gif


bulgakov
Цитата
"а как" и т.д.? 

Беспокоят но перед этим я привык искать готовое решение и если оно полностью удовлетворяет моим потребностям использую его, а потом уже в зависимости от желания смотрю разбираюсь как это работает.
Игорь_Vasinsky
Цитата
Беспокоят но перед этим я привык искать готовое решение

и напрасно. учение-свет.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
bulgakov
Цитата
и напрасно. учение-свет.

В данном конкретном случае я не считаю это таким уж полезным занятием, так можно вообще переписать весь мануал на свои функции, если в родном инструментале языка уже есть эти инструменты то почему бы не использовать их?
Игорь_Vasinsky
это был совет.
так можно вообще не писать самому, а брать готовое или просить чтоб написали для тебя wink.gif

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
bulgakov
Я говорю про инструменты самого языка!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.