PHP 7.2.7 Released

get_parent_class

(PHP 4, PHP 5, PHP 7)

get_parent_classGibt den Namen der Elternklasse eines Objektes zurück

Beschreibung

string get_parent_class ([ mixed $object ] )

Gibt den Namen der Elternklasse eines Objekts oder einer Klasse zurück.

Parameter-Liste

object

Das untersuchte Objekt oder der untersuchte Klassenname. Der Parameter ist optional, falls die Funktion von einer Methode des Objekts aufgerufen wird.

Rückgabewerte

Gibt den Namen der Elternklasse der Klasse zurück, von der object eine Instanz oder der Name ist.

Hinweis:

Falls das Objekt keine Elternklasse hat oder die angegebene Klasse nicht existiert, wird FALSE zurückgegeben.

Falls die Funktion außerhalb eines Objekts ohne Parameter aufgerufen wird, gibt sie FALSE zurück.

Changelog

Version Beschreibung
5.1.0 Falls die Funktion außerhalb eines Objekts ohne Parameter aufgerufen wurde, gab sie NULL und eine Warnung zurück. Jetzt gibt sie FALSE zurück.

Beispiele

Beispiel #1 Die Verwendung von get_parent_class()

<?php

class vater {
  function 
vater()
  {
  
// implementiert etwas Logik
  
}
}

class 
kind extends vater {
  function 
kind()
  {
    echo 
"Ich bin das Kind von " get_parent_class($this) , "\n";
  }
}

class 
kind2 extends vater {
  function 
kind2()
  {
    echo 
"Ich bin ebenfalls das Kind von " get_parent_class('kind2') , "\n";
  }
}

$foo = new kind();
$bar = new kind2();

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Ich bin das Kind von vater
Ich bin ebenfalls das Kind von vater

Siehe auch

  • get_class() - Ermittelt den Klassennamen eines Objekts
  • is_subclass_of() - Prüft ob ein Objekt von der angegebenen Klasse abstammt oder sie implementiert
  • class_parents() - Return the parent classes of the given class

add a note add a note

User Contributed Notes 5 notes

up
3
falundir at gmail dot com
6 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
2
matt-php at DONT-SPAM-ME dot bitdifferent dot com
13 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
1
levu
7 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
radu dot rendec at ines dot ro
14 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.
up
-1
ssb45 at cornell dot edu
10 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.)
To Top