我想知道是否有可能获得特定类直接实现的接口,而不是其父类继承的接口。
示例:
<?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;
}
}