2014-10-10 90 views
0

有誰能告訴我爲什麼這不起作用。爲什麼這個php變量undefined

class class1 { 

    private $database; 

    function class1() 
    { 

     $database = $this->connect(); 


    } 

    private function connect(){ 

     $database = mysqli_connect("localhost","username","","db"); 

     if (mysqli_connect_errno()) { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 

     return $database; 

    } 

    private function usedb(){ 
     $query = "some sql"; 
     mysqli_query($database,$query); 
    } 

} 

我希望這個簡單的例子可以清楚地描述我的問題。無論如何,當我運行這樣的東西時,顯示的錯誤告訴我在「usedb()」函數中有一個未定義變量「數據庫」的引用。就好像變量已經超出範圍......任何人都可以給我一個解決方案嗎?

+5

因爲變量_has_已經消失超出範圍。 '$ database'是你函數中的局部變量;你應該使用'$ this-> database'來訪問該類的屬性。 – andrewsi 2014-10-10 17:08:31

+0

@andrewsi是對的:在PHP中,您需要*使用'this'關鍵字來訪問類成員,而不像Java或C#。 – SolarBear 2014-10-10 17:09:39

回答

2

那是因爲在class1()您通過聲明另一個局部變量$database

$database = $this->connect(); 

設置和訪問類的$database屬性,你應該使用:

$this->database = $this->connect(); 

規則同樣適用於​​功能:

private function usedb(){ 
    $query = "some sql"; 
    mysqli_query($this->database,$query); 
} 

所以你的最終代碼應該是這樣的:

class class1 { 

    private $database; 

    function class1() 
    { 
     $this->database = $this->connect(); 
    } 

    private function connect() 
    { 
     $database = mysqli_connect("localhost","username","","db"); 

     if (mysqli_connect_errno()) 
     { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 
     return $database; 
    } 

    private function usedb() 
    { 
     $query = "some sql"; 
     mysqli_query($this->database,$query); 
    } 
} 

注:

這同樣適用於在connect()功能$database變量。雖然具有相同的名稱,它沒有任何與外界$database變量,因爲這應該是使用$this->database(如果需要)

0

更改訪問

$database = $this->connect(); 

$this->database = $this->connect(); 

和所有$database變化爲$this->databaseset