扩展vs不在PHP中扩展类

时间:2014-05-04 06:48:20

标签: php inheritance

我是新人。下面是尝试与数据库连接的开始。如果语法不正确,请告诉我,它似乎适用于我的localhost。

我想我可以输入类Database extends Mysqli,对吗?这将使得Mysqli的方法可以直接访问数据库,而不是通过类本身创建的实例。这会比我做的更好吗?

class Database {

    #The variable that stores the database handle
    public $db;

    #The Database objects's datbase parameters
    public $host;
    public $user;
    public $password;
    public $database;

    #creates a Database object with the required databases details
    public function __construct($host, $user, $password, $database) {
        $this->host = $host;
        $this->user = $user;
        $this->password = $password;
        $this->database = $database;
    }

    #Stores the database handle as a var $db of the Database instance 
    public function connect() {
        if ($this->db = new Mysqli($this->host, $this->user, $this->password, $this->database)) {
            if ($this->db->connect_errno) {
                echo "No connection could be made <br/>";
            } else {
                echo "database succesfully connected <br/>";
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果您的class Database代表数据库句柄,那么它不应该公开:

#The variable that stores the database handle
public $db;

否则你不会封装那个细节,因此根本不需要你的课程。

接下来,当你开始编写课程时,echo不属于那里:

    if ($this->db = new Mysqli($this->host, $this->user, $this->password, $this->database)) {
        if ($this->db->connect_errno) {
            echo "No connection could be made <br/>";
        } else {
            echo "database succesfully connected <br/>";
        }
    }

因为类包含通过返回值而不是通过标准输出返回的方法。相反,你想在这里抛出异常。这也是Mysqli的一个特性,因此,您不需要编写自己的错误处理代码来开始:

在将这些或多或少显而易见的问题放在一边之后,你会问自己是否应该继承mysqli而不是聚合它。

我实际上不能告诉你。到目前为止,您共享的代码只显示mysqli的标准功能,因此我建议完全删除该类,因为代码看起来多余。所以我会说:都没有。我认为您的Database课程没有理由,因为您可以使用mysqli代替。