簡體   English   中英

php檢查此類是否實現接口,而不是其父級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM