ReflectionClass::getParentClass()
(PHP 5, PHP 7)
获取父类
说明
public ReflectionClass::getParentClass(void): ReflectionClass
Warning本函数还未编写文档,仅有参数列表。
参数
此函数没有参数。
返回值
一个ReflectionClass。
参见
- ReflectionClass::__construct() 初始化 ReflectionClass 类
Quick correction, the code for getting all parent classes below has a "typo", you need to reset the $class variable to the parent class instance, otherwise it just endlessly loops: $class = new ReflectionClass('classname'); $parents = array(); while ($parent = $class->getParentClass()) { $parents[] = $parent->getName(); $class = $parent; } echo "Parents: " . implode(", ", $parents);
Here is a "replacement" for is_a that will additionally look both into the extended classes and in the implemented interfaces <?php /** * Check if a class extends or implements a specific class/interface * @param string $search The class or interface name to look for * @param string $className The class name of the object to compare to * @return bool */ function IsExtendsOrImplements( $search, $className ) { $class = new ReflectionClass( $className ); if( false === $class ) { return false; } do { $name = $class->getName(); if( $search == $name ) { return true; } $interfaces = $class->getInterfaceNames(); if( is_array( $interfaces ) && in_array( $search, $interfaces )) { return true; } $class = $class->getParentClass(); } while( false !== $class ); return false; } ?>
When you want to find all parents (parent, parent of parent, parent of parent's parent and so on) try: <?php $class = new ReflectionClass('whatever'); $parents = array(); while ($parent = $class->getParentClass()) { $parents[] = $parent->getName(); } echo "Parents: " . implode(", ", $parents); ?> ReflectionClass::getParentClass() can return a ReflectionClass object of the parent class or false if no parent. (PHP Version 5.1.6)