如何将超级 class 对象扩展到 php 中的子 class?
How to expend a super class object to a sub class in php?
我想在数据库superclass中实现单例。
但我想在子 class 对象
上调用它的方法
超级class:
class Database {
private $conn;
public static $instance;
private function __construct($conn)
{
$this->conn = $conn;
}
public static function getInstance($conn)
{
if (!self::$instance) {
self::$instance = new Database($conn);
}
return self::$instance;
}
}
sub class:
class Article extends Database
{
public function __construct($conn)
{
parent::getInstance($conn);
}
}
--->
$article = new Article($conn);
但是 $conn 属性 没有被初始化。
如果不直接调用 super class 构造函数并保持 superclass 单例设计模式,是否有任何成功的方法可以做到这一点?谢谢
在 Singleton 中,您通过调用其静态方法 getInstance() 实例化 class 并发送参数以建立与数据库的连接,建立连接并分配它到非静态变量 $conn
:
class Database {
// Private to ensure you can get instance only by the static method
private static $instance;
// $conn is not static
private $conn;
private function __construct()
{
// Declared to avoid non-static instatiation
}
public static function getInstance($host, $user, $pass)
{
if (!self::$instance) {
self::$instance = new self();
// Connect to database
self::$instance->$con = new PDO($host, $user, $pass);
}
return self::$instance;
}
}
__construct() 和 getInstance() 已在父 class 中定义,无需覆盖它们
class Article extends Database
{
public function prepare($query)
{
return $this->conn->prepare($query);
}
}
实例化模型并开始做一些事情:
$article = Article::getInstance("mysql:host=localhost;dbname=mydatabase;charset=UTF8", 'myuser', 'mypass');
$stmt = $article->prepare('SELECT * FROM sometable');
我想在数据库superclass中实现单例。 但我想在子 class 对象
上调用它的方法超级class:
class Database {
private $conn;
public static $instance;
private function __construct($conn)
{
$this->conn = $conn;
}
public static function getInstance($conn)
{
if (!self::$instance) {
self::$instance = new Database($conn);
}
return self::$instance;
}
}
sub class:
class Article extends Database
{
public function __construct($conn)
{
parent::getInstance($conn);
}
}
--->
$article = new Article($conn);
但是 $conn 属性 没有被初始化。 如果不直接调用 super class 构造函数并保持 superclass 单例设计模式,是否有任何成功的方法可以做到这一点?谢谢
在 Singleton 中,您通过调用其静态方法 getInstance() 实例化 class 并发送参数以建立与数据库的连接,建立连接并分配它到非静态变量 $conn
:
class Database {
// Private to ensure you can get instance only by the static method
private static $instance;
// $conn is not static
private $conn;
private function __construct()
{
// Declared to avoid non-static instatiation
}
public static function getInstance($host, $user, $pass)
{
if (!self::$instance) {
self::$instance = new self();
// Connect to database
self::$instance->$con = new PDO($host, $user, $pass);
}
return self::$instance;
}
}
__construct() 和 getInstance() 已在父 class 中定义,无需覆盖它们
class Article extends Database
{
public function prepare($query)
{
return $this->conn->prepare($query);
}
}
实例化模型并开始做一些事情:
$article = Article::getInstance("mysql:host=localhost;dbname=mydatabase;charset=UTF8", 'myuser', 'mypass');
$stmt = $article->prepare('SELECT * FROM sometable');