downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

method_exists> <is_a
Last updated: Fri, 20 May 2011

view this page in

is_subclass_of

(PHP 4, PHP 5)

is_subclass_ofVerifica si el objeto tiene esta clase como uno de sus padres

Descripción

bool is_subclass_of ( mixed $object , string $class_name )

Verifica si el object dado tiene la clase class_name como uno de sus padres.

Parámetros

object

Un nombre de clase o una instancia de objeto

class_name

El nombre de clase

Valores devueltos

Esta función devuelve TRUE si el objeto object pertenece a una clase que sea subclase de class_name, FALSE de lo contrario.

Historial de cambios

Versión Descripción
5.0.3 Es posible especificar también el parámetro object como una cadena (el nombre de la clase)

Ejemplos

Example #1 Ejemplo de is_subclass_of()

<?php
// definir una clase
class FabricaWidget
{
  var 
$oink 'moo';
}

// definir una clase hija
class Hijo_FabricaWidget extends FabricaWidget
{
  var 
$oink 'oink';
}

// crear un nuevo objeto
$FW = new FabricaWidget();
$HFW = new Hijo_FabricaWidget();

if (
is_subclass_of($HFW'FabricaWidget')) {
  echo 
"si, \$HFW es una sub-clase de FabricaWidget\n";
} else {
  echo 
"no, \$HFW no es una sub-clase de FabricaWidget\n";
}


if (
is_subclass_of($FW'FabricaWidget')) {
  echo 
"si, \$FW es una sub-clase de FabricaWidget\n";
} else {
  echo 
"no, \$FW no es una sub-clase de FabricaWidget\n";
}


// usable sólo desde PHP 5.0.3
if (is_subclass_of('Hijo_FabricaWidget''FabricaWidget')) {
  echo 
"si, Hijo_FabricaWidget es una sub-clase de FabricaWidget\n";
} else {
  echo 
"no, Hijo_FabricaWidget no es una sub-clase de FabricaWidget\n";
}
?>

El resultado del ejemplo sería:

si, $HFW es una sub-clase de FabricaWidget
no, $FW no es una sub-clase de FabricaWidget
si, Hijo_FabricaWidget es una sub-clase de FabricaWidget

Notas

Note:

Esta función cargará cualquier autoloaders registrado si la clase todavía no existe.

Ver también

  • get_class() - Devuelve el nombre de la clase de un objeto
  • get_parent_class() - Recupera el nombre de la clase padre de un objeto o clase
  • is_a() - Comprueba si un objeto es de una clase o tiene esta clase como uno de sus padres



method_exists> <is_a
Last updated: Fri, 20 May 2011
 
add a note add a note User Contributed Notes is_subclass_of
nicholas at aquarionics dot com 17-Mar-2009 09:02
This might be useful to someone, so:

If you're using Autoload, you should be aware that this will attempt to autoload $classname if it isn't already loaded. I discovered this when I had something using is_subclass_of inside an error thrown by autoload, which then recursed until it ran out of memory.
Damien Bezborodov 17-Mar-2009 12:55
If you need something similar to is_subclass_of() to determine if a class implements an interface before instantiating it, use reflection:

<?php

interface A_Interface {}
class
A implements A_Interface {}

$reflectionA = new ReflectionClass('A');
var_dump(
   
$reflectionA->implementsInterface('A_Interface')
);

?>
bool(true)
kostyl_kostyl gav-gav mail point ru 07-Mar-2009 11:08
<?php
interface I {
}
class
A implements I {
}
class
B extends {
}
if (
is_subclass_of('A', 'I')) {
    echo
'good<br>';
}
else {
    echo
'bad<br>';
}
if (
is_subclass_of('B', 'I')) {
    echo
'good<br>';
}
else {
    echo
'bad<br>';
}
if (
is_subclass_of('B', 'A')) {
    echo
'good<br>';
}
else {
    echo
'bad<br>';
}
?>

result:
bad <- you must to describe intermediate class B to be good
good
good
jm 01-Oct-2008 03:02
It would appear that is_subclass_of is case insensitive unlike get_class in php5.
i.e.

<?php
class fooBar {}
class
bar extends fooBar {}

assert(get_class(new fooBar()) == "fooBar");
assert(is_subclass_of(new bar(), "foobar") == true);
?>

i run across this while migrating some code from php4 to php5 and the code would only half-the-time break.
Ondra Zizka 13-Oct-2006 12:31
For PHP4:

<?php
/** Returns whether specified class is subclass of the other class. */
function is_subclass($sClass, $sExpectedParentClass){
    do if(
$sExpectedParentClass === $sClass ) return true;
    while(
false != ($sClass = get_parent_class($sClass)) );
    return
false;
}
// Test:
class A {} class B extends A {} class C extends B {} echo (int) is_subclass('C', 'A');
?>
gunniboyh at web dot de 20-May-2006 01:16
is_subclass_of() works also with classes between the class of obj and the superclass.

example:
<?php
class A {};
class
B extends A {};
class
C extends B {};

$foo=new C();
echo ((
is_subclass_of($foo,'A')) ? 'true' : 'false');
?>

echoes 'true' .
01-Oct-2005 01:32
this function does not check interfaces, unlike instanceof operator.
youcantryreachingme at REMOVEME dot hotmail dot com 22-Mar-2005 02:15
A bug report at http://pear.php.net/bugs/bug.php?id=2975 indicates that the "is_subclass_of" function can return the error message:

Warning: Unknown class passed as parameter

in the event that the class represented by the second argument hasn't yet been instantiated.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites