扩展MySQLi

时间:2010-03-18 19:06:16

标签: php mysqli

我遇到了扩展MySQLi类的问题。它不会让我添加任何属性。

class MySQLii extends MySQLi {

 public $database;

 public function MySQLii($host, $username, $password, $database){

  // Initialize MySQLi
  parent::MySQLi($host, $username, $password, $database);

  // Save database name
  $this->database = $database;

 }

}

$mysqlii = new MySQLii('localhost', 'root', 'password', 'database');

var_dump($mysqlii);
  

对象(MySQLii)#1(17){
  [ “affected_rows”] => INT(0)
  [ “CLIENT_INFO”] =>串(48)   “mysqlnd 5.0.5-dev - 081106 -   $ Revision:289630 $“   [ “client_version”] => INT(50005)
  [ “connect_errno”] => INT(0)
  [ “connect_error”] => NULL
  [ “错误号”] => int(0)[“error”] =>
  string(0)“”[“field_count”] =>
  int(0)[“host_info”] =>串(42)   “MySQL主机信息:通过UNIX的Localhost   socket“[”info“] => NULL
  [ “INSERT_ID”] => INT(0)
  [ “SERVER_INFO”] => string(6)“5.1.44”   [ “SERVER_VERSION”] => INT(50144)
  [ “SQLSTATE”] => string(5)“00000”
  [ “PROTOCOL_VERSION”] => INT(10)
  [ “的thread_id”] => INT(4019)
  [ “WARNING_COUNT”] => int(0)}

请注意,我在MySQLii构造函数中添加了database属性。我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

显然扩展MySQLi类使得无法添加其他属性。糟糕的PHP。坏。

答案 1 :(得分:0)

嗯,要么我错过了某些内容,要么命名了构造函数MySQLii而不是__construct。 (这不是Java;))

适当地重命名可以解决问题,因为它看起来好像没有调用你的构造函数。

答案 2 :(得分:0)

我刚刚通过扩展两个类(根据PHP 5.3和5.2)为MySQLiMySQLi_STMT创建了一个包装器。我可以确认,当您使用var_dump转储变量时不会出现变量,类方法可以像任何其他普通对象一样访问变量而没有问题。

class Foo extends MySQLi
{
    public $var = 'blah';

    public function blah()
    {
        echo $this->var;
    }
}

$foo = new Foo();
echo $foo->var;
$foo->blah();

从类外部访问变量也可以按预期工作。只要您通常不使用var_dump来确定存在哪个变量或其他非正统功能,只需按照惯例进行编码,您就没有问题。