2012-07-09 36 views
2

Possible Duplicate:
Fatal error: Call to a member function query() on a non-object inPHP錯誤類裏面的函數裏面的類..等什麼?失去

我有一個類文件時,可以稱之爲「東西」

Stuff.class 

裏面還有一類

class Stuff { 

,並在那裏我有一個公共靜態功能

public static function morestuff() { 

} 

裏面我需要cal l另一個查詢功能

$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

可能與問題無關,但您需要'$ this-> db'而不是'$ this - > $ db'。 – 2012-07-09 19:32:07

+0

謝謝,我也注意到了。 – 2012-07-09 19:35:53

+1

而不是代碼和英語之間交替,呈現不間斷,完整,簡潔,具有代表性的[示例代碼](http://sscce.org/),以便它可以直接提供給PHP並按原樣運行。如果您需要評論,請使用評論。 – outis 2012-07-09 19:45:57

回答

0

我懷疑$db是一個全局變量,所以儘量

public static function morestuff() { 
     global $db; 

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

} 

如果功能在同級別,也是靜態的,你會這樣稱呼它

self::escapeVal($ID); 
+0

我建議你注入它作爲參數,而不是使用全局! – 2012-07-09 19:30:52

+0

@Truth你應該建議海報,不要懲罰我! – 2012-07-09 19:33:12

+0

我更新了這個問題,你可能會發現有用的信息 @SabeenMalik我剛剛提出了你的問題,不用擔心 – 2012-07-09 19:34:17

0

你根本不瞭解OOP的概念。 $this是指當前對象(或此對象)的變量。含義:

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

你會得到類似的東西來

object(Test)#1 (0) { } 

不能使用$this外一個類的方法。它只是不這樣工作。

關於你遇到的錯誤,試着弄清楚數據庫連接存儲在哪裏。該連接應傳遞到對象以存儲爲字段,或者直接傳遞給方法以在內部使用它。

編程不是關於工作的複製/粘貼代碼。

0

因爲你的函數是靜態的,變量$this將不存在於它內部。

解決您的問題,有2個解決方案:

  1. $db一個靜態變量,這意味着它會在每個實例相同。
  2. 從功能morestuff()中刪除static關鍵字。在這種情況下,您需要創建一個班級實例才能撥打morestuff()
0
$Stuff->db->escapeVal($id) 

開始工作。很高興我能夠工作,謝謝你。