2014-10-10 73 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