Source of: /manual/en/language.oop5.final.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'en',
),
'this' =>
array (
0 => 'language.oop5.final.php',
1 => 'Final Keyword',
),
'up' =>
array (
0 => 'language.oop5.php',
1 => 'Classes and Objects',
),
'prev' =>
array (
0 => 'language.oop5.magic.php',
1 => 'Magic Methods',
),
'next' =>
array (
0 => 'language.oop5.cloning.php',
1 => 'Object Cloning',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="language.oop5.final" class="sect1">
<h2 class="title">Final Keyword</h2>
<p class="para">
PHP 5 introduces the final keyword, which prevents child classes from
overriding a method by prefixing the definition with final. If the class
itself is being defined final then it cannot be extended.
</p>
<p class="para">
</p><div class="example">
<p><b>Example #1 Final methods example</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">BaseClass </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"BaseClass::test() called\n"</span><span style="color: #007700">;<br /> }<br /> <br /> final public function </span><span style="color: #0000BB">moreTesting</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"BaseClass::moreTesting() called\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">ChildClass </span><span style="color: #007700">extends </span><span style="color: #0000BB">BaseClass </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">moreTesting</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"ChildClass::moreTesting() called\n"</span><span style="color: #007700">;<br /> }<br />}<br /></span><span style="color: #FF8000">// Results in Fatal error: Cannot override final method BaseClass::moreTesting()<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
<p class="para">
</p><div class="example">
<p><b>Example #2 Final class example</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">final class </span><span style="color: #0000BB">BaseClass </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"BaseClass::test() called\n"</span><span style="color: #007700">;<br /> }<br /><br /> </span><span style="color: #FF8000">// Here it doesn't matter if you specify the function as final or not<br /> </span><span style="color: #007700">final public function </span><span style="color: #0000BB">moreTesting</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"BaseClass::moreTesting() called\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">ChildClass </span><span style="color: #007700">extends </span><span style="color: #0000BB">BaseClass </span><span style="color: #007700">{<br />}<br /></span><span style="color: #FF8000">// Results in Fatal error: Class ChildClass may not inherit from final class (BaseClass)<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
<blockquote><p><b class="note">Note</b>:
<span class="simpara">
Properties cannot be declared final, only classes and methods
may be declared as final.
</span>
</p></blockquote>
</div><?php manual_footer(); ?>