Я только начал расширять класс MySQLi и обнаружил, что переменные-члены, созданные в дочернем классе, не отображаются как часть объекта при использовании print_r
или var_dump
и т. Д.
Takeнапример, этот пример
class Database extends MySQLi {
public function __construct( $h, $u, $p, $n ) {
parent::__construct( $h, $u, $p, $n );
$this->name = $n;
}
}
При выполнении следующего, переменные-члены, которые можно ожидать увидеть в объекте MySQLi, присутствуют и выводятся успешно.Тем не менее, переменные-члены, которые я создаю, отсутствуют.
$obj = new Database( 'a', 'b', 'c', 'd' )
print_r( $obj );
Однако я обнаружил, что могу успешно использовать вызовы echo $obj->name
.
При дальнейшей проверке я могу успешно осмотреть объект, используя следующую информацию:
print_r( get_object_vars( $obj ) );
Array
(
[name] => my_database
[affected_rows] =>
[client_info] =>
[client_version] =>
[...]
Я нашел этот вопрос , но на самом деле он не предлагает ответа.принятое решение предполагает, что это невозможно, один ответ приходит к тому же выводу, что и я, а другой не имеет значения.
Руководство для print_r()
предполагает, что в теории мои переменные-члены должныбудет показано, потому что они не являются статическими.
print_r (), var_dump () и var_export () также покажут защищенные и закрытые свойства объектов с PHP 5. Статические члены класса не будут показаны.
Есть ли способ, с помощью которого я могу расширить класс MySQLi и иметь возможность быстро отлаживать объекты моей базы данных, используя print_r
без требования get_object_vars()
.Это предполагаемое поведение или ошибка, о которой следует сообщать разработчикам PHP?
Я использую PHP версии 5.3.5 в Windows 7. Я еще не тестировал это в своей среде разработки Linux.