2013-02-05 37 views
-1

定義我想使用的mysqli和它一直給我,即使我一直 試圖修復它幾個小時的誤差。未定義的變量,但它是在構造函數

這是數據庫類

class db { 

    public $mysqli; 

    function __construct(){ 
     $mysqli = new mysqli('host', 'user', 'password', 'database'); 
    } 

    function clean($string){ 
     $string = $mysqli->real_escape_string($string); 
    } 

} 

,當我嘗試調用它像這樣一個測試頁面,

$db = new db(); 
$db->clean("hi"); 

我得到一個錯誤:

注意:未定義的變量:mysqli的在C:\ XAMPP \ htdocs中\吃線\類\ db.class.php 12

致命錯誤:調用噸o第12行的C:\ xampp \ htdocs \ eat \ class \ db.class.php中的一個成員函數real_escape_string()

有沒有什麼我在這裏做錯了?我一直在搜索php手冊很長一段時間,並在stackoverflow,但它似乎沒有人正面臨這個錯誤。

+0

可能重複的[PHP的OOP變量範圍](http://stackoverflow.com/questions/2323242/php-oop-variable-scope) – mario

+0

是啊我明白你的意思。我忽略了那裏的那點,並且在2點的幫助下解決了這個問題。但不知何故,real_escape_string給出了一個我似乎無法克服的致命錯誤。 –

回答

3

您在方法範圍中使用變量$mysqli。您應該使用$this來訪問對象作用域。

class db { 

    public $mysqli; 

    function __construct(){ 
     $this->mysqli = new mysqli('host', 'user', 'password', 'database'); 
    } 

    function clean($string){ 
     return $this->mysqli->real_escape_string($string); 
    } 

} 
+0

但它仍然會返回 致命錯誤:調用一個成員函數real_escape_string()非對象 –

+0

上,爲什麼會這樣? – user20232359723568423357842364

+0

我不知道爲什麼。如果我要聲明這一切在1頁,而不是把它在一個類中,它給了我完全沒有問題。 –

0

還沒有你聽說過沒有聲明一個變量As is類方法裏的?

你指的變量範圍時,總是使用$this->

下面,是的變量是如何訪問

class foo { 

$who= "MyName"; 

function __construct() { 

$this->who; 

} 

} 

在上面的例子中你的職責referes的變數內who藍圖。

+0

我聽說過這個。那是我的不好。但問題會出現致命的錯誤。致命錯誤:調用一個非對象的成員函數real_escape_string() –

+0

@NuttyNur我認爲這個問題,你沒有在你的類中傳遞mysql連接細節。 – 2013-02-05 20:23:13

+0

我沒有通過它。我做了連接測試,沒有問題。 –