At least in PHP 5.1.6 this works as well with Interfaces.
<?php
interface test {
public function A();
}
class TestImplementor implements test {
public function A () {
print "A";
}
}
$testImpl = new TestImplementor();
var_dump(is_a($testImpl,'test'));
?>
will return true
is_a
(PHP 4 >= 4.2.0, PHP 5)
is_a — Checks if the object is of this class or has this class as one of its parents
Beschreibung
bool is_a
( object
$object
, string $class_name
[, bool $allow_string = FALSE
] )
Checks if the given object is of this class or has
this class as one of its parents.
Parameter-Liste
-
object -
The tested object
-
class_name -
The class name
-
allow_string -
If this parameter set to false, string class name as
objectis not allowed. This also prevents from calling autoloader if the class doesn't exist.
Rückgabewerte
Returns TRUE if the object is of this class or has this class as one of
its parents, FALSE otherwise.
Changelog
| Version | Beschreibung |
|---|---|
| 5.3.9 |
Added allow_string parameter
|
| 5.3.0 |
This function is no longer deprecated, and will therefore
no longer throw E_STRICT warnings.
|
| 5.0.0 |
This function became deprecated in favour of the
instanceof
operator. Calling this function will result in an
E_STRICT warning.
|
Beispiele
Beispiel #1 is_a() example
<?php
// define a class
class WidgetFactory
{
var $oink = 'moo';
}
// create a new object
$WF = new WidgetFactory();
if (is_a($WF, 'WidgetFactory')) {
echo "yes, \$WF is still a WidgetFactory\n";
}
?>
Beispiel #2 Using the instanceof operator in PHP 5
<?php
if ($WF instanceof WidgetFactory) {
echo 'Yes, $WF is a WidgetFactory';
}
?>
Siehe auch
- get_class() - Ermittelt den Klassennamen eines Objekts
- get_parent_class() - Gibt den Namen der Elternklasse eines Objektes zurück
- is_subclass_of() - Prüft ob ein Objekt von der angegebenen Klasse abstammt
is_a
p dot scheit at zweipol dot net
16-Jan-2007 10:44
16-Jan-2007 10:44
martin dunisch
13-Feb-2006 09:02
13-Feb-2006 09:02
Workaround for older PHP-Versions:
function is_a($anObject, $aClass) {
return get_class($anObject) == strtolower($aClass)
or is_subclass_of($anObject, $aClass);
}
dead dot screamer at seznam dot cz
06-Feb-2006 08:44
06-Feb-2006 08:44
Why I test if class `A` inherit class `B` or implements interface `C` before I create class `A`?
<?
//That isn't work:
//1. function is_A()
if(is_A('A','B'))$a=new A;
if(is_A('A','C'))$a=new A;
//2. operator instanceOf
if(A instanceOf B)$a=new A;
if(A instanceOf C)$a=new A;
?>
zabmilenko at hotmail dot com
08-Oct-2005 02:20
08-Oct-2005 02:20
In the below example, the object and class name need to be reversed. Sorry.
Wrong:
'ObjectA', $objecta
Right:
$objecta, 'ObjectA'
zabmilenko at hotmail dot com
08-Oct-2005 02:18
08-Oct-2005 02:18
Lazy Instantiation using is_a() and php5
<?php
class ObjectA
{
public function print_line($text)
{
print $text . "\n";
}
}
class ObjectB
{
public function ObjectA()
{
static $objecta;
if (!is_a('ObjectA', $objecta))
{
$objecta = new ObjectA;
}
return $objecta;
}
}
$obj = new ObjectB;
$obj->ObjectA()->print_line('testing, 1 2 3');
?>
In the above example, ObjectA is not instantiated until needed by ObjectB. Then ObjectB can continually use it's creation as needed without reinstantiating it.
There are other ways, but I like this one :-)
cesoid at yahoo dot com
06-Oct-2005 04:01
06-Oct-2005 04:01
is_a returns TRUE for instances of children of the class.
For example:
class Animal
{}
class Dog extends Animal
{}
$test = new Dog();
In this example is_a($test, "Animal") would evaluate to TRUE as well as is_a($test, "Dog").
This seemed intuitive to me, but did not seem to be documented.
aidan at php dot net
21-May-2004 04:11
21-May-2004 04:11
This functionality is now implemented in the PEAR package PHP_Compat.
More information about using this function without upgrading your version of PHP can be found on the below link:
http://pear.php.net/package/PHP_Compat