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
[edit] Last updated: Fri, 25 May 2012

view this page in

is_subclass_of

(PHP 4, PHP 5)

is_subclass_ofDétermine si un objet est une sous-classe

Description

bool is_subclass_of ( mixed $object , string $class_name [, bool $allow_string = TRUE ] )

Vérifie si l'objet object a la classe class_name comme parents.

Liste de paramètres

object

Un nom de classe ou une instance d'un objet

class_name

Le nom de la classe

allow_string

Si ce paramètre est défini à FALSE, le nom de la classe sous forme de chaîne de caractère dans le paramètre object n'est pas autorisé. Ceci permet d'éviter d'appeler l'autoloader si la classe n'existe pas.

Valeurs de retour

Cette fonction retourne TRUE si l'objet object, appartient à une classe qui est une sous-classe de class_name, FALSE sinon.

Historique

Version Description
5.3.9 Ajout du paramètre allow_string.
5.0.3 vous devez également spécifier le paramètre object en tant que chaîne de caractères (le nom de la classe).

Exemples

Exemple #1 Exemple avec is_subclass_of()

<?php
// Définit une classe
class WidgetFactory
{
  var 
$oink 'moo';
}

// Définit une sous-classe
class WidgetFactory_Child extends WidgetFactory
{
  var 
$oink 'oink';
}

// Création d'un nouvel objet
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();

if (
is_subclass_of($WFC'WidgetFactory')) {
  echo 
"oui, \$WFC est une sous-classe de la classe WidgetFactory\n";
} else {
  echo 
"non, \$WFC n'est pas une sous-classe de la classe WidgetFactory\n";
}


if (
is_subclass_of($WF'WidgetFactory')) {
  echo 
"oui, \$WF est une sous-classe de la classe WidgetFactory\n";
} else {
  echo 
"non, \$WF n'est pas une sous-classe de la classe WidgetFactory\n";
}


// utilisable uniquement depuis PHP 5.0.3
if (is_subclass_of('WidgetFactory_Child''WidgetFactory')) {
  echo 
"oui, WidgetFactory_Child est une sous-classe de la classe WidgetFactory\n";
} else {
  echo 
"non, WidgetFactory_Child n'est pas une sous-classe de la classe WidgetFactory\n";
}
?>

L'exemple ci-dessus va afficher :

oui, $WFC est une sous-classe de la classe WidgetFactory
non, $WF n'est pas une sous-classe de la classe WidgetFactory
oui, WidgetFactory_Child est une sous-classe de la classe WidgetFactory

Notes

Note:

L'usage de cette fonction utilisera toutes les autoloaders enregistrés si la classe n'est pas encore connue.

Voir aussi

  • get_class() - Retourne la classe d'un objet
  • get_parent_class() - Retourne le nom de la classe parente d'un objet
  • is_a() - Vérifie si l'objet fait parti d'une classe ou a cette classe comme parents
  • class_parents() - Retourne la classe parente d'une classe



method_exists> <is_a
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes is_subclass_of
nicholas at aquarionics dot com 17-Mar-2009 01: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 16-Mar-2009 04: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 03: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 30-Sep-2008 08: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 05: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 06: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 06:32
this function does not check interfaces, unlike instanceof operator.
youcantryreachingme at REMOVEME dot hotmail dot com 21-Mar-2005 06: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 | sitemap | contact | advertising | mirror sites