Source of: /manual/en/language.operators.type.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'en',
),
'this' =>
array (
0 => 'language.operators.type.php',
1 => 'Type Operators',
),
'up' =>
array (
0 => 'language.operators.php',
1 => 'Operators',
),
'prev' =>
array (
0 => 'language.operators.array.php',
1 => 'Array Operators',
),
'next' =>
array (
0 => 'language.control-structures.php',
1 => 'Control Structures',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="language.operators.type" class="sect1">
<h2 class="title">Type Operators</h2>
<p class="para">
<i>instanceof</i> is used to determine whether a PHP variable
is an instantiated object of a certain
<a href="language.oop5.basic.php#language.oop5.basic.class" class="link">class</a>:
</p><div class="example">
<p><b>Example #1 Using instanceof with classes</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br />}<br /><br />class </span><span style="color: #0000BB">NotMyClass<br /></span><span style="color: #007700">{<br />}<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">NotMyClass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
bool(true)
bool(false)
</pre></div>
</div>
</div><p>
</p>
<p class="para">
<i>instanceof</i> can also be used to determine whether a variable
is an instantiated object of a class that inherits from a parent class:
</p><div class="example">
<p><b>Example #2 Using <i>instanceof</i> with inherited classes</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">ParentClass<br /></span><span style="color: #007700">{<br />}<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">extends </span><span style="color: #0000BB">ParentClass<br /></span><span style="color: #007700">{<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">ParentClass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
bool(true)
bool(true)
</pre></div>
</div>
</div><p>
</p>
<p class="para">
To check if an object is <em class="emphasis">not</em> an instanceof a class, the
<a href="language.operators.logical.php" class="link">logical <i>not</i>
operator</a> can be used.
</p><div class="example">
<p><b>Example #3 Using <i>instanceof</i> to check if object is <em class="emphasis">not</em> an
instanceof a class</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(!(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
bool(true)
</pre></div>
</div>
</div><p>
</p>
<p class="para">
Lastly, <i>instanceof</i> can also be used to determine whether
a variable is an instantiated object of a class that implements an
<a href="language.oop5.interfaces.php" class="link">interface</a>:
</p><div class="example">
<p><b>Example #4 Using <i>instanceof</i> for class</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">interface </span><span style="color: #0000BB">MyInterface<br /></span><span style="color: #007700">{<br />}<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">implements </span><span style="color: #0000BB">MyInterface<br /></span><span style="color: #007700">{<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">MyInterface</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
bool(true)
bool(true)
</pre></div>
</div>
</div><p>
</p>
<p class="para">
Although <i>instanceof</i> is usually used with a literal classname,
it can also be used with another object or a string variable:
</p><div class="example">
<p><b>Example #5 Using <i>instanceof</i> with other variables</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">interface </span><span style="color: #0000BB">MyInterface<br /></span><span style="color: #007700">{<br />}<br /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">implements </span><span style="color: #0000BB">MyInterface<br /></span><span style="color: #007700">{<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #DD0000">'MyClass'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #DD0000">'NotMyClass'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">$b</span><span style="color: #007700">); </span><span style="color: #FF8000">// $b is an object of class MyClass<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">$c</span><span style="color: #007700">); </span><span style="color: #FF8000">// $c is a string 'MyClass'<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">$d</span><span style="color: #007700">); </span><span style="color: #FF8000">// $d is a string 'NotMyClass'<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
bool(true)
bool(true)
bool(false)
</pre></div>
</div>
</div><p>
</p>
<p class="para">
There are a few pitfalls to be aware of. Before PHP version 5.1.0,
<i>instanceof</i> would call <a href="language.oop5.autoload.php" class="link">__autoload()</a>
if the class name did not exist. In addition, if the class was not loaded,
a fatal error would occur. This can be worked around by using a dynamic
class reference, or a string variable containing the class name:
</p><div class="example">
<p><b>Example #6 Avoiding classname lookups and fatal errors with <i>instanceof</i> in PHP 5.0</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br />$d </span><span style="color: #007700">= </span><span style="color: #DD0000">'NotMyClass'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">instanceof </span><span style="color: #0000BB">$d</span><span style="color: #007700">); </span><span style="color: #FF8000">// no fatal error here<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
bool(false)
</pre></div>
</div>
</div><p>
</p>
<p class="simpara">
The <i>instanceof</i> operator was introduced in PHP 5.
Before this time <a href="function.is-a.php" class="function">is_a()</a> was used but
<a href="function.is-a.php" class="function">is_a()</a> has since been deprecated in favor of
<i>instanceof</i>. Note that as of PHP 5.3.0,
<a href="function.is-a.php" class="function">is_a()</a> is no longer deprecated.
</p>
<p class="para">
See also <a href="function.get-class.php" class="function">get_class()</a> and
<a href="function.is-a.php" class="function">is_a()</a>.
</p>
</div><?php manual_footer(); ?>