get_class()
mi darà la classe finale di un oggetto.Determinazione della gerarchia di classi di un oggetto in fase di esecuzione
Voglio conoscere tutta la catena delle classi genitore. Come si può fare?
get_class()
mi darà la classe finale di un oggetto.Determinazione della gerarchia di classi di un oggetto in fase di esecuzione
Voglio conoscere tutta la catena delle classi genitore. Come si può fare?
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;
}
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.
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";
}
È possibile utilizzare
class_parents
- Restituisce tutte le classi genitore della classe data in una matriceEsempio:
print_r(class_parents('RecursiveDirectoryIterator'));
stamperà
Array
(
[FilesystemIterator] => FilesystemIterator
[DirectoryIterator] => DirectoryIterator
[SplFileInfo] => SplFileInfo
)