【发布时间】:2013-05-17 09:44:47
【问题描述】:
我有一个名为 DB (class.pdo.php) 的类,它使用 PDO 处理 mysql 查询的所有处理,还有一个名为 user 的类,我用来管理登录系统。
我的问题涉及总是必须在用户的每个公共函数中实例化 $db,以便我可以使用 DB。这有效率吗?我不应该在用户的 __construct() 中实例化数据库吗?
这是我的代码
require_once("../../class.pdo.php");
class user {
private $db = null;
public function __construct(){
/* Empty? */
}
public function find_by_email($email){
$db = new db();
$db->query('SELECT * FROM users WHERE email = :email LIMIT 1');
$db->bind(':email',$email);
$result = $db->single();
return $result;
}
public function create($email,$password,$first_name,$last_name){
$db = new db();
$db->query("INSERT INTO users(email,password,first_name,last_name,created_at) VALUES (:email,:password,:first_name,:last_name,NOW())");
$db->bind(':email',$email);
$db->bind(':password',$password);
$db->bind(':first_name',$first_name);
$db->bind(':last_name',$last_name);
$result = $db->execute();
return $db->lastInsertId();
}
[more similar functions ommited]
【问题讨论】:
-
你如何定义“高效”这个词?你如何衡量“效率”?
-
实例化一次,并使用依赖注入将其传递给所有需要它的类
-
你的班级和PDO有什么区别?
-
这很可能是低效的。从软件工程的角度来看,这也不好:你的类(它的方法)依赖于
db的存在,但不要在任何地方做广告;它只有在您阅读方法实现时才可见。 -
@Afonso Gomes:服务器提供和使用的资源有几十种。而且您无法优化所有这些的使用。资源 A 的每次优化都会消耗一些单位的资源 B。