可能重复:
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
答案 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
不会存在于其中。
要解决您的问题,有两种解决方案:
$db
成为静态变量,这意味着它在每个实例中都是相同的。static
中删除morestuff()
关键字。在这种情况下,您需要创建一个类的实例才能调用morestuff()
。答案 3 :(得分:0)
$Stuff->db->escapeVal($id)
开始工作了。很高兴我得到了它的工作,非常感谢你。