【问题标题】:php interface method overridingphp接口方法覆盖
【发布时间】:2012-07-19 14:04:37
【问题描述】:
<?php
interface a {
    public function bar();
}
interface b extends a {
    public function foo();
    public function bar($a);
}

?>

显示方法中签名不匹配的致命错误。 php中不能覆盖接口的方法吗?

【问题讨论】:

  • 如果它具有相同的签名是可能的。您的b.bar 接受$a,而a.bar 不接受,这是致命错误的根源。
  • @Yoshi 如果它具有相同的签名有什么意义。到底有什么意义。
  • @Esailija 这是你必须问 php 开发人员的事情。我只是指出了错误,这让我自己经常绊倒;)
  • @Esailija 您仍然能够以另一种方式实现相同的功能。您还可以使用func_get_args() 模拟重载
  • @yoshi 我知道错误的原因。我想知道是否有可能以这种方式或任何其他方式做到这一点。

标签: php interface overriding


【解决方案1】:

您收到签名不匹配错误,因为这两个 bar 函数不兼容。

您可以通过将界面更改为来修复它

interface b extends a {
    public function foo();
    public function bar($a = null);
}

虽然这可能不是一个完整的解决方案,因为您现在会收到 Can't inherit abstract function 错误。

【讨论】:

  • Can't inherit... 错误是a php bug,在 5.3.9 中修复。
猜你喜欢
  • 2014-10-23
  • 2014-07-17
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
相关资源
最近更新 更多