📄 language.oop5.reflection.html
字号:
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">interface </span><span style="color: #0000BB">Reflector<br /></span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">string __toString</span><span style="color: #007700">()<br /> public static </span><span style="color: #0000BB">string export</span><span style="color: #007700">()<br />}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> </div> <div id="language.oop5.reflection.reflectionexception" class="sect2"> <h3 class="title"><b class="classname">ReflectionException</b></h3> <p class="para"> <b class="classname">ReflectionException</b> extends the standard <a href="language.exceptions.html" class="link">Exception</a> and is thrown by Reflection API. No specific methods or properties are introduced. </p> </div> <div id="language.oop5.reflection.reflectionfunction" class="sect2"> <h3 class="title"><b class="classname">ReflectionFunction</b></h3> <p class="para"> The <b class="classname">ReflectionFunction</b> class lets you reverse-engineer functions. </p> <div class="informalexample"> <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">ReflectionFunction </span><span style="color: #007700">extends </span><span style="color: #0000BB">ReflectionFunctionAbstract </span><span style="color: #007700">implements </span><span style="color: #0000BB">Reflector<br /></span><span style="color: #007700">{<br /> final private </span><span style="color: #0000BB">__clone</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">void __construct</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">string __toString</span><span style="color: #007700">()<br /> public static </span><span style="color: #0000BB">string export</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">, </span><span style="color: #0000BB">bool </span><span style="color: #007700">return)<br /> public </span><span style="color: #0000BB">string getName</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isInternal</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isDisabled</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">mixed getClosure</span><span style="color: #007700">() </span><span style="color: #FF8000">/* As of PHP 5.3.0 */<br /> </span><span style="color: #007700">public </span><span style="color: #0000BB">bool isUserDefined</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">string getFileName</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">int getStartLine</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">int getEndLine</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">string getDocComment</span><span style="color: #007700">()<br /> public array </span><span style="color: #0000BB">getStaticVariables</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">mixed invoke</span><span style="color: #007700">([</span><span style="color: #0000BB">mixed args </span><span style="color: #007700">[, ...]])<br /> public </span><span style="color: #0000BB">mixed invokeArgs</span><span style="color: #007700">(array </span><span style="color: #0000BB">args</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">bool returnsReference</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">ReflectionParameter</span><span style="color: #007700">[] </span><span style="color: #0000BB">getParameters</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">int getNumberOfParameters</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">int getNumberOfRequiredParameters</span><span style="color: #007700">()<br />}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> <p class="para"> Parent class <b class="classname">ReflectionFunctionAbstract</b> has the same methods except <b>invoke()</b>, <b>invokeArgs()</b>, <b>export()</b> and <b>isDisabled()</b>. </p> <blockquote><p><b class="note">Note</b>: <span class="simpara"> <b>getNumberOfParameters()</b> and <b>getNumberOfRequiredParameters()</b> were added in PHP 5.0.3, while <b>invokeArgs()</b> was added in PHP 5.1.0. </span> </p></blockquote> <p class="para"> To introspect a function, you will first have to create an instance of the <b class="classname">ReflectionFunction</b> class. You can then call any of the above methods on this instance. </p> <div class="example"> <p><b>Example #2 Using the <b class="classname">ReflectionFunction</b> class</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">/**<br /> * A simple counter<br /> *<br /> * @return int<br /> */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">counter</span><span style="color: #007700">() <br />{<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 /> return </span><span style="color: #0000BB">$c</span><span style="color: #007700">++;<br />}<br /><br /></span><span style="color: #FF8000">// Create an instance of the ReflectionFunction class<br /></span><span style="color: #0000BB">$func </span><span style="color: #007700">= new </span><span style="color: #0000BB">ReflectionFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">'counter'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Print out basic information<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(<br /> </span><span style="color: #DD0000">"===> The %s function '%s'\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">" declared in %s\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">" lines %d to %d\n"</span><span style="color: #007700">,<br /> </span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">isInternal</span><span style="color: #007700">() ? </span><span style="color: #DD0000">'internal' </span><span style="color: #007700">: </span><span style="color: #DD0000">'user-defined'</span><span style="color: #007700">,<br /> </span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">getName</span><span style="color: #007700">(),<br /> </span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">getFileName</span><span style="color: #007700">(),<br /> </span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">getStartLine</span><span style="color: #007700">(),<br /> </span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">getEndline</span><span style="color: #007700">()<br />);<br /><br /></span><span style="color: #FF8000">// Print documentation comment<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"---> Documentation:\n %s\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">getDocComment</span><span style="color: #007700">(), </span><span style="color: #0000BB">1</span><span style="color: #007700">));<br /><br /></span><span style="color: #FF8000">// Print static variables if existant<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">$statics </span><span style="color: #007700">= </span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">getStaticVariables</span><span style="color: #007700">())<br />{<br /> </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"---> Static variables: %s\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$statics</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />}<br /><br /></span><span style="color: #FF8000">// Invoke the function<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"---> Invokation results in: "</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$func</span><span style="color: #007700">-></span><span style="color: #0000BB">invoke</span><span style="color: #007700">());<br /><br /><br /></span><span style="color: #FF8000">// you may prefer to use the export() method<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"\nReflectionFunction::export() results:\n"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">ReflectionFunction</span><span style="color: #007700">::</span><span style="color: #0000BB">export</span><span style="color: #007700">(</span><span style="color: #DD0000">'counter'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> <blockquote><p><b class="note">Note</b>: <span class="simpara"> The method <b>invoke()</b> accepts a variable number of arguments which are passed to the function just as in <a href="function.call-user-func.html" class="function">call_user_func()</a>. </span> </p></blockquote> </div> <div id="language.oop5.reflection.reflectionparameter" class="sect2">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -