php检查此类是否实现了接口,而不是其父接口

时间:2013-08-02 10:37:15

标签: php oop

我想知道是否有可能直接实现特定类的接口,而不是其父类的继承接口。

示例:

<?php

interface Searchable {}

class Post implements Searchable {}

class Post_Deleted extends Post {}


class Search {

    protected function _getClassesToSearch() {
        $classes_to_search = array();
        $declared_classes = get_declared_classes();
        foreach ($declared_classes as $class) {
            $implements = class_implements($class);
            if ($implements && in_array('Searchable', $implements)) {
                $classes_to_search[] = $class;
            }
        }
        return $classes_to_search;
    }

}

这就是我目前使用它的方式。 但我只想搜索Post,而不是Post_Deleted,所以我需要检查这个类是否实现了一个接口。

请指出我正确的方向。

谢谢!

1 个答案:

答案 0 :(得分:1)

虽然我同意其他人在你的问题的评论中所做的保留,但你想要做的可能是基于对继承的误解,我认为下面的代码会做你想要的...是,你应该解决这个问题吗?

这样的事情怎么样?

class Search {

    public function _getClassesToSearch() {

        $declared_classes = get_declared_classes();
        $classes_to_search = array_filter($declared_classes, function($class) {
            $ownInterfaces = class_implements($class);
            $parent = get_parent_class($class);
            if($parent) {
                $parentInterfaces = class_implements($parent);
            } else {
                $parentInterfaces = array();
            }

            $diff = array_diff($ownInterfaces, $parentInterfaces);
            $found = in_array('Searchable', $diff);
            return $found;
    });

    return $classes_to_search;
}

}