致命错误:声明。。必须与…兼容。。PHP

致命错误:声明。。必须与…兼容。。PHP,php,fatal-error,Php,Fatal Error,我得到以下错误: Fatal error: Declaration of Shoppingcart::addToCart() must be compatible with that of Ishoppingcart::addToCart() in klassen.php on line 118 有什么问题吗?我找不到 脚本: 子类中公共函数的声明必须与其父类的声明相匹配: public function addToCart(); public function addToCart( Prod

我得到以下错误:

Fatal error: Declaration of Shoppingcart::addToCart() must be compatible with that of Ishoppingcart::addToCart() in klassen.php on line 118
有什么问题吗?我找不到 脚本:


子类中公共函数的声明必须与其父类的声明相匹配:

public function addToCart();
public function addToCart( Product $product)
不能向签名中添加参数


这与。

接口Ishoppingcart似乎在没有参数的情况下定义addToShoppingCart,但类Shoppingcart定义了以产品为参数的相同函数。我认为接口中的方法也应该将Product作为参数。

Ishoppingcart::addToCart()
声明该方法不采用任何参数,而实现
Shoppingcart::addToCart(Product$Product)
要求必须将
Product
类型的参数传递到该方法中。这意味着这两个声明是不兼容的,虽然实现的接口必须满足要求,但PHP会抛出显示的错误

解决方案是将
Ishoppingcart::addToCart()
更改为
Ishoppingcart::addToCart(Product$Product)
,以便它需要
Product
类型的参数,或者将
Shoppingcart::addToCart(Product$Product)
更改为不允许将任何参数传递到方法:
Shoppingcart::addToCart>(Product$Product=null)


正确的方法取决于您的应用程序要求。

我通过升级到最新的php版本解决了这个问题。

@F4LLCON在我看来,使用默认值NULL是一种违背接口用途的黑客行为。我希望接口具有“这正是此方法的签名”的契约我觉得要么接口应该有参数,要么两个方法的名称应该不同。我完全按照书中的说明操作。但它不起作用。我现在将使用hack,因为更改某些内容会影响脚本中的其他内容。@F4LLCON等等,这是一本书中的内容?我会切换书籍。这没什么大不了的独自一人,但对于一本编辑出版的书,我不会期望作者会犯这样的错误。我知道,我正在学习的课程有一位老师写了这本书。如果我抱怨某些东西不起作用,他会说可能是你(我)的错你做错了。他不会帮忙的。但是还有一个星期,我就上完了这所大学,要去学习游戏技术。我会烧掉这本烂书。只有问题,什么都没用。有趣的是,写这本书的老师说,我们只允许使用这本书。在我拿到我的pa后,我要向学校投诉毕业证书在我口袋里。但无论如何,谢谢你:)既然你已经完成了这门课程,也许你想和我分享这本作为课程一部分的书,也许你也想分享这所大学?:)在哪个版本的PHP中会出现此错误。在PHP7.2中,它在PHP7.4中警告了它的致命错误。
public function addToCart();
public function addToCart( Product $product)