Intereting Posts
Могу ли я использовать точку и обратную косую черту вместо dirname ()? Веб-страница PHP не запускает команду unix даже после обновления sudoers MySQL LAST_INSERT_ID () и FOUND_ROWS () Вычисление среднего увеличения из значений массива в PHP Передача переменной PHP в код Javascript Неустранимая ошибка: заявление об объявлении пространства имен должно быть самым первым в сценарии в Ошибка ввода PHP / SQL при использовании именных заполнителей Как отправлять уведомления iOS Push с помощью TLS и PHP? Symfony на виртуальном хосте (проблема с корневым документом) Как я могу использовать php, чтобы при нажатии пользователем определенной кнопки они могли писать в определенный .txt-файл? Форма, не отправляющая при попытке использования jQuery's submitHandler Лучший способ перенаправления мобильных устройств Разбейте количество (число) в записи и установите их как массив для выбора опций Laravel принадлежит Не работает Невозможно автоматически загрузить / загрузить базу данных базы данных в codeigniter

Определение иерархии классов объекта во время выполнения

get_class() даст мне возможный класс объекта.

Я хочу знать всю цепочку родительских классов. Как это может быть сделано?

Вы можете вызвать get_parent_class несколько раз, пока не вернет false :

 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; } 

Вы можете использовать

  • class_parents – возвращает все родительские классы данного класса в массив

Пример:

 print_r(class_parents('RecursiveDirectoryIterator')); 

выйдет

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

Если вы хотите проверить конкретные типы или создать функцию для создания детализации без использования каких-либо других решений, вы можете прибегнуть к «instanceof», чтобы определить, является ли он также конкретным типом. Это будет верно для проверки того, является ли класс расширяет родительский класс.

Часть класса ReflectionClass API PHP Reflection имеет метод getParentClass () .

Вот небольшой пример кода, использующий его:

 <?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"; } 

Запустить код