(PHP 5)
ReflectionClass::getParentClass — 获取父类
本函数还未编写文档,仅有参数列表。
此函数没有参数。
一个 ReflectionClass。
isaac dot z dot foster at gmail dot com (2013-06-15 21:02:10)
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);
havelangep at hotmail dot com (2010-12-16 01:26:38)
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;
}
?>
jochem at drecomm dot nl (2010-11-18 04:34:59)
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)
meecrob at k42b3 dot com (2008-06-20 03:47:17)
When your class extends a parent class you maybe want the name
of them. Using getParentClass() is maybe a bit confusing. When
you want the name as string try the following.
<?php
$class = new ReflectionClass('whatever');
$parent = (array) $class->getParentClass();
if(array_key_exists('name', $parent))
{
# name of the parent class
$parent = parent['name'];
}
else
{
# no parent class avaible
$parent = false;
}
?>
When you turn getParentClass() to an array it will result either
array(0 => false) when no parent class exist or
array('name' => 'name of the parent class'). Tested on PHP 5.2.4