2

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

例子:

<?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 类是否实现了接口。

请指出我正确的方向。

谢谢!

4

1 回答 1

2

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

这样的事情怎么样?

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

}
于 2013-08-02T10:55:44.123 回答