PHP - 用不同数量的参数重载函数(PHP - override function with d

2019-08-31 06:40发布

我扩展一个类,但在某些情况下,我重写的方法。 有时在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错误/警告/信息:

我怎样才能避免这样的错误?

Answer 1:

你可以重新定义方法很容易地添加新的论据,这只是需要一个新的参数都是可选的(在你的签名的默认值)。 见下文:

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



Answer 2:

另一种解决方案(有点“脏”)是不带参数的所有声明你的方法,并在你的方法使用func_get_args()函数来获取你的论点?

http://www.php.net/manual/en/function.func-get-args.php



Answer 3:

你的接口/抽象类或最父类,应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它



文章来源: PHP - override function with different number of parameters
标签: php oop override