PHP OOP 使用扩展了函数中的类


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类中,如何使$db = new Database;在所有公共函数中准备就绪,而不必在每个函数中添加$db = new Database;

当您将数据库类扩展到用户时,为什么要创建对象?您可以直接访问数据库类的功能(公共和受保护)

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

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

<?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();
    }
}
?>

创建一个构造函数和私有属性$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 的新手 - 阅读这篇文章可能会有所帮助。