Genişletme MySQLi

3 Cevap php

Ben MySQLi sınıfını uzanan sorunlar çalıştırmak. Bana herhangi bir özellikleri eklemenize izin vermez.

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) {
["affected_rows"]=> int(0)
["client_info"]=> string(48) "mysqlnd 5.0.5-dev - 081106 - $Revision: 289630 $"
["client_version"]=> int(50005)
["connect_errno"]=> int(0)
["connect_error"]=> NULL
["errno"]=> int(0) ["error"]=>
string(0) "" ["field_count"]=>
int(0) ["host_info"]=> string(42) "MySQL host info: 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) }

Ben MySQLii kurucusuna eklenen database özelliğinin olmadığına dikkat edin. Ben bir şey eksik?

3 Cevap

Görünüşe MySQLi sınıfını genişleterek imkansız ek özellikler eklemek için yapar. Kötü PHP. Kötü.

Ben sadece (PHP 5.3 başına ve 5.2 gibi) hem de sınıfları uzatarak MySQLi ve MySQLi_STMT için bir sarıcı yaptık. Sana var_dump ile dökümü zaman değişkenleri görünmüyor ise, sınıf yöntemleri sorunsuz diğer normal bir nesne gibi değişkenleri erişen teyit edebilirsiniz.

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

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

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

Beklendiği gibi sınıfın dışından değişkeni erişme da çalışır. Sürece normalde normalde yapmak ve hiçbir sorun olacak gibi var_dump değişken var hangi anlamaya veya diğer alışılmışın dışında işlevsellik, sadece kod kullanmayın yok gibi.