是否可以在PHP中覆盖printIr对ArrayIterator对象的行为?

时间:2011-06-01 14:04:54

标签: php arrays

我有一个扩展ArrayIterator的PHP类,并且实现了所有必要的方法,使其行为类似于数组。

这适用于像foreach循环这样的东西,但是在它上面调用print_r仍会打印出对象的变量,而不是像数组一样打印它。

是否有某种方法可以覆盖此行为,以便调用print_r(我猜var_dump)将为此对象打印自定义输出?

4 个答案:

答案 0 :(得分:6)

不,因为它旨在为变量提供信息(即它用于调试),而不仅仅是给它一些字符串表示。

您可以覆盖__toString并使用echo

答案 1 :(得分:3)

自PHP 5.6以来,已经添加了魔术方法__debuginfo,如果你实现它,你应该能够覆盖var_dumpprint_r行为。

在这里: http://php.net/manual/language.oop5.magic.php#object.debuginfo

答案 2 :(得分:1)

如果不这么认为,除非使用PHP Runkit,但我不建议这样做,因为它会改变用户期望的预期行为。

另一个好方法是制作自己的功能(例如:my_print_r() { /* some code */ }或使用__toString()魔法。

它是为了什么?

答案 3 :(得分:1)

为什么不使用getArrayCopy方法?

print_r($yourIterator->getArrayCopy());