Estendendo o MySQLi

Eu já tive problemas para estender a class MySQLi. Não me permitirá adicionar quaisquer propriedades.

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); 

object (MySQLii) # 1 (17) {
[“afetado_rows”] => int (0)
[“client_info”] => string (48) “mysqlnd 5.0.5-dev – 081106 – $ Revisão: 289630 $”
[“client_version”] => int (50005)
[“connect_errno”] => int (0)
[“connect_error”] => NULL
[“errno”] => int (0) [“erro”] =>
string (0) “” [“field_count”] =>
int (0) [“host_info”] => string (42) “Informações do host MySQL: Localhost via UNIX 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)}

Observe a ausência da propriedade do database de database eu adicionei no construtor MySQLii. Estou esquecendo de algo?

Hm, ou estou faltando alguma coisa ou você nomeou seu construtor MySQLii vez de __construct . (Isso não é Java;))

Renomeá-lo adequadamente pode resolver o problema, pois parece que seu construtor não é chamado.

Aparentemente, a extensão da class MySQLi impossibilita a adição de propriedades adicionais. PHP incorreto. Mau.

Acabei de fazer um invólucro para MySQLi e MySQLi_STMT estendendo as duas classs (conforme PHP 5.3 e 5.2). Posso confirmar que, embora as variables ​​não apareçam quando você a despeja com var_dump , os methods de class acessam as variables ​​como qualquer outro object normal sem problemas.

 class Foo extends MySQLi { public $var = 'blah'; public function blah() { echo $this->var; } } $foo = new Foo(); echo $foo->var; $foo->blah(); 

Acessar a variável de fora da class também funciona como esperado. Enquanto você normalmente não usa var_dump para descobrir qual variável existe ou outra funcionalidade pouco ortodoxa, basta codificar como você normalmente faz e você não terá problemas.