tim at correctclick dot com wrote:
<quote>
A slightly more cryptic but faster get_ancestors function:
<?php
function get_ancestors ($class) {
for ($classes[] = $class; $class = get_parent_class ($class); $classes[] = $class);
return $classes;
}
?>
(The second part of the for is implicitly testing for $class != ""). Recursion is considerably slower than looping, so you probably want to use this function.
Hope someone finds it useful.
</quote>
I would prefer this version, because it will create no duplicates:
<?php
function get_ancestors ($class) {
$classes = array($class);
while($class = get_parent_class($class)) { $classes[] = $class; }
return $classes;
}
Greets, Dennis
?>
get_parent_class
(PHP 4, PHP 5)
get_parent_class — Gibt den Namen der Elternklasse eines Objektes zurück
Beschreibung
Gibt den Namen der Elternklasse eines Objekts oder einer Klasse zurück.
Parameter-Liste
-
object -
Das untersuchte Objekt oder der untersuchte Klassenname.
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, wird
FALSEzurückgegeben.
Falls die Funktion außerhalb eines Objekts ohne Parameter aufgerufen wird,
gibt sie FALSE zurück.
Changelog
| Version | Beschreibung |
|---|---|
| Vor 5.1.0 |
Falls die Funktion außerhalb eines Objekts ohne Parameter aufgerufen
wird, gibt sie NULL zurück mit einer Warnung.
|
| Seit 5.0.0 |
Der Parameter object ist optional, falls die
Funktion von einer Methode eines Objekts aufgerufen wird.
|
| Seit 4.0.5 |
Falls object eine Zeichenkette ist, gibt diese
Funktion den Namen der Elternklasse der Klasse mit diesem Namen
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
get_parent_class
birkholz at web dot de
07-Oct-2005 02:01
07-Oct-2005 02:01
matt-php at DONT-SPAM-ME dot bitdifferent dot com
01-Nov-2004 04:52
01-Nov-2004 04:52
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
radu dot rendec at ines dot ro
07-Apr-2004 03:44
07-Apr-2004 03:44
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.
tim at correctclick dot com
06-Apr-2003 05:48
06-Apr-2003 05:48
A slightly more cryptic but faster get_ancestors function:
function get_ancestors ($class) {
for ($classes[] = $class; $class = get_parent_class ($class); $classes[] = $class);
return $classes;
}
(The second part of the for is implicitly testing for $class != ""). Recursion is considerably slower than looping, so you probably want to use this function.
Hope someone finds it useful.
eric dot brison at anakeen dot com
28-Jan-2002 01:14
28-Jan-2002 01:14
To return all ancestors class of an object
function get_ancestors_class($classname) {
$father = get_parent_class($classname);
if ($father != "") {
$ancestors = get_ancestors_class($father);
$ancestors[] = $father;
}
return $ancestors;
}
example :
-----------
Class C {
}
Class B extends C {
}
Class A extends B {
}
print_r (get_ancestors_class("a"));
print_r (get_ancestors_class("b"));
example result :
---------------
Array
(
[0] => c
[1] => b
)
Array
(
[0] => c
)