get_parent_class

(PHP 4, PHP 5, PHP 7)

get_parent_classZwraca nazwę klasy rodzica dla obiektu lub klasy

Opis

get_parent_class ([ mixed $obiekt ] ) : string

Zwraca nazwę klasy rodzica dla obiektu lub klasy.

Parametry

obiekt

Sprawdzany obiekt lub nazwa klasy. Parametr jest opcjonalny jeżeli funkcję wywołano wewnątrz metody.

Zwracane wartości

Zwraca nazwę klasy nadrzędnej, której obiekt jest instancją lub nazwą.

Informacja:

Jeżeli klasa nie ma rodzica lub podana klasa nie istnieje, zostanie zwrócone FALSE.

Jeżeli funkcja została wywołana bez parametru poza obiektem, zostanie zwrócone FALSE.

Rejestr zmian

Wersja Opis
5.1.0 JEżeli została wywołana poza obiektem, bez określonego parametru, ta funkcja zwracała NULL z ostrzeżeniem, ale teraz zwraca FALSE.

Przykłady

Przykład #1 Przykład użycia get_parent_class()

<?php

class dad {
    function 
dad()
    {
    
// implementacja jakiejś logiki
    
}
}

class 
child extends dad {
    function 
child()
    {
        echo 
"Jestem potomkiem klasy " get_parent_class($this) , "\n";
    }
}

class 
child2 extends dad {
    function 
child2()
    {
        echo 
"Także jestem potomkiem klasy " get_parent_class('child2') , "\n";
    }
}

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

?>

Powyższy przykład wyświetli:

Jestem potomkiem klasy dad
Także jestem potomkiem klasy dad

Zobacz też:

add a note add a note

User Contributed Notes 7 notes

up
6
yukal dot alexander at gmail dot com
5 years ago
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
up
2
matt-php at DONT-SPAM-ME dot bitdifferent dot com
19 years ago
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
up
2
falundir at gmail dot com
12 years ago
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 A {
}

    class
B extends A {
    }
   
        class
D extends B {
        }
       
        class
E extends B {
        }

    class
C extends A {
    }

        class
F extends C {
        }
   
            class
G extends F {
            }

class
H {
}

//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'));
?>
up
1
levu
13 years ago
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
A {
    function
someFunction() {
        return
get_child($this, __CLASS__);
    }
}

class
B extends A {

}

class
C extends B {

}

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

?>
up
0
jake at qzdesign dot co dot uk
4 years ago
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.
up
0
ssb45 at cornell dot edu
15 years ago
"'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.)
up
-1
radu dot rendec at ines dot ro
20 years ago
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.
To Top