[英]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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.