<!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>Traits</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.interfaces.html">Object Interfaces</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.overloading.html">Overloading</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.traits" class="sect1"> <h2 class="title">Traits</h2> <p class="para"> As of PHP 5.4.0, PHP implements a method of code reuse called Traits. </p> <p class="para"> Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins. </p> <p class="para"> A Trait is similar to a class, but only intended to group functionality in a fine-grained and consistent way. It is not possible to instantiate a Trait on its own. It is an addition to traditional inheritance and enables horizontal composition of behavior; that is, the application of class members without requiring inheritance. </p> <div class="example" id="language.oop5.traits.basicexample"> <p><strong>Example #1 Trait example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait ezcReflectionReturnInfo </span><span style="color: #007700">{<br /> function </span><span style="color: #0000BB">getReturnType</span><span style="color: #007700">() { </span><span style="color: #FF8000">/*1*/ </span><span style="color: #007700">}<br /> function </span><span style="color: #0000BB">getReturnDescription</span><span style="color: #007700">() { </span><span style="color: #FF8000">/*2*/ </span><span style="color: #007700">}<br />}<br /><br />class </span><span style="color: #0000BB">ezcReflectionMethod </span><span style="color: #007700">extends </span><span style="color: #0000BB">ReflectionMethod </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">ezcReflectionReturnInfo</span><span style="color: #007700">;<br /> </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /><br />class </span><span style="color: #0000BB">ezcReflectionFunction </span><span style="color: #007700">extends </span><span style="color: #0000BB">ReflectionFunction </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">ezcReflectionReturnInfo</span><span style="color: #007700">;<br /> </span><span style="color: #FF8000">/* ... */<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="sect2" id="language.oop5.traits.precedence"> <h3 class="title">Precedence</h3> <p class="para"> An inherited member from a base class is overridden by a member inserted by a Trait. The precedence order is that members from the current class override Trait methods, which in return override inherited methods. </p> <div class="example" id="language.oop5.traits.precedence.examples.ex1"> <p><strong>Example #2 Precedence Order Example</strong></p> <div class="example-contents"><p> An inherited method from a base class is overridden by the method inserted into MyHelloWorld from the SayWorld Trait. The behavior is the same for methods defined in the MyHelloWorld class. The precedence order is that methods from the current class override Trait methods, which in turn override methods from the base class. </p></div> <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">Base </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello '</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">trait SayWorld </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">sayHello</span><span style="color: #007700">();<br /> echo </span><span style="color: #DD0000">'World!'</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">MyHelloWorld </span><span style="color: #007700">extends </span><span style="color: #0000BB">Base </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">SayWorld</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyHelloWorld</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayHello</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> Hello World! </pre></div> </div> </div> <div class="example" id="language.oop5.traits.precedence.examples.ex2"> <p><strong>Example #3 Alternate Precedence Order Example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait HelloWorld </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello World!'</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">TheWorldIsNotEnough </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">HelloWorld</span><span style="color: #007700">;<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello Universe!'</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">TheWorldIsNotEnough</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayHello</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> Hello Universe! </pre></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.multiple"> <h3 class="title">Multiple Traits</h3> <p class="para"> Multiple Traits can be inserted into a class by listing them in the use statement, separated by commas. </p> <div class="example" id="language.oop5.traits.multiple.ex1"> <p><strong>Example #4 Multiple Traits Usage</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait Hello </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello '</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">trait World </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayWorld</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'World'</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">MyHelloWorld </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">Hello</span><span style="color: #007700">, </span><span style="color: #0000BB">World</span><span style="color: #007700">;<br /> public function </span><span style="color: #0000BB">sayExclamationMark</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'!'</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyHelloWorld</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayHello</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayWorld</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayExclamationMark</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> Hello World! </pre></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.conflict"> <h3 class="title">Conflict Resolution</h3> <p class="para"> If two Traits insert a method with the same name, a fatal error is produced, if the conflict is not explicitly resolved. </p> <p class="para"> To resolve naming conflicts between Traits used in the same class, the <em>insteadof</em> operator needs to be used to chose exactly one of the conflicting methods. </p> <p class="para"> Since this only allows one to exclude methods, the <em>as</em> operator can be used to allow the inclusion of one of the conflicting methods under another name. </p> <div class="example" id="language.oop5.traits.conflict.ex1"> <p><strong>Example #5 Conflict Resolution</strong></p> <div class="example-contents"><p> In this example, Talker uses the traits A and B. Since A and B have conflicting methods, it defines to use the variant of smallTalk from trait B, and the variant of bigTalk from trait A. </p></div> <div class="example-contents"><p> The Aliased_Talker makes use of the <em>as</em> operator to be able to use B's bigTalk implementation under an additional alias <em>talk</em>. </p></div> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait A </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">smallTalk</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'a'</span><span style="color: #007700">;<br /> }<br /> public function </span><span style="color: #0000BB">bigTalk</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'A'</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">trait B </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">smallTalk</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'b'</span><span style="color: #007700">;<br /> }<br /> public function </span><span style="color: #0000BB">bigTalk</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'B'</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">Talker </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #0000BB">B </span><span style="color: #007700">{<br /> </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">smallTalk insteadof A</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">A</span><span style="color: #007700">::</span><span style="color: #0000BB">bigTalk insteadof B</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">Aliased_Talker </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">A</span><span style="color: #007700">, </span><span style="color: #0000BB">B </span><span style="color: #007700">{<br /> </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">smallTalk insteadof A</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">A</span><span style="color: #007700">::</span><span style="color: #0000BB">bigTalk insteadof B</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">B</span><span style="color: #007700">::</span><span style="color: #0000BB">bigTalk </span><span style="color: #007700">as </span><span style="color: #0000BB">talk</span><span style="color: #007700">;<br /> }<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.visibility"> <h3 class="title">Changing Method Visibility</h3> <p class="para"> Using the <em>as</em> syntax, one can also adjust the visibility of the method in the exhibiting class. </p> <div class="example" id="language.oop5.traits.visibility.ex1"> <p><strong>Example #6 Changing Method Visibility</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait HelloWorld </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello World!'</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #FF8000">// Change visibility of sayHello<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass1 </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">HelloWorld </span><span style="color: #007700">{ </span><span style="color: #0000BB">sayHello </span><span style="color: #007700">as protected; }<br />}<br /><br /></span><span style="color: #FF8000">// Alias method with changed visibility<br />// sayHello visibility not changed<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass2 </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">HelloWorld </span><span style="color: #007700">{ </span><span style="color: #0000BB">sayHello </span><span style="color: #007700">as private </span><span style="color: #0000BB">myPrivateHello</span><span style="color: #007700">; }<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.composition"> <h3 class="title">Traits Composed from Traits</h3> <p class="para"> Just as classes can make use of traits, so can other traits. By using one or more traits in a trait definition, it can be composed partially or entirely of the members defined in those other traits. </p> <div class="example" id="language.oop5.traits.composition.ex1"> <p><strong>Example #7 Traits Composed from Traits</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait Hello </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHello</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello '</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">trait World </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayWorld</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'World!'</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">trait HelloWorld </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">Hello</span><span style="color: #007700">, </span><span style="color: #0000BB">World</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">MyHelloWorld </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">HelloWorld</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyHelloWorld</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayHello</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">sayWorld</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> Hello World! </pre></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.abstract"> <h3 class="title">Abstract Trait Members</h3> <p class="para"> Traits support the use of abstract methods in order to impose requirements upon the exhibiting class. </p> <div class="example" id="language.oop5.traits.abstract.ex1"> <p><strong>Example #8 Express Requirements by Abstract Methods</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait Hello </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">sayHelloWorld</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">'Hello'</span><span style="color: #007700">.</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">getWorld</span><span style="color: #007700">();<br /> }<br /> abstract public function </span><span style="color: #0000BB">getWorld</span><span style="color: #007700">();<br />}<br /><br />class </span><span style="color: #0000BB">MyHelloWorld </span><span style="color: #007700">{<br /> private </span><span style="color: #0000BB">$world</span><span style="color: #007700">;<br /> use </span><span style="color: #0000BB">Hello</span><span style="color: #007700">;<br /> public function </span><span style="color: #0000BB">getWorld</span><span style="color: #007700">() {<br /> return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">world</span><span style="color: #007700">;<br /> }<br /> public function </span><span style="color: #0000BB">setWorld</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">world </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br /> }<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.static"> <h3 class="title">Static Trait Members</h3> <p class="para"> Traits can define both static members and static methods. </p> <div class="example" id="language.oop5.traits.static.ex1"> <p><strong>Example #9 Static Variables</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait Counter </span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">inc</span><span style="color: #007700">() {<br /> static </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">$c </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$c</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">C1 </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">Counter</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">C2 </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">Counter</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">C1</span><span style="color: #007700">(); </span><span style="color: #0000BB">$o</span><span style="color: #007700">-></span><span style="color: #0000BB">inc</span><span style="color: #007700">(); </span><span style="color: #FF8000">// echo 1<br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">C2</span><span style="color: #007700">(); </span><span style="color: #0000BB">$p</span><span style="color: #007700">-></span><span style="color: #0000BB">inc</span><span style="color: #007700">(); </span><span style="color: #FF8000">// echo 1<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="example" id="language.oop5.traits.static.ex2"> <p><strong>Example #10 Static Methods</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait StaticExample </span><span style="color: #007700">{<br /> public static function </span><span style="color: #0000BB">doSomething</span><span style="color: #007700">() {<br /> return </span><span style="color: #DD0000">'Doing something'</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">Example </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">StaticExample</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">Example</span><span style="color: #007700">::</span><span style="color: #0000BB">doSomething</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </div> <div class="sect2" id="language.oop5.traits.properties"> <h3 class="title">Properties</h3> <p class="para"> Traits can also define properties. </p> <div class="example" id="language.oop5.traits.properties.example"> <p><strong>Example #11 Defining Properties</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait PropertiesTrait </span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$x </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">PropertiesExample </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">PropertiesTrait</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$example </span><span style="color: #007700">= new </span><span style="color: #0000BB">PropertiesExample</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$example</span><span style="color: #007700">-></span><span style="color: #0000BB">x</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <p class="para"> If a trait defines a property then a class can not define a property with the same name, otherwise an error is issued. It is an <strong><code>E_STRICT</code></strong> if the class definition is compatible (same visibility and initial value) or fatal error otherwise. </p> <div class="example" id="language.oop5.traits.properties.conflicts"> <p><strong>Example #12 Conflict Resolution</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />trait PropertiesTrait </span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$same </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /> public </span><span style="color: #0000BB">$different </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">PropertiesExample </span><span style="color: #007700">{<br /> use </span><span style="color: #0000BB">PropertiesTrait</span><span style="color: #007700">;<br /> public </span><span style="color: #0000BB">$same </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">; </span><span style="color: #FF8000">// Strict Standards<br /> </span><span style="color: #007700">public </span><span style="color: #0000BB">$different </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">; </span><span style="color: #FF8000">// Fatal error<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> </div> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.interfaces.html">Object Interfaces</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.overloading.html">Overloading</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>