我有一个扩展ArrayIterator的PHP类,并且实现了所有必要的方法,使其行为类似于数组。
这适用于像foreach
循环这样的东西,但是在它上面调用print_r
仍会打印出对象的变量,而不是像数组一样打印它。
是否有某种方法可以覆盖此行为,以便调用print_r
(我猜var_dump
)将为此对象打印自定义输出?
答案 0 :(得分:6)
不,因为它旨在为变量提供信息(即它用于调试),而不仅仅是给它一些字符串表示。
您可以覆盖__toString
并使用echo
。
答案 1 :(得分:3)
自PHP 5.6以来,已经添加了魔术方法__debuginfo
,如果你实现它,你应该能够覆盖var_dump
和print_r
行为。
答案 2 :(得分:1)
如果不这么认为,除非使用PHP Runkit
,但我不建议这样做,因为它会改变用户期望的预期行为。
另一个好方法是制作自己的功能(例如:my_print_r() { /* some code */ }
或使用__toString()
魔法。
它是为了什么?
答案 3 :(得分:1)