【问题标题】:why is this php variable undefined为什么这个 php 变量未定义
【发布时间】:2014-12-05 22:14:24
【问题描述】:

谁能告诉我为什么这不起作用。

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()”函数中引用了一个未定义的变量“database”。好像变量已经超出范围...谁能给我一个解决方案?

【问题讨论】:

  • 因为变量已经超出了范围。 $database 是函数中的局部变量;你应该使用$this->database 来访问类的属性。
  • @andrewsi 是对的:在 PHP 中,您需要使用 this 关键字来访问类成员,这与 Java 或 C# 不同。

标签: php mysqli scope


【解决方案1】:

那是因为在 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 访问(如果需要)

【讨论】:

    【解决方案2】:

    改变

    $database = $this->connect();
    

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

    所有$database 变量更改为$this->databaseset

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 2016-08-12
      • 2014-05-13
      相关资源
      最近更新 更多