2010-03-18 65 views
0

我遇到了扩展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 - $修订:289630 $”
[ “client_version”] => INT(50005)
[ “connect_errno”] => INT(0)
[ “connect_error”] => NULL
[“errno”] => int(0)[“error”] =>
字符串(0)“”[“field_count”] =>
int(0)[“host_info”] => string(42) “MySQL主机信息:通过UNIX的本地主机 socket”[“info”] => NULL
[ “INSERT_ID”] => INT(0)
[ “SERVER_INFO”] =>串(6) “44年5月1日” [ “SERVER_VERSION”] => INT(50144)
[ “SQLSTATE” ] =>串(5) “00000”
[ “PROTOCOL_VERSION”] => INT(10)
[ “的thread_id”] => INT(4019)
[ “WARNING_COUNT”] => INT(0)}

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

回答

0

显然扩展MySQLi类使其不可能添加其他属性。坏PHP。坏。

0

嗯,要么我失去了一些东西,或者你命名你的构造函数MySQLii,而不是__construct。 (这是不是Java;))

适当地重新命名它,因为它看起来好像你的构造不叫问题会得到解决。

+0

你也可以用你的构造函数的函数名替换PHP中类的函数名。 – 2010-03-18 19:41:39

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找出哪个变量存在或其他非正统的功能,只需要像平常一样进行编码,你就没有问题了。