📄 language.oop5.magic.html
字号:
</code></div> </div> </div> </div> <div id="language.oop5.magic.tostring" class="sect2"> <h3 class="title"><i>__toString</i></h3> <p class="para"> The <i>__toString</i> method allows a class to decide how it will react when it is converted to a string. </p> <div class="example"> <p><b>Example #2 Simple example</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">// Declare a simple class<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">TestClass<br /></span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br /><br /> public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">foo </span><span style="color: #007700">= </span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br /> }<br /><br /> public function </span><span style="color: #0000BB">__toString</span><span style="color: #007700">() {<br /> return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$class </span><span style="color: #007700">= new </span><span style="color: #0000BB">TestClass</span><span style="color: #007700">(</span><span style="color: #DD0000">'Hello'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$class</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"><pre><div class="cdata"><pre>Hello</pre></div> </pre></div> </div> <p class="para"> It is worth noting that before PHP 5.2.0 the <i>__toString</i> method was only called when it was directly combined with <a href="function.echo.html" class="function">echo()</a> or <a href="function.print.html" class="function">print()</a>. Since PHP 5.2.0, it is called in any string context (e.g. in <a href="function.printf.html" class="function">printf()</a> with <i>%s</i> modifier) but not in other types contexts (e.g. with <i>%d</i> modifier). Since PHP 5.2.0, converting objects without <i>__toString</i> method to string would cause <b><tt>E_RECOVERABLE_ERROR</tt></b>. </p> </div> <div id="language.oop5.magic.set-state" class="sect2"> <h3 class="title"><i>__set_state</i></h3> <p class="para"> This <a href="language.oop5.static.html" class="link">static</a> method is called for classes exported by <a href="function.var-export.html" class="function">var_export()</a> since PHP 5.1.0. </p> <p class="para"> The only parameter of this method is an array containing exported properties in the form <i>array('property' => value, ...)</i>. </p> <div class="example"> <p><b>Example #3 Using <i>__set_state</i> (since PHP 5.1.0)</b></p> <div class="example-contents"><div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB"><?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$var1</span><span style="color: #007700">;<br /> public </span><span style="color: #0000BB">$var2</span><span style="color: #007700">;<br /><br /> public static function </span><span style="color: #0000BB">__set_state</span><span style="color: #007700">(</span><span style="color: #0000BB">$an_array</span><span style="color: #007700">) </span><span style="color: #FF8000">// As of PHP 5.1.0<br /> </span><span style="color: #007700">{<br /> </span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br /> </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-></span><span style="color: #0000BB">var1 </span><span style="color: #007700">= </span><span style="color: #0000BB">$an_array</span><span style="color: #007700">[</span><span style="color: #DD0000">'var1'</span><span style="color: #007700">];<br /> </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-></span><span style="color: #0000BB">var2 </span><span style="color: #007700">= </span><span style="color: #0000BB">$an_array</span><span style="color: #007700">[</span><span style="color: #DD0000">'var2'</span><span style="color: #007700">];<br /> return </span><span style="color: #0000BB">$obj</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-></span><span style="color: #0000BB">var1 </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a</span><span style="color: #007700">-></span><span style="color: #0000BB">var2 </span><span style="color: #007700">= </span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br /><br />eval(</span><span style="color: #DD0000">'$b = ' </span><span style="color: #007700">. </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">) . </span><span style="color: #DD0000">';'</span><span style="color: #007700">); </span><span style="color: #FF8000">// $b = A::__set_state(array(<br /> // 'var1' => 5,<br /> // 'var2' => 'foo',<br /> // ));<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">);<br /><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"><pre><div class="cdata"><pre>object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo"}</pre></div> </pre></div> </div> </div> </div><hr /><div style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.patterns.html">Patterns</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.final.html">Final Keyword</a></div> <div class="up"><a href="language.oop5.html">Classes and Objects (PHP 5)</a></div> <div class="home"><a href="index.html">PHP Manual</a></div></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -