如何将超级 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');