У меня есть следующий класс для моего класса доступа к базе данных PDO.
Где лучшее место для $ conn = new db (); (в настоящее время в пределах Database.php)? Имея в виду структуру стиля MVC, Main.php является контроллером, а два других – это модели.
Благодарю.
database.php
class db { private $conn; public function __construct() { $this->conn = new PDO(...); } $conn = new db(); }
Class.php
// require Database.php class someClass { private $conn; public function __construct(db $conn) { $this->conn = $conn; } function myFunc($usr, $pwd) { // SQL } }
main.php
// require Class.php $myObj = new someClass($conn); $myObj->myFunc(PARAMS);
Как вы можете сказать, $conn
необходимо объявить вне определения someClass
и до того, как вы someclass
экземпляр someclass
. Итак, есть два варианта, о которых я могу думать:
Объявите его перед созданием объекта $myObj
и передайте его конструктору:
$conn = new db(); $myObj = new someClass($conn);
Или используйте шаблон дизайна singleton в классе db
:
$conn = db::getInstance(); $myObj = new someClass($conn);
Где db::getInstance()
определяется как:
class db { private $conn; // Don't let anyone instantiate this class by themselves private function __construct() { $this->conn = new PDO(...); } private static $instance = null; public static getInstance() { if( self::$instance === null) { self::$instance = new db(); } return self::$instance; } }