【发布时间】:2012-12-05 14:43:02
【问题描述】:
我正在将我的网站转换为 PDO,经过大约 200 个脚本后,我非常接近尾声。每个脚本都访问相同的函数脚本。在函数脚本中,我有一个如下所示的数据库类:
class Database {
private $db_con = ''; //stores the connection
public function db_login(){
//log into the database
}
public function db_control($query, $params){
//run the query
}
}
//initiate the class and log in
$db = new Database();
$db->db_login();
这两个函数都可以正常工作并且适用于每种类型的查询,因此我几乎完成了。但是,我遇到了一个问题。
我正在处理的脚本上有一个独立函数,该函数在脚本中多次使用。我通常运行 db_control:
$results = $db->db_control($query, $params);
但是从函数中运行它:
function func(){
$results = $db->db_control($query, $params);
}
返回错误。
致命错误:在非对象上调用成员函数 db_control() C:....php 在第 39 行
我做错了什么?删除此功能后,该类肯定会启动,因为脚本上的其他查询可以正常工作。如何从独立函数中访问 db_control()?
谢谢你,
乔
【问题讨论】:
-
方法一:将
$db作为参数传入函数中;方法二:在函数内部使用global $db;。在许多情况下,方法一可能是“推荐”的,但您必须修改调用它的每个地方;方法二不那么“优雅”,但只需要修改一次(只要不重命名$db即可)。 -
您所做的几乎不是 OOP。请参阅How Not To Kill Your Testability Using Statics 获取一些提示。
-
是的,我知道。将整个站点转换为 OOP 目前不是首要任务,因为该站点尚未启动,而且我每周只能靠几个鲍勃过活。一旦站点投入运营并获得收入,该站点应完全转换为 OOP。现在,如果我可以通过使某些方面 OOP'ish 来帮助未来的我,那么就可以了!