2017-09-14 84 views
1

請注意,特質可能會使用其他特性,因此該類可能不會直接使用該特性。而且這個類也可以從父類中繼承下來,後者就是使用這個特性的父類。如何檢查一個類是否在PHP中使用特徵?

這是一個問題,可以在幾行內解決,否則我將不得不做一些循環?

+1

有一些函數會返回一個類(及其父母/等)在本頁的註釋中使用的所有特徵:http://php.net/manual/en/function.class-uses .php – iainn

+0

@iainn。我認爲ulf應該完成這項工作! – bijiDango

回答

2

class_uses()函數將返回一個數組,其中包含該類使用的所有特徵的名稱,並將通過傳遞一個類名或一個實例來工作....但是,您需要通過「遞歸」繼承樹得到使用的所有特性,並通過各性狀以及

編輯

注意stealz at op dot pl提供了展示如何做到這一點遞歸在

鏈接PHP文檔頁面的評論部分的示例函數
+0

謝謝先生,今天我學到了一些新的+1 –

0

以下功能來自http://php.net/manual/en/function.class-uses.php,ulf的評論。完美的作品。

function class_uses_deep($class, $autoload = true) 
{ 
    $traits = []; 

    // Get traits of all parent classes 
    do { 
     $traits = array_merge(class_uses($class, $autoload), $traits); 
    } while ($class = get_parent_class($class)); 

    // Get traits of all parent traits 
    $traitsToSearch = $traits; 
    while (!empty($traitsToSearch)) { 
     $newTraits = class_uses(array_pop($traitsToSearch), $autoload); 
     $traits = array_merge($newTraits, $traits); 
     $traitsToSearch = array_merge($newTraits, $traitsToSearch); 
    }; 

    foreach ($traits as $trait => $same) { 
     $traits = array_merge(class_uses($trait, $autoload), $traits); 
    } 

    return array_unique($traits); 
} 
相關問題