从独立函数中访问另一个类的方法

时间:2012-12-18 11:42:49

标签: php class object methods

我正在将我的网站转换为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()?

谢谢你,

4 个答案:

答案 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

不是最理想的情况,但应解决您的问题。