<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Final Keyword</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.magic.html">Magic Methods</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.cloning.html">Object Cloning</a></div> <div class="up"><a href="language.oop5.html">Classes and Objects</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><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 <em class="emphasis">final</em>. If the class itself is being defined final then it cannot be extended. </p> <p class="para"> <div class="example" id="example-223"> <p><strong>Example #1 Final methods example</strong></p> <div class="example-contents"> <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 class="para"> <div class="example" id="example-224"> <p><strong>Example #2 Final class example</strong></p> <div class="example-contents"> <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> <blockquote class="note"><p><strong class="note">Note</strong>: <span class="simpara"> Properties cannot be declared final, only classes and methods may be declared as final. </span> </p></blockquote> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.magic.html">Magic Methods</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.cloning.html">Object Cloning</a></div> <div class="up"><a href="language.oop5.html">Classes and Objects</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>