請注意,特質可能會使用其他特性,因此該類可能不會直接使用該特性。而且這個類也可以從父類中繼承下來,後者就是使用這個特性的父類。如何檢查一個類是否在PHP中使用特徵?
這是一個問題,可以在幾行內解決,否則我將不得不做一些循環?
請注意,特質可能會使用其他特性,因此該類可能不會直接使用該特性。而且這個類也可以從父類中繼承下來,後者就是使用這個特性的父類。如何檢查一個類是否在PHP中使用特徵?
這是一個問題,可以在幾行內解決,否則我將不得不做一些循環?
class_uses()函數將返回一個數組,其中包含該類使用的所有特徵的名稱,並將通過傳遞一個類名或一個實例來工作....但是,您需要通過「遞歸」繼承樹得到使用的所有特性,並通過各性狀以及
編輯
注意stealz at op dot pl
提供了展示如何做到這一點遞歸在
謝謝先生,今天我學到了一些新的+1 –
以下功能來自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);
}
有一些函數會返回一個類(及其父母/等)在本頁的註釋中使用的所有特徵:http://php.net/manual/en/function.class-uses .php – iainn
@iainn。我認爲ulf應該完成這項工作! – bijiDango