Php 我的类的自定义var_转储输出
是否可以覆盖自定义类的var_dump输出? 我想要这样的东西:Php 我的类的自定义var_转储输出,php,var-dump,Php,Var Dump,是否可以覆盖自定义类的var_dump输出? 我想要这样的东西: class MyClass{ public $foo; public $bar; //pseudo-code public function __dump($foo, $bar) { return 'Foo:$foo, bar:$bar'; } } var_dump(array($instanceOfMyClass)); //it should output thi
class MyClass{
public $foo;
public $bar;
//pseudo-code
public function __dump($foo, $bar)
{
return 'Foo:$foo, bar:$bar';
}
}
var_dump(array($instanceOfMyClass));
//it should output this:
array(1) {
[0] =>
class MyClass#1 (2) {
Foo:valueOfFoo, bar:valueOfBar
}
}
我知道我可以使用一些第三方var_转储替代方案,但我想在我的库项目中自定义var_转储的行为
谢谢。为此,您可以使用ReflectionClass函数并构建自己的函数来获取所需的信息
您不能覆盖核心PHP函数 您可以在对象中添加函数u_toString():
class myClass {
public function __toString(){
// custom var_dump() content here then output it
}
}
$myClass = new myClass();
echo $myClass;
重写var_dump result没有意义,您可以使用toString()魔术方法
class MyClass{
public $foo;
public $bar;
public function test(){}
public function __toString()
{
$vars="Variables:";
foreach(get_class_vars(__CLASS__) as $name => $value) $vars.="<br> $name : {$this->{$name}}".gettype($this->{$name});
return __CLASS__.':<br>'.$vars.'<br>Methods:<br>'.implode('<br>',get_class_methods(__CLASS__));
}
}
$lol = new MyClass();
$lol->foo = 10;
$lol->bar = 'asd';
echo $lol;
class-MyClass{
公帑$foo;
公共酒吧;
公共函数测试(){}
公共函数
{
$vars=“变量:”;
foreach(获取类变量(uuu类变量)作为$name=>$value)$vars.=“
$name:{$this->{$name}”。gettype($this->{$name});
返回{u CLASS}:
'.$vars.
方法:
'.内爆({br>'),获取{u CLASS}方法({u CLASS}));
}
}
$lol=新的MyClass();
$lol->foo=10;
$lol->bar='asd';
echo$lol;
示例在PHP5.6.0+中,您可以使用magic函数自定义的输出
array\uu调试信息(void)
当转储对象以获取应显示的属性时,调用此方法。如果未在对象上定义该方法,则将显示所有公共、受保护和私有属性
此功能是在PHP5.6.0中添加的
例子:
PHP 5.6.0的输出:
PHP 5.0.0-5.5.16的输出:
笔记:
数组
。我在PHP5.6.0中返回字符串时出错:
致命错误:_debuginfo()必须在第15行的/somepath/somefile.php中返回一个数组
谢谢,但我知道如何使用toString。在转储一般PHP类的复杂结构时,我想简化var_转储输出,并且我的一些类可以以更简单的方式转储,谢谢,但这不会影响var_转储的输出。var_dump输出是硬连线的,还是可以为特定类定制?您不能重写php函数。您可以构建自己的var_dump函数并获取所需的所有信息。问题是特定类的var_dump行为是否可以被覆盖,即通过magic方法覆盖。知道如何使用toString。关键是,我有复杂的对象结构(PHP数组和其他类),结构的一部分是可以简化的类对象。我想用var_dump转储整个结构,并自定义我的类的部分输出。您不能对输出进行成本化,因为var_dump是一个具有直接输出的php函数,您最多可以用ob_函数过滤输出,并用一些正则表达式编辑输出,但不推荐这样做
class MyDateTime{
public $year, $month, $day, $hour, $minute, $second;
public function __debugInfo() {
return array(
'date' => $this->year . "-" . $this->month . "-" . $this->day,
'time' => sprintf("%02d:%02d:%02d", $this->hour, $this->minute, $this->second),
);
}
}
$dt = new MyDateTime();
$dt->year = 2014; $dt->month = 9; $dt->day = 20;
$dt->hour = 16; $dt->minute = 2; $dt->second = 41;
var_dump($dt);
object(MyDateTime)#1 (2) {
["date"]=>
string(9) "2014-9-20"
["time"]=>
string(8) "16:02:41"
}
object(MyDateTime)#1 (6) {
["year"]=>
int(2014)
["month"]=>
int(9)
["day"]=>
int(20)
["hour"]=>
int(16)
["minute"]=>
int(2)
["second"]=>
int(41)
}