PHP OOP 在函数中使用扩展 class

PHP OOP use extends class in functions

这是我当前的代码

class Database {
    //Connect to database here...
}

class User extends Database {

    public function GetUInfo($id) {
        $db = new Database;
        $db->query("SELECT `id` FROM `users` WHERE `id`=:id");
        $db->bind(":id", $id);
        return $db->single();
    }

    public function uptime($id) {
        $db = new Database;
        $db->query("UPDATE `users` SET `time`=".$_SERVER['REQUEST_TIME']." WHERE `id`=:id");
        $db->bind(":id", $id);
        return $db->execute();  
    }

}

User class 中,我怎样才能使 $db = new Database; 在所有 public 函数中准备就绪,而不是必须添加 $db = new Database; 在每个函数中?

创建构造函数并私有属性$db

private $db;

public function __construct() {
  $this->db = new Database();
}

所以你可以这样使用它

   public function uptime($id) {
        $this->db->query("UPDATE `users` SET `time`=".$_SERVER['REQUEST_TIME']." WHERE `id`=:id");
        $this->db->bind(":id", $id);
        return $this->db->execute();  
    }

如前所述mTorres最好这样做

public function __construct(Database $db) { $this->db = $db; }

如果您是 OOP 的新手 - read this article 它可能会有所帮助。

因为您已经将数据库 Class 扩展到用户中,为什么要创建对象? 您可以直接访问数据库 Class

的函数(public 和受保护的)

您可以使用 $this 关键字直接访问它。

只有你必须在构造函数(父class)中建立连接,在子class中你必须调用父class构造函数。

<?php
class Database
{
    protected $db;

    public function __construct()
    {
        //your connection code
    }
}

class User extends Database
{

    public function __construct()
    {
        parent::__construct();
    }

    public function GetUInfo($id)
    {
        $this->query("SELECT `id` FROM `users` WHERE `id`=:id");
        $this->bind(":id", $id);
        return $this->single();
    }

    public function uptime($id)
    {
        $this->query("UPDATE `users` SET `time`=".$_SERVER['REQUEST_TIME']." WHERE `id`=:id");
        $this->bind(":id", $id);
        return $this->execute();
    }
}

?>