继承PHP PDO类是一种好的做法吗
我有一个项目,我愿意创建如下结构的文件:继承PHP PDO类是一种好的做法吗,php,inheritance,pdo,code-reuse,code-readability,Php,Inheritance,Pdo,Code Reuse,Code Readability,我有一个项目,我愿意创建如下结构的文件: js css images core --- dblayer.class.php --- user.class.php --- comments.class.php --- etc.class.php index.php users.php class DBLayer extends PDO { public function __construct() { $options = array(
js
css
images
core
--- dblayer.class.php
--- user.class.php
--- comments.class.php
--- etc.class.php
index.php
users.php
class DBLayer extends PDO
{
public function __construct()
{
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$dsn = DB_DRIVER . ":host=" . DB_HOST . ";dbname=" . DB_NAME;
parent::__construct($dsn, DB_USER, DB_PASSWORD, $options);
}
public function getLastId()
{
}
public function getLastError()
{
}
// Other general methods used frequently by other classes
}
DBLayer
类继承自PDO
,如下所示:
js
css
images
core
--- dblayer.class.php
--- user.class.php
--- comments.class.php
--- etc.class.php
index.php
users.php
class DBLayer extends PDO
{
public function __construct()
{
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$dsn = DB_DRIVER . ":host=" . DB_HOST . ";dbname=" . DB_NAME;
parent::__construct($dsn, DB_USER, DB_PASSWORD, $options);
}
public function getLastId()
{
}
public function getLastError()
{
}
// Other general methods used frequently by other classes
}
其他类将继承自DBLayer
类:
class User extends DBLayer
{
}
因此,我在这里的问题是:从性能、代码重用/可读性(项目将来可能会邀请其他开发人员)的角度来看,这是一个好的实践吗
继承适用于is-A关系。当您希望一个类的所有方法都能被其扩展类使用时,应该继承
是否希望调用代码能够执行此操作:
$user = new User('mysql:host=localhost;dbname=test', $user, $password);
$stmt = $user->query("SELECT * FROM Comments");
换句话说,通过访问诸如query()之类的通用方法,您允许某人使用用户对象查询任何不相关的数据。那太令人困惑了
正如@zerkms在评论中所说,“用户不是数据库[连接]”。这就是用户is-PDO所暗示的
在这种情况下,你应该这样做。您的每个域模型类都应该有一个PDO对象,这将使您有机会避免在每个类中重复代码
因此,您的用法是:
$pdo = new PDO(...);
$user = new User($pdo);
一般来说,没有
继承适用于is-A关系。当您希望一个类的所有方法都能被其扩展类使用时,应该继承
是否希望调用代码能够执行此操作:
$user = new User('mysql:host=localhost;dbname=test', $user, $password);
$stmt = $user->query("SELECT * FROM Comments");
换句话说,通过访问诸如query()之类的通用方法,您允许某人使用用户对象查询任何不相关的数据。那太令人困惑了
正如@zerkms在评论中所说,“用户不是数据库[连接]”。这就是用户is-PDO所暗示的
在这种情况下,你应该这样做。您的每个域模型类都应该有一个PDO对象,这将使您有机会避免在每个类中重复代码
因此,您的用法是:
$pdo = new PDO(...);
$user = new User($pdo);
不是。用户不是数据库。是的,我知道,但是我用它来不重复每一个类中的相同代码。@ a a d d:什么样的重复?你可以考虑用A代替。不是。用户不是数据库。是的,我知道,但是我用它来不重复每一个类中的相同代码。@ a a d d:什么样的重复?你可以考虑用A代替。