php - 在(非可变)方法的覆盖中使用可变参数
问题描述
我正在尝试覆盖使用传统参数列表的类。为了允许更改底层方法的签名(我无法控制并且可能会更改,但我确实需要覆盖它),我一直在尝试使用可变参数,如下所示:
class A {
public function demo($a) {}
}
class B extends A {
public function demo(...$args) {}
}
但是,这会发出一个严格的错误,
Declaration of B::demo(...$args) should be compatible with A::demo($b)
根据我对 Liskov 替换原则的理解,我的代码应该是允许的——任何期望调用的代码A::demo
都可以安全地调用B::demo
,而不会产生任何错误。
我是否存在误解,或者只是没有人费心在 PHP 编译器中实现对这种(大概)边缘情况的支持?
我知道我可以改用它func_get_args()
来模拟这种行为而不会激怒编译器,但我想知道为什么这种方法不起作用(而且 func_get_args 更慢)。
解决方案
推荐阅读
- c++ - Windows上的libtool需要绝对路径,当我已经给它一个绝对路径时
- javascript - 计算电子表格单元格的循环
- swift - 如何将 16 个字节从数据复制到 uuid_t?
- python - 切换到 64 位时出现 Python Winerror 193
- javascript - SyntaxError:输入 Discord Bot 意外结束
- java - 使用 Jsoup 非递归提取文本
- javascript - 如何在firebase登录或登录中设置或添加自定义提供程序名称,例如linkedin、instagram?
- c# - ScrapySharp 表单提交导致 System.AggregateException
- c# - 为什么将数据导出到 Excel 时日期格式会发生变化?
- python-3.x - Python中的闭包 - 执行内部函数?