Расширение MySQLi - PullRequest
       5

Расширение MySQLi

0 голосов
/ 18 марта 2010

У меня возникли проблемы с расширением класса 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) {
["disabled_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"] =>
string (0) "" ["field_count"] =>
int (0) ["host_info"] => string (42) "Информация о хосте MySQL: Localhost через UNIX сокет "[" 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)}

Обратите внимание на отсутствие свойства database, которое я добавил в конструктор MySQLii. Я что-то упустил?

Ответы [ 3 ]

1 голос
/ 25 мая 2010

Очевидно, что расширение класса MySQLi делает невозможным добавление дополнительных свойств.Плохой PHP.Bad.

0 голосов
/ 04 августа 2011

Я только что сделал оболочку для MySQLi и MySQLi_STMT, расширив оба класса (согласно PHP 5.3 и 5.2). Я могу подтвердить, что хотя переменные не появляются, когда вы выгружаете его с помощью 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, чтобы выяснить, какая переменная существует или другие неортодоксальные функции, просто кодируйте, как обычно, и у вас не возникнет проблем.

0 голосов
/ 18 марта 2010

Хм, либо я что-то упустил, либо вы назвали свой конструктор MySQLii вместо __construct. (Это не Java;))

Переименование его может решить проблему, как если бы ваш конструктор не вызывался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...