使用PHP 5中的接口方法的其他参数

时间:2015-08-12 21:21:27

标签: php oop interface php-5.6 abstract-methods

我有一个问题,一个接口的方法可以在实现过程中获得额外的参数,如抽象方法吗?例如:

<?php

interface Figures {

    public function setColor($color);
}

class Circle implements Figures {

    public function setColor($color, $additional_parameter, ...) {

    }
}

&GT;

3 个答案:

答案 0 :(得分:3)

不,它会给你一个像这样的错误

Fatal error: Declaration of Circle::setColor() must be compatible with Figures::setColor($color)

答案 1 :(得分:2)

只要您将其他参数设为可选,就可以执行此操作:

public function setColor($color, $additional_parameter = "defaultvalue", $another_parameter = null) { ...

仍然这不是最好的主意,因为很难以可预测的方式使用您的代码,因为有时您的参数将被忽略。不严格遵循接口定义也是不好的做法。

答案 2 :(得分:1)

重新提问:no.

接口应该提供&#34;合同&#34;所有孩子都必须坚持。因此,无论如何通过做额外的事情来打破合同可能不是一个好主意。

另一种选择是为其他参数提供公共设置器,然后通过setColor()中的属性访问它们:

interface Figures {

    public function setColor($color);
}

class Circle implements Figures {
    protected $_additionalParameter;

    public function setColor($color) {
        echo $this->_additionalParameter . ' - not passed in any more';
    }

    public function setAdditionalParameter($blah = '')
    {
        $this->_additionalParameter = $blah;
        return $this;
    }
}

如此使用:

// you implement stuff
$circle = new Circle;
$circle->setAdditionalParameter('blah')
       ->setColor('color');
// blah - not passed in any more

如果您有许多其他参数,您可能会发现使用magic method __set()覆盖所有基础更加整洁,而不是用很多基础加载您的课程。