我有一个定义方法charge()
的接口,第一个参数是必需的,第二个参数是可选的,我的布局看起来像这样:
interface Process{
public function charge($customerProfileId, $paymentProfileId = null);
// Other items
}
abstract class CardProcessor implements Process{
// Some methods & properties are here
}
class Authorize extends CardProcessor{
public function charge($customerProfileId, $paymentProfileId){
// Process the card on profile
}
}
当我加载文件时(即使我没有执行charge()
),我收到以下错误:
PHP致命错误:声明src \ processors \ CardProcessors \ Authorize :: charge()必须与/ home / processor / src /中的src \ interfaces \ Process :: charge($ customerProfileId,$ paymentProfileId = NULL)兼容第19行"
处理器/ CardProcessors / Authorize.php
这是什么原因?看起来对我来说......
答案 0 :(得分:2)
您的子类中的charge方法的签名仍然必须根据接口中的原始签名进行匹配。在我看来,您的层次结构仍然需要匹配的签名。
来自:PHP
此外,方法的签名必须匹配,即类型提示和所需参数的数量必须相同。例如,如果子类定义了一个可选参数,而抽象方法的签名没有,则签名中不存在冲突。
实现接口的类必须使用与接口中定义的完全相同的方法签名。不这样做会导致致命的错误。
答案 1 :(得分:2)
interface Process
{
public function charge($customerProfileId, $paymentProfileId);
// Other items
}
abstract class CardProcessor implements Process
{
// Some methods & properties are here
public abstract function charge($customerProfileId, $paymentProfileId);
}
class Authorize extends CardProcessor
{
public function charge($customerProfileId, $paymentProfileId = null)
{
// Process the card on profile
}
}