PHP错误类里面的类函数..等什么?丢失

时间:2012-07-09 19:23:57

标签: php mysql

  

可能重复:
  Fatal error: Call to a member function query() on a non-object in

我有一个类文件,我们称之为“东西”

Stuff.class

里面有一个班级

class  Stuff {

并且在那里我有一个公共静态函数

   public static function morestuff() {

}

我需要为查询调用另一个函数

$q="Select from contacts where id =". $this->$db->escapeVal($ID)".";

但我得到错误。

$q="Select from contacts where id =". escapeVal($ID)".";

返回

Call to undefined function escapeVal()


$q="Select from contacts where id =". $db->escapeVal($ID)".";

返回

Call to a member function escapeVal() on a non-object


$q="Select from contacts where id =". $this->$db->escapeVal($ID)".";

返回

Using $this when not in object context 

那我该怎么办?

编辑:

同一文件中的类似函数具有以下代码

'id' = '" . $this->db->escapeVal($this->_Id) . "'

然而,当我尝试在我的mysql查询中使用此代码时,我收到以下错误

Using $this when not in object context

4 个答案:

答案 0 :(得分:0)

我怀疑$db是一个全局变量,所以试试

public static function morestuff() {
      global $db;

      $q="Select from contacts where id =". $db->escapeVal($ID);

}

如果该函数属于同一个类并且也是静态函数,则会将其称为

self::escapeVal($ID);

答案 1 :(得分:0)

您不了解OOP的概念。 $this是一个引用当前对象(或此对象)的变量。含义:

class Test {
    public function __construct() { //Called when object is instantiated
        var_dump($this);
    }
}
$test = new Test();

你会得到类似于

的东西
object(Test)#1 (0) { }

您不能在类方法之外使用$this。它只是不起作用。

关于您遇到的错误,请尝试确定存储数据库连接的位置。该连接应该传递给对象以便存储为字段,或者直接传递给方法以在内部使用它。

编程不是关于复制/粘贴有效的代码。

答案 2 :(得分:0)

因为你的函数是静态的,所以变量$this不会存在于其中。

要解决您的问题,有两种解决方案:

  1. 使$db成为静态变量,这意味着它在每个实例中都是相同的。
  2. 从函数static中删除morestuff()关键字。在这种情况下,您需要创建一个类的实例才能调用morestuff()

答案 3 :(得分:0)

$Stuff->db->escapeVal($id)

开始工作了。很高兴我得到了它的工作,非常感谢你。