Возможна ли реализация функции в классе интерфейса? - PullRequest
2 голосов
/ 20 ноября 2011

Что реализует функция? обычно то, что я знаю, реализует интерфейс, который имеет

function foo(); 

и реализации как

function foo($bar)

в другом классе

но что происходит, когда я реализую функцию в интерфейсе? я должен переопределить их в подклассах? или я могу использовать их непосредственно в подклассах, предполагая, что они реализованы в подклассах.

interface ibarbar{
function foo($bar)
{ 
 return $bar.$bar;}
}

class barbar implements ibarbar
{
 function baz()
 {
 $this->barbar(); //used without implementing in subclass. expected results unknown.
 }
}

В документации PHP написано

// This will not work
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private $vars = array();

    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
}

так что все методы в интерфейсе являются абстрактными методами. но я не мог найти, как расширить функцию. или реализовать функцию

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Интерфейс не имеет реализации по определению.Здесь вы говорите о наследовании, если у вас есть функция с реализацией, которую вы переопределяете / Shadow в другом классе.

1 голос
/ 20 ноября 2011

Вы не можете реализовать функцию в интерфейсе. Вы можете указать только свою подпись.


Если вы хотите указать подписи для некоторых методов, но обеспечить реализацию для других, используйте абстрактный класс:

abstract class A {
    abstract public function B($c);

    public function C($d) {
        // do something
    }
}
class B extends A {
    public function B($c) { // need to implement B, as it is abstract
        $this->C($c);       // but can directly use C, as it is not
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...