我是PHP OOP的新手,我收到了一个错误。
objectForm :: addMessage()必须与第xx行中的/www/form/Form.php中的objectAbstractForm :: addMessage()兼容
我已经看过几次这样的方法参数就像$ var1,$ var2 = false(或null),无论出于什么原因,我得到“必须与X :: Y()的那些相符”
public function addMessage($message, $messageType = 'info')
{
if (!in_array($message, $this->_messages)) {
if ('info' == $messageType) {
$this->_messages[] = $message;
} else {
$this->_errorMessages[] = $message;
}
}
}
由于我在OOP上相当新,我无法找到更好的方法。
编辑:例如,在父级中
abstract class objectAbstractForm {
abstract protected function addMessage($message, $messageType);
}
有什么更好的方法可以做到这一点?我使用的是PHP 5.2.17
答案 0 :(得分:2)
问题是你在子类中使第二个参数可选,但在父类中是必需的。如果你想要一个可选参数,你也需要在父类中使它成为可选参数。
答案 1 :(得分:1)
我想你的类正在扩展另一个(从它在objectForm
中扩展/www/form/Form.php
的错误消息),objectAbstractForm::addMessage()
的方法签名(此处发布的方法)必须相同为objectForm::addMessage()
。
例如:
class A {
public function test($a, $b, $c=null) {
// code
}
}
class B extends A {
public function test($a, $b, $c=null) {
// code
}
}
class C extends A {
public function test($a, $b=null) {
// code
}
}
类C
将生成您的错误,方法C::test()
的签名与方法A::test()
中的签名不同,而B::test()
将被接受,因为它签名与A::test()
相同。
我非常乐意让我的回答更具体针对您的问题,但您需要发布objectForm::addMessage()
的方法签名以及objectAbstractForm
和{{1的类签名}}
或者,您可以升级到PHP 5.3或更高版本,这不会让您感到唠叨。
HTH
P.S。:当我说“方法签名”时,我不确定我是否使用了正确的术语,但如果我错了,请随时纠正我:)