我在我的数据库类中有一个PDO连接,最近我将其用作其他类的扩展,例如
然而,有人指出这样做是不好的实践,为什么这样做是不好的实践呢?如何在用户类中连接到我的数据库类而不需要扩展?
目前,我在我的
我尝试了下面的代码,但是我得到了以下错误消息:
这是我的代码:
class Users extends Database
,这使我始终保持着数据库连接,而不必在我的用户类中拥有一个函数。然而,有人指出这样做是不好的实践,为什么这样做是不好的实践呢?如何在用户类中连接到我的数据库类而不需要扩展?
目前,我在我的
viewall()
函数中调用了数据库,我尝试将其放入一个__construct()
函数中,但是它坚持要有参数。我尝试了下面的代码,但是我得到了以下错误消息:
Fatal error: Call to undefined method Database::prepare() in E:\xampp\htdocs\attendance\class.Register.php on line 13
你有什么办法可以调用我的数据库吗?这是我的代码:
class.Connect.php
<?php
// Database connection PDO
class Database {
public function __construct() {
// Connection information
$host = 'localhost';
$dbname = 'attendance';
$user = 'root';
$pass = '';
// Attempt DB connection
try
{
$this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//echo 'Successfully connected to the database!';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
public function __destruct()
{
// Disconnect from DB
$this->pdo = null;
//echo 'Successfully disconnected from the database!';
}
}
?>
class.Register.php
<?php
require 'class.Connect.php';
class Register {
public function viewall() {
$pdo = new Database();
$stmt = $pdo->prepare('SELECT * FROM users');
$stmt->execute();
$stmt->fetch();
}
}
$run = new Register();
$run->viewall();
?>
Users instanceof Database
?如果某样东西不是另一样东西,它就不应该去extend
它。 - decezeextends DBTable
或类似的东西,那么会更好一些,而不是extends Database
。但是,如果你正在尝试编写自己的ORM,你可能需要停下来考虑使用已经存在的库(例如Doctrine),它们已经完成了这个工作(并且已经解决了你在编写时遇到的所有问题)。 - Spudley