我想知道是否有可能直接实现特定类的接口,而不是其父类的继承接口。
示例:
<?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,所以我需要检查这个类是否实现了一个接口。
请指出我正确的方向。
谢谢!
答案 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;
}
}