3

我有这两个接口:

interface Observer
{
    public function notify(Observable $observable, ...$args);
}

interface Observable
{
    public static function register(Observer $observer);
    public function notifyObservers();
}

这就是我想要实现的:

abstract class EventHandler implements Observer
{
    abstract public function notify(Event $event, ...$args);
}

abstract class Event implements Observable
{
    private static $handlers = [];
    public static function register(EventHandler $handler)
    {
        self::$handlers []= $handler;
    }

    public function notifyObservers()
    {
        //notify loop here...
    }
}

EventObservable并且EventHandlerObserver,对吗?

那么为什么php认为这些实现与它们各自的接口不兼容呢?


对我所说的“兼容”的简单测试:

class CreateEvent extends Event {}

$createEventObj = new CreateEvent();
if ($createEventObj instanceof Observable) {
    echo 'Compatible';
} else {
    echo 'Incompatible';
}
4

1 回答 1

1

这是因为类型提示。如果你的 typehint 是 (Observable $observable) 你应该在所有子类的这个方法的所有实现中使用完全相同的 typehint。在此处阅读更多信息http://php.net/manual/de/language.oop5.typehinting.php

于 2016-08-31T23:50:49.377 回答