为什么我不能在PHP中的类中声明私有变量?

时间:2013-05-03 07:36:22

标签: php mysql

以下代码给出了一个错误: 解析错误:语法错误,意外T_VARIABLE,期望第4行中的T_FUNCTION

 <?php
  class mydb
  {     
    $mydblink = mysqli_connect( 'localhost:3306','root','123qweasdzxc','test' );         
     public static function checklink() {
        if ( !$mydblink ) {
            die('Could not connect to MySQL: ' . mysql_error()); 
        }
        echo 'Connection OK';
        mysql_close($mydblink);
    }

                  }
  mydb::checklink();

但是将$ mydblink移动到函数中使其工作,

  <?php
  class mydb
  {     
    public static function checklink() {
        $mydblink = mysqli_connect( 'localhost:3306','root','123qweasdzxc','test' );         

        if ( !$mydblink ) {
            die('Could not connect to MySQL: ' . mysql_error()); 
        }
        echo 'Connection OK';
        mysql_close($mydblink);
    }

  }
  mydb::checklink();

为什么呢?这是否意味着我不能在PHP中的类中声明私有变量?

4 个答案:

答案 0 :(得分:5)

您可以声明私有变量,但不能在类属性声明中执行mysql_connect之类的代码。您只能设置基元。

class MyDB {
  private $dbc;
  private $someInteger = 4; // you can do this
  private $someArray = array(); // and this.

  public function __construct()
  {
    $this->dbc = new mysqli('localhost', 'user', 'pass', 'db');
  }

  public function getDbc()
  {
    return $this->dbc;
  }

}

$system = new MyDB();
//$system->getDbc()->soSomethingWithMyDb(); 

另外,请注意不推荐使用mysql_。我建议你使用mysqli_或PDO

答案 1 :(得分:2)

类中的代码需要在函数内部:

class mydb{     
    // Parse error
    $mydblink = mysql_connect( 'localhost:3306','root','123qweasdzxc','test' );  
}

class mydb{     
    // Correct
    public function __construct(){
        $this->mydblink = mysql_connect( 'localhost:3306','root','123qweasdzxc','test' );  
    }
}

答案 2 :(得分:0)

您需要将其声明为变量,例如;

private $mydblink = mysql_connect( 'localhost:3306','root','123qweasdzxc','test' );

编辑:这可能很有用:http://php.net/manual/en/language.oop5.php

答案 3 :(得分:0)

旁注mysql_connect需要3个参数,你在这里传递了4个

mysql_connect( 'localhost:3306','root','123qweasdzxc','test' );

应该是

mysql_connect( 'localhost:3306','root','123qweasdzxc');
mysql_select_db('test');