PHP OOP使用扩展函数中的类

时间:2015-01-17 08:37:15

标签: php oop

这是我当前的代码

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;?< / p>

2 个答案:

答案 0 :(得分:2)

创建构造函数和私有属性$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,那可能有所帮助。

答案 1 :(得分:2)

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

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

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

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

?>