我有一个PHP类,它扩展了ArrayIterator,并实现了所有必要的方法,因此它的行为像一个数组。
这对于像foreach
循环这样的事情很好,但是在它上面调用print_r
仍然会打印出对象的变量,而不是像打印数组那样打印出来。
有没有什么方法可以覆盖这种行为,以便调用print_r
(我猜还有var_dump
)来打印这个对象的自定义输出?
我有一个PHP类,它扩展了ArrayIterator,并实现了所有必要的方法,因此它的行为像一个数组。
这对于像foreach
循环这样的事情很好,但是在它上面调用print_r
仍然会打印出对象的变量,而不是像打印数组那样打印出来。
有没有什么方法可以覆盖这种行为,以便调用print_r
(我猜还有var_dump
)来打印这个对象的自定义输出?
4条答案
按热度按时间gblwokeq1#
不,因为它被设计为给予关于变量的信息(即它用于调试),而不仅仅是提供它的一些字符串表示。
不过,您可以覆盖**
__toString
**并使用echo
。brtdzjyr2#
从PHP 5.6开始,添加了神奇的方法
__debuginfo
,如果实现它,应该能够覆盖var_dump
和print_r
的行为。seh here:http://php.net/manual/language.oop5.magic.php#object.debuginfo
ilmyapht3#
为什么不使用getArrayCopy方法呢?
即
mznpcxlj4#
如果不认为它是,除非使用
PHP Runkit
,但我不建议这样做,因为它会改变预期的行为,您的用户将期望。另一个好方法是创建自己的函数(例如:
my_print_r() { /* some code */ }
或使用__toString()
魔法方法。它是用来干什么的?