наследование классов, mvc

SergXP

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

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

PHP:
// Класс для работы с базой(подключение и тп)
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?

Спасибо.
 

AmdY

Пью пиво
Команда форума
Здесь наследование нужно заменить агрегацией, потому что модель работает с базой с помощью драйвера, но никак не является его частью драйвера.
Остётся твой DB
PHP:
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));
    }
}
 

SergXP

Новичок
вот вот! Кажется так оно и есть! :) работал с Zend Framework, там подобный вызов))
Спасибо! Сейчас попробую.
 
Сверху