php检查THIS类是否实现了接口,而不是它的父类


php check if THIS class implements an interface, not its parents

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

示例:

<?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,所以我需要检查THIS类是否实现了接口。

请给我指正确的方向。

谢谢!

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

这样的怎么样?

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;
}
}