我正在将我的网站转换为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:....第39行的PHP
我做错了什么?当删除此函数时,该类绝对正在启动,因为脚本上的其他查询工作正常。如何从独立函数中访问db_control()?
谢谢你,
乔
答案 0 :(得分:2)
$db
在功能范围内不可用,您可以
将$db
作为参数传递
function func($db, $query, $params){
return $db->db_control($query, $params);
}
$results = func($db, $query, $params);
或者
function func($query, $params){
global $db;
return $db->db_control($query, $params);
}
$result = func($query, $params);
使用global
使其在函数中可用,也可能有其他解决方案!
答案 1 :(得分:1)
$db
超出范围。您可以将$db
作为参数传递给函数
function func($db){
还有一种非常糟糕的global
方法:
function func(){
global $db; // $db is now accessible
答案 2 :(得分:1)
了解variable scope。变量$db
未在函数内声明,因此函数内部不存在。你需要传递它。
答案 3 :(得分:1)
哦,你已经发起了$ db作为全局:/
为什么你不想这样做有很多原因,我不会在这里讨论主要是因为我的时间有点短暂,我将等待纯粹主义者在下面发表评论。但快速解决方法是添加。
global $db
不是最理想的情况,但应解决您的问题。