2010-11-17 23 views

risposta

5

Si può chiamare get_parent_class ripetutamente fino a tornare falso:

function getClassHierarchy($object) { 
    if (!is_object($object)) return false; 
    $hierarchy = array(); 
    $class = get_class($object); 
    do { 
     $hierarchy[] = $class; 
    } while (($class = get_parent_class($class)) !== false); 
    return $hierarchy; 
} 
1

Se si desidera controllare per tipi specifici, o costruire una funzione per creare drill-down senza utilizzare una qualsiasi delle altre soluzioni, si potrebbe ricorrere a 'instanceof' per determinare se è anche un tipo specifico, sarà vero per verificare se una classe estende una classe genitore.

0

La parte di classe dello PHP Reflection API ha un metodo getParentClass().

Ecco un esempio piccolo codice di usarlo:

<?php 

class A { } 
class B extends A { } 
class C extends B { } 


$class = new ReflectionClass('C'); 
echo $class->getName()."\n"; 
while ($class = $class->getParentClass()) { 
    echo $class->getName()."\n"; 
} 

Run the code

26

È possibile utilizzare

  • class_parents - Restituisce tutte le classi genitore della classe data in una matrice

Esempio:

print_r(class_parents('RecursiveDirectoryIterator')); 

stamperà

Array 
(
    [FilesystemIterator] => FilesystemIterator 
    [DirectoryIterator] => DirectoryIterator 
    [SplFileInfo] => SplFileInfo 
) 
Problemi correlati