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

ruarlubt  于 2023-04-19  发布在  PHP
关注(0)|答案(4)|浏览(92)

我有一个PHP类,它扩展了ArrayIterator,并实现了所有必要的方法,因此它的行为像一个数组。
这对于像foreach循环这样的事情很好,但是在它上面调用print_r仍然会打印出对象的变量,而不是像打印数组那样打印出来。
有没有什么方法可以覆盖这种行为,以便调用print_r(我猜还有var_dump)来打印这个对象的自定义输出?

gblwokeq

gblwokeq1#

不,因为它被设计为给予关于变量的信息(即它用于调试),而不仅仅是提供它的一些字符串表示。
不过,您可以覆盖**__toString**并使用echo

brtdzjyr

brtdzjyr2#

从PHP 5.6开始,添加了神奇的方法__debuginfo,如果实现它,应该能够覆盖var_dumpprint_r的行为。
seh here:http://php.net/manual/language.oop5.magic.php#object.debuginfo

ilmyapht

ilmyapht3#

为什么不使用getArrayCopy方法呢?

print_r($yourIterator->getArrayCopy());
mznpcxlj

mznpcxlj4#

如果不认为它是,除非使用PHP Runkit,但我不建议这样做,因为它会改变预期的行为,您的用户将期望。
另一个好方法是创建自己的函数(例如:my_print_r() { /* some code */ }或使用__toString()魔法方法。
它是用来干什么的?

相关问题