get_parent_class

(PHP 4, PHP 5)

get_parent_classВозвращает имя родительского класса для объекта или класса

Описание

string get_parent_class ([ mixed $object ] )

Возвращает имя родительского класса для объекта или класса.

Список параметров

object

Тестируемый объект или имя класса

Возвращаемые значения

Возвращает имя родительского класса, если object является объектом или именем класса.

Замечание:

Если объект не имеет родителя, или переданного класса с таким именем не существует, то будет возвращено FALSE.

Если функция вызвана без параметров вне объекта, эта функция возвращает FALSE.

Список изменений

Версия Описание
5.1.0 Если функция была вызвана без параметров вне объекта, то функция возвращала NULL вместе с предупреждением, однако сейчас она возвращает FALSE.
5.0.0 Параметр object стал необязательным, если вызов происходит внутри метода данного объекта.
4.0.5 Если object - строка, возвращает имя родительского класса указанного класса.

Примеры

Пример #1 Пример использования get_parent_class()

<?php

class dad {
    function 
dad()
    {
    
// реализация какой-нибудь логики
    
}
}

class 
child extends dad {
    function 
child()
    {
        echo 
"I'm " get_parent_class($this) , "'s son\n";
    }
}

class 
child2 extends dad {
    function 
child2()
    {
        echo 
"I'm " get_parent_class('child2') , "'s son too\n";
    }
}

$foo = new child();
$bar = new child2();

?>

Результат выполнения данного примера:

I'm dad's son
I'm dad's son too

Смотрите также

  • get_class() - Возвращает имя класса, к которому принадлежит объект
  • is_subclass_of() - Проверяет, содержит ли объект в своем дереве предков указанный класс

Коментарии

If the argument obj is a string and the class is not defined, then the function returns FALSE.

If the argument obj is an object created from a class with no ancestors (or a string representing a class with no ancestors), then the function returns FALSE.
2004-04-07 09:44:41
http://php5.kiev.ua/manual/ru/function.get-parent-class.html
PHP (4 at least, dunno about 5) stores classnames in lower case, so:

<?PHP

class Foo
{
}

class 
Bar extends Foo
{
}

echo 
get_parent_class('Bar');

echo 
"\n";

echo 
get_parent_class('bar');

?>

will output:

foo
foo
2004-11-01 09:52:01
http://php5.kiev.ua/manual/ru/function.get-parent-class.html
"'If called without parameter outside object' What on earth does that mean?"

There are two places this could be called:
1. From within a member function of an object.  In this case, it may be called with no parameters and will return the parent class of the object owning the member function.  (If the parameter is included, then it will return the parent class of the specified class as normal.)

2. From outside an object (i.e., global or function scope).  In this case, PHP doesn't know what class you're talking about if you don't include a parameter, so it returns FALSE.  (But, of course, it works if you specify the class with the parameter.)
2008-05-14 11:32:36
http://php5.kiev.ua/manual/ru/function.get-parent-class.html
Автор:
I wrote a simple function doing the reverse thing: get the children:

<?php
function get_child($instance$classname) {
   
$class $classname;
   
$t get_class($instance);
    while ((
$p get_parent_class($t)) !== false) {
        if (
$p == $class) {
            return 
$t;
        }
       
$t $p;
    }
    return 
false;
}

abstract class 
{
    function 
someFunction() {
        return 
get_child($this__CLASS__);
    }
}

class 
extends {

}

class 
extends {

}

$c = new C();
echo 
$c->someFunction(); //displays B

?>
2011-04-20 11:36:22
http://php5.kiev.ua/manual/ru/function.get-parent-class.html
You can use this function to find common parent of multiple objects or classes.

<?php
/**
 * Returns name of the first (in class hierarchy) common parent class of all provided objects or classes.
 * Returns FALSE when common class is not found.
 *
 * @param mixed $objects Array that can contain objects or class names.
 * @return mixed
 */
function get_first_common_parent($objects) {
   
$common_ancestors null;
    foreach(
$objects as $object) {
        if (
is_object($object)) {
           
$class_name get_class($object);
        } else {
           
$class_name $object;
        }
       
       
$parent_class_names = array();
       
$parent_class_name $class_name;
        do {
           
$parent_class_names[] = $parent_class_name;
        } while(
$parent_class_name get_parent_class($parent_class_name));
       
        if (
$common_ancestors === null) {
           
$common_ancestors $parent_class_names;
        } else {
           
$common_ancestors array_intersect($common_ancestors$parent_class_names);
        }
    }
   
    return 
reset($common_ancestors);
}
?>

Example:

<?php
class {
}

    class 
extends {
    }
   
        class 
extends {
        }
       
        class 
extends {
        }

    class 
extends {
    }

        class 
extends {
        }
   
            class 
extends {
            }

class 
{
}

//returns "A"
get_first_common_parent(array('G''E'));

//returns "F"
get_first_common_parent(array(new G(), 'F'));

//returns false (no common parent)
get_first_common_parent(array('C''H'));

//returns false (non-existent class provided)
get_first_common_parent(array(new B(), 'X'));
?>
2012-04-13 13:27:12
http://php5.kiev.ua/manual/ru/function.get-parent-class.html
An output of the entire inheritance chain using closures, recursion, and OOP

class ParentClass {
    public static function getChain() {
        $chain = null;
        return $function = function($className='') use (& $chain, & $function) {
            if (empty($className))
                $className = static::class;

            if (empty($chain))
                $chain = $className;

            $parent = get_parent_class($className);

            if ($parent !== false) {
                $chain .= " > {$parent}";
                return $function($parent);
            }

            return $chain;
        };
    }
}

class Child extends ParentClass {}
class SubChild extends Child {}
class Sub2 extends SubChild {}
class Sub3 extends Sub2 {}
class Sub4 extends Sub3 {}
class Sub5 extends Sub4 {}
class Sub6 extends Sub5 {}
class Sub7 extends Sub6 {}

printf("%s\n", Sub7::getChain()());

$getChain = Sub7::getChain();
printf("%s\n", $getChain('Sub3'));

Output is:
Sub7 > Sub6 > Sub5 > Sub4 > Sub3 > Sub2 > SubChild > Child > ParentClass
Sub3 > Sub2 > SubChild > Child > ParentClass
2018-11-24 21:28:46
http://php5.kiev.ua/manual/ru/function.get-parent-class.html
Note that from PHP 5.5 you can also use `parent::class` from within a method, e.g.

<?php
   
function child()
    {
        echo 
"I'm "parent::class, "'s son\n";
    }
?>

Looks a bit tidier and technically probably more optimal, as it avoids a function call lookup.
2019-10-18 01:47:58
http://php5.kiev.ua/manual/ru/function.get-parent-class.html

    Поддержать сайт на родительском проекте КГБ