我扩展一个类,但在某些情况下,我重写的方法。 有时在2个参数,有时3,有时并没有参数。
不幸的是我得到一个PHP警告。
我的最低可验证例如: http://pastebin.com/6MqUX9Ui
<?php
class first {
public function something($param1) {
return 'first-'.$param1;
}
}
class second extends first {
public function something($param1, $param2) {
return 'second params=('.$param1.','.$param2.')';
}
}
// Strict standards: Declaration of second::something() should be compatible with that of first::something() in /home/szymon/webs/wildcard/www/source/public/override.php on line 13
$myClass = new Second();
var_dump( $myClass->something(123,456) );
我收到PHP错误/警告/信息:
我怎样才能避免这样的错误?
你可以重新定义方法很容易地添加新的论据,这只是需要一个新的参数都是可选的(在你的签名的默认值)。 见下文:
class Parent
{
protected function test($var1) {
echo($var1);
}
}
class Child extends Parent
{
protected function test($var1, $var2 = null) {
echo($var1);
echo($var1);
}
}
欲了解更多详情,请查看链接: http://php.net/manual/en/language.oop5.abstract.php
另一种解决方案(有点“脏”)是不带参数的所有声明你的方法,并在你的方法使用func_get_args()
函数来获取你的论点?
http://www.php.net/manual/en/function.func-get-args.php
你的接口/抽象类或最父类,应cotantin的PARAMS的方法可以收到的最大数量,你可以明确地声明它们为NULL,所以如果他们不给,不会发生错误,即
Class A{
public function smth($param1, $param2='', $param3='')
Class B extends A {
public function smth($param1, $param2, $param3='')
Class C extends B {
public function smth($param1, $param2, $param3);
在这种情况下,使用该方法不便()作为的一个目的“A”你将有义务仅使用一个参数($参数1),但使用相同的方法,对象“B”你将被oblgiated使用2个PARAMS( $参数1,$参数2),并在C你必须给所有的PARAMS instanciating它