是否可以隐藏print_r中的特定类字段?
<?php
class DataManager {
public $data = array();
}
class Data {
public $manager;
public $data = array();
public function Data ($m, $d) {
$this->manager = $m;
$this->data = $d;
}
}
$manager = new DataManager();
for ($a = 0; $a < 10; $a++) {
$manager->data[] = new Data($manager, 'Test ' . md5($a));
}
echo '<pre>';
print_r($manager);
?>
Run Code Online (Sandbox Code Playgroud)
这会打印出来
DataManager Object([data] => Array([0] => Data Object([manager] => DataManager Object RECURSION [data] => Test cfcd208495d565ef66e7dff9f98764da)
Run Code Online (Sandbox Code Playgroud)[1] => Data Object ( [manager] => DataManager Object *RECURSION* [data] => Test c4ca4238a0b923820dcc509a6f75849b ) .......
有可能以某种方式改变输出行为,所以它打印像这样吗?与DocComment/**@hidden**/一样
DataManager对象([data] =>数组([0] =>数据对象([数据] =>测试cfcd208495d565ef66e7dff9f98764da)
Run Code Online (Sandbox Code Playgroud)[1] => Data Object ( [data] => Test c4ca4238a0b923820dcc509a6f75849b )
如果没有,是否有某种PHP库可能使用反射并以某种方式绕过东西?
谢谢
Duš*_*jka 26
新的Magic方法__debugInfo()是在PHP 5.6中引入的,它允许您在转储对象时修改var_dump()的默认行为.
看看文档.
例:
<?php
class C {
private $prop;
public function __construct($val) {
$this->prop = $val;
}
public function __debugInfo() {
return [
'propSquared' => $this->prop ** 2,
];
}
}
var_dump(new C(42));
?>
Run Code Online (Sandbox Code Playgroud)
返回:
object(C)#1 (1) {
["propSquared"]=>
int(1764)
}
Run Code Online (Sandbox Code Playgroud)
虽然这个问题已经有4年了,但我相信将来会有人发现这个问题很有用.
| 归档时间: |
|
| 查看次数: |
6153 次 |
| 最近记录: |