PHP报错:Declaration of ... should be compatible with ... 的解决方法

在将PHP版本从5.5升级到7后,遇到一个警告错误:方法重写时参数不同。错误发生在自定义的Walker类中,重写了 Walker_Nav_Menu 的 start_el 方法。解决方法是确保重写方法的参数与基类方法完全一致,包括默认值。在本例中,添加了缺少的参数$id=0,修复了警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景情况

今天把本地环境的PHP版本升级到了PHP7,之前一直用的是5.5,升级之后发现报了一个警告错误:Warning: Declaration of (类方法1) should be compatible with (类方法2);

字面上理解是:类方法1的声明应该符合类方法2,搜索引擎貌似给了个专业的说法:“方法重写,参数不同”。

事件还原

之前做WordPress主题时为了显示导航菜单的图像描述,从wordpress大学趴了一段代码,大概就是自定义wp_nav_menu()函数的Walker类来输出描述。

我的原代码有这样一段:

class description_walker extends Walker_Nav_Menu{
  function start_el( &$output, $item, $depth, $args ){
    // ..........
  }
}

然后报错:

Warning: Declaration of description_walker::start_el( &$output, $item, $depth, $args ) should be compatible with Walker_Nav_Menu::start_el( &$output, $item, $depth = 0, $args = Array, $id = 0) in ……

解决

结合搜索到的信息给出我的理解:

其实警告中已经给出了解决办法,由于代码中使用了 class … extends … 类继承,报错警告就是告诉你:重写方法的参数不对,你既然继承了这个基类方法,那么重写方法的参数也要按着原样来。

基类中,start_el 这个类方法有 $depth = 0, $args = Array, $id = 0 三个参数定义了默认值,我的代码中只有 $depth 和 $args 两个参数,并且没有默认值,同时还少了一个参数 $id = 0。

于是在新版的PHP中就报错,把我重写的方法参数照着基类改一下就解决问题了:

class description_walker extends Walker_Nav_Menu{
  function start_el( &$output, $item, $depth = 0, $args = Array, $id = 0 ){
    // ..........
  }
}

Tips: 函数签名:包括 函数/方法名,参数类型,参数个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值