为什么这个 PHP 变量未定义


why is this php variable 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(("函数中引用了一个未定义的变量"数据库"。好像变量已经超出了范围...谁能给我一个解决方案?

这是因为在class1()中,您通过以下方式声明另一个局部变量$database

    $database = $this->connect();

若要设置和访问类的 $database 属性,应使用:

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

usedb()函数也是如此:

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 访问(如果需要(

更改

$database = $this->connect();

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

并且所有变量$database更改为$this->database以进行set