【发布时间】:2024-08-28 15:45:02
【问题描述】:
刚开始扩展 MySQLi 类,发现子类中创建的成员变量在使用print_r 或var_dump 等时不显示为对象的一部分。
以这个例子为例
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] =>
[...]
我找到了this question,但它并没有真正提供答案 - 公认的解决方案表明这是不可能的,一个答案与我得出相同的结论,而另一个无关紧要。
The manual for print_r() 建议理论上应该显示我的成员变量,因为它们不是静态的。
print_r()、var_dump() 和 var_export() 也会显示 protected 和 PHP 5 对象的私有属性。静态类成员将 不显示。
有没有一种方法可以扩展 MySQLi 类并能够使用 print_r 快速调试我的数据库对象,而无需 get_object_vars()。这是应向 PHP 开发人员报告的预期行为还是错误?
我在 Windows 7 上使用 PHP 版本 5.3.5。我还没有在我的 Linux 开发环境上测试它。
【问题讨论】: