Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: наследование классов
 
 автор: tokmak   (25.11.2011 в 00:46)   письмо автору
 
 

Всем доброе время суток!
Прощу помощи подсказать, как организовать подобное наследование.
Имеем классы:
Db - работа с БД.
Model - SQL запросы
и неограниченное кол-во классов наследованных от Model. допустим:
Users, Settings

Что должно происходить, при вызове класса Users(или Settings) должна произойти проверка на подключение к бд. Если подключение отсутствует, подключиться. Т.е. дать возможности вызывать много разных моделей, но подключение должно быть установлено один раз при объявлении любой первой модели))
В принципе мне удалось с этим разобраться.. только вот загвоздка.. как сделать так, чтобы классы автоматически запускали конструкторы... сейчас покажу на примере:


// Класс для работы с базой(подключение и тп)
class Db {
        static $instance = NULL;
    
    function __construct()  {  return self::getInstance(); }

    function __clone() { }

    static function getInstance(){
        if(is_null(self::$instance)){
            self::$instance = self::buildInstance();
        }
        return self::$instance;
    }

    private static function buildInstance(){
        
        $instance = 'connect ok database';
                echo $instance;
                // пока уберу подключение, пусть будет работают echo и return
                //try{
                //new PDO(DB_DSN, DB_USER, DB_PASS);
        //}catch(PDOException $e){
        //    echo $e->getMessage();
        //}

        return $instance;
    }
}

// Класс модели, тут будут находиться общие методы для работы с SQL
class Model extends Db {
    public function __construct() {
       parent::__construct();          // вызываем конструктор класса Db
    }
}


// это уже сами модели, их будет множество...
class Users extends Model {
    public function __construct() {
    }
    public function getuser($id) {
        return $id;
    }
}
class Settings extends Model {
    public function __construct() {
       
    }
}


Возможно ли сделать так, чтобы при объявлении классов-моделей, которые наследуются от Model,
автоматически вызывался конструктор класса Model?

Спасибо.

  Ответить  
 
 автор: tokmak   (25.11.2011 в 01:08)   письмо автору
 
   для: tokmak   (25.11.2011 в 00:46)
 

Решение найдено)

class Model {
    public function getConnection() {
        return Db::getInstance();
    }
}
class User extends Model {
    public function find($id) {
        return $this->getConnection()->fetchOne("SELECT * FROM user WHERE id = ?", array($id));
    }
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования