"'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.)
get_parent_class
(PHP 4, PHP 5)
get_parent_class — Recupera el nombre de la clase padre para un objeto o clase
Descripción
Recupera el nombre de la clase padre para el objeto o clase.
Lista de parámetros
- objeto
-
El objeto a probar o el nombre de clase
Valores retornados
Devuelve el nombre de la clase padre de la clase de la cual objeto es una instancia o nombre.
Si es llamada sin un parámetro desde afuera de un objeto, esta función devuelve FALSE.
Registro de cambios
| Versión | Descripción |
|---|---|
| Antes de 5.1.0 | Si es llamada sin un parámetro desde afuera de un objeto, esta función hubiera devuelto NULL sin una advertencia. |
| A partir de 5.0.0 | El parámetro objeto es opcional si es llamado desde el método del objeto. |
| A partir de 4.0.5 | Si objeto es una cadena, devuelve el nombre de la clase padre de la clase con ese nombre. |
Ejemplos
Example #1 Uso de get_parent_class()
<?php
class padre {
function padre()
{
// implementa alguna lógica
}
}
class hijo extends padre {
function hijo()
{
echo "Soy el hijo de " , get_parent_class($this) , "\n";
}
}
class hijo2 extends padre {
function hijo2()
{
echo "Soy el hijo de " , get_parent_class('hijo2') , " también\n";
}
}
$foo = new hijo();
$bar = new hijo2();
?>
El resultado del ejemplo seria:
Soy el hijo de padre Soy el hijo de padre también
get_parent_class
ssb45 at cornell dot edu
14-May-2008 08:32
14-May-2008 08:32
marcus at synchromedia dot co dot uk
16-Apr-2008 09:08
16-Apr-2008 09:08
"If called without parameter outside object" What on earth does that mean?
What I can tell you, and that is not documented, is that if the object in question does not have an explicitly declared parent class, it does return boolean false. It doesn't for example return 'stdClass' on the basis that all objects are derived from that.
birkholz at web dot de
06-Oct-2005 05:01
06-Oct-2005 05:01
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
?>
matt-php at DONT-SPAM-ME dot bitdifferent dot com
01-Nov-2004 07:52
01-Nov-2004 07: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 06:44
07-Apr-2004 06: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
05-Apr-2003 07:48
05-Apr-2003 07: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 04:14
28-Jan-2002 04: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
)
