我希望能够调用连接到我的数据库的函数,而不创建多个对象,包括或必须在每个类中编写相同的构造。我基本上想在其他类中调用构造函数。 如下所示。
class Database{
public function __construct(){
$this->conn = new mysqli("host", "user", "password", "db");
// Check connection
if (!$this->conn) {
die("Connection failed: ".mysqli_connect_error());
}
}
}
class User{
// call Database->__construct();
}
class OtherClass{
// call Database->__construct();
}
当然这不是一条路,但我真的不知道什么是可行的方式。
我想也许这会奏效。但它并没有 在类中创建一个新的Database对象来构造连接
class Database{
public function __construct(){
$this->conn = new mysqli("host", "user", "password", "db");
// Check connection
if (!$this->conn) {
die("Connection failed: ".mysqli_connect_error());
}
}
}
class User{
$conn = new Database();
}
依赖注射或构造注射似乎是一个很好的解决方案。但我不知道它是否是为这样的东西而制作的,以及如何应用它。
class Database{
public function connection(){
$this->conn = new mysqli("host", "user", "password", "db");
// Check connection
if (!$this->conn) {
die("Connection failed: ".mysqli_connect_error());
}
}
}
class User{
private $db;
public function __construct(Database $conn){
$this->db = $conn;
}
}
答案 0 :(得分:1)
这是我正在为连接做的事情
class DBConnection{
protected static $db;
private function __construct() {
try {
self::$db = new PDO( 'mysql:host=localhost;dbname=db_abc', 'root', '' );
//self::$db = new PDO( 'mysql:host=localhost;dbname=db_phonebook', 'root', 'QAZwsx2016!' );
self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch (PDOException $e) {
echo "Connection Error: " . $e->getMessage();
}
}
public static function getInstance() {
if (!self::$db) {
new DBConnection();
}
return self::$db;
}
public function __destruct() {
$db=NULL;
}
}
这是我如何使用另一个模型类
class User{
private $db;
public function __construct() {
$this->db = DBConnection::getInstance();
}
public function getUsers(){
//....................
//....................
//$sql =
$query = $this->db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$query->execute();
$customers = $query->fetchAll();
//return .........
}
如果你想要纯粹的OOP方式,请查看工厂方法,看看外观设计模式,以及你将如何实现这一目标。
这是我的方式(简单方式),但对于架构更好地看到不同的设计模式。
这里有一篇有用的文章link
和
Design Patterns with PHP-The right way link