You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类为何无法重写父类的__debugInfo方法?

问题原因及解决方法

核心原因

__debugInfo() 魔术方法仅被 var_dump() 识别并使用,print_r() 不会读取这个方法返回的内容,它会直接输出对象的所有内部属性,包括从Carbon继承来的受保护属性。

验证与解决

  1. 替换为 var_dump() 即可得到期望输出:
use Carbon\Carbon;

class Demo extends Carbon
{
    public function __debugInfo(): array
    {
        return ['value' => $this->__toString()];
    }
}

$d = new Demo();
var_dump($d);

输出结果:

object(Demo)#1 (1) {
  ["value"]=>
  string(19) "2023-05-23 13:57:18"
}
  1. 若要让 print_r() 输出自定义内容,可重写 __toString() 方法后直接输出对象:
use Carbon\Carbon;

class Demo extends Carbon
{
    public function __debugInfo(): array
    {
        return ['value' => $this->__toString()];
    }

    public function __toString(): string
    {
        return "Demo Object\n(\n    [value] => {$this->toDateTimeString()}\n)";
    }
}

$d = new Demo();
echo $d;

输出结果与你期望的完全一致。

内容的提问来源于stack exchange,提问作者neubert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:37:12