📄 language.oop5.reflection.html
字号:
<h3 class="title"><b class="classname">ReflectionParameter</b></h3> <p class="para"> The <b class="classname">ReflectionParameter</b> class retrieves information about a function's or method's parameters. </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">ReflectionParameter </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 </span><span style="color: #007700">function, </span><span style="color: #0000BB">string parameter</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">mixed </span><span style="color: #007700">function, </span><span style="color: #0000BB">mixed parameter</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 isPassedByReference</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">ReflectionClass getDeclaringClass</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">ReflectionClass getClass</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isArray</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool allowsNull</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isPassedByReference</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isOptional</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isDefaultValueAvailable</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">mixed getDefaultValue</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">int getPosition</span><span style="color: #007700">()<br />}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> <blockquote><p><b class="note">Note</b>: <b>getDefaultValue()</b>, <b>isDefaultValueAvailable()</b> and <b>isOptional()</b> were added in PHP 5.0.3, while <b>isArray()</b> was added in PHP 5.1.0. <b>getDeclaringFunction()</b> and <b>getPosition()</b> were added in PHP 5.2.3. <br /> </p></blockquote> <p class="para"> To introspect function parameters, you will first have to create an instance of the <b class="classname">ReflectionFunction</b> or <b class="classname">ReflectionMethod</b> classes and then use their <b>getParameters()</b> method to retrieve an array of parameters. </p> <div class="example"> <p><b>Example #3 Using the <b class="classname">ReflectionParameter</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: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$c</span><span style="color: #007700">) { }<br />function </span><span style="color: #0000BB">bar</span><span style="color: #007700">(</span><span style="color: #0000BB">Exception $a</span><span style="color: #007700">, &</span><span style="color: #0000BB">$b</span><span style="color: #007700">, </span><span style="color: #0000BB">$c</span><span style="color: #007700">) { }<br />function </span><span style="color: #0000BB">baz</span><span style="color: #007700">(</span><span style="color: #0000BB">ReflectionFunction $a</span><span style="color: #007700">, </span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) { }<br />function </span><span style="color: #0000BB">abc</span><span style="color: #007700">() { }<br /><br /></span><span style="color: #FF8000">// Create an instance of ReflectionFunction with the<br />// parameter given from the command line. <br /></span><span style="color: #0000BB">$reflect </span><span style="color: #007700">= new </span><span style="color: #0000BB">ReflectionFunction</span><span style="color: #007700">(</span><span style="color: #0000BB">$argv</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);<br /><br />echo </span><span style="color: #0000BB">$reflect</span><span style="color: #007700">;<br /><br />foreach (</span><span style="color: #0000BB">$reflect</span><span style="color: #007700">-></span><span style="color: #0000BB">getParameters</span><span style="color: #007700">() as </span><span style="color: #0000BB">$i </span><span style="color: #007700">=> </span><span style="color: #0000BB">$param</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">printf</span><span style="color: #007700">(<br /> </span><span style="color: #DD0000">"-- Parameter #%d: %s {\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">" Class: %s\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">" Allows NULL: %s\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">" Passed to by reference: %s\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">" Is optional?: %s\n"</span><span style="color: #007700">.<br /> </span><span style="color: #DD0000">"}\n"</span><span style="color: #007700">,<br /> </span><span style="color: #0000BB">$i</span><span style="color: #007700">, </span><span style="color: #FF8000">// $param->getPosition() can be used from PHP 5.2.3<br /> </span><span style="color: #0000BB">$param</span><span style="color: #007700">-></span><span style="color: #0000BB">getName</span><span style="color: #007700">(),<br /> </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">-></span><span style="color: #0000BB">getClass</span><span style="color: #007700">(), </span><span style="color: #0000BB">1</span><span style="color: #007700">),<br /> </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">-></span><span style="color: #0000BB">allowsNull</span><span style="color: #007700">(), </span><span style="color: #0000BB">1</span><span style="color: #007700">),<br /> </span><span style="color: #0000BB">var_export</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">-></span><span style="color: #0000BB">isPassedByReference</span><span style="color: #007700">(), </span><span style="color: #0000BB">1</span><span style="color: #007700">),<br /> </span><span style="color: #0000BB">$param</span><span style="color: #007700">-></span><span style="color: #0000BB">isOptional</span><span style="color: #007700">() ? </span><span style="color: #DD0000">'yes' </span><span style="color: #007700">: </span><span style="color: #DD0000">'no'<br /> </span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> </div> <div id="language.oop5.reflection.reflectionclass" class="sect2"> <h3 class="title"><b class="classname">ReflectionClass</b></h3> <p class="para"> The <b class="classname">ReflectionClass</b> class lets you reverse-engineer classes and interfaces. </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">ReflectionClass </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">mixed </span><span style="color: #007700">class, </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 isUserDefined</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isInstantiable</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool hasConstant</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">bool hasMethod</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">bool hasProperty</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 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 </span><span style="color: #0000BB">ReflectionMethod getConstructor</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">ReflectionMethod getMethod</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">ReflectionMethod</span><span style="color: #007700">[] </span><span style="color: #0000BB">getMethods</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">ReflectionProperty getProperty</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">ReflectionProperty</span><span style="color: #007700">[] </span><span style="color: #0000BB">getProperties</span><span style="color: #007700">()<br /> public array </span><span style="color: #0000BB">getConstants</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">mixed getConstant</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">ReflectionClass</span><span style="color: #007700">[] </span><span style="color: #0000BB">getInterfaces</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isInterface</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isAbstract</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isFinal</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">int getModifiers</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isInstance</span><span style="color: #007700">(</span><span style="color: #0000BB">stdclass object</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">stdclass newInstance</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed args</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">stdclass newInstanceArgs</span><span style="color: #007700">(array </span><span style="color: #0000BB">args</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">ReflectionClass getParentClass</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isSubclassOf</span><span style="color: #007700">(</span><span style="color: #0000BB">ReflectionClass </span><span style="color: #007700">class)<br /> public array </span><span style="color: #0000BB">getStaticProperties</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">mixed getStaticPropertyValue</span><span style="color: #007700">(</span><span style="color: #0000BB">string name </span><span style="color: #007700">[, </span><span style="color: #0000BB">mixed </span><span style="color: #007700">default])<br /> public </span><span style="color: #0000BB">void setStaticPropertyValue</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">, </span><span style="color: #0000BB">mixed value</span><span style="color: #007700">)<br /> public array </span><span style="color: #0000BB">getDefaultProperties</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool isIterateable</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">bool implementsInterface</span><span style="color: #007700">(</span><span style="color: #0000BB">string name</span><span style="color: #007700">)<br /> public </span><span style="color: #0000BB">ReflectionExtension getExtension</span><span style="color: #007700">()<br /> public </span><span style="color: #0000BB">string getExtensionName</span><span style="color: #007700">()<br />}<br /></span><span style="color: #0000BB">?></span></span></code></div> </div> </div> <blockquote><p><b class="note">Note</b>: <span class="simpara"> <b>hasConstant()</b>, <b>hasMethod()</b>, <b>hasProperty()</b>, <b>getStaticPropertyValue()</b> and <b>setStaticPropertyValue()</b> were added in PHP 5.1.0, while <b>newInstanceArgs()</b> was added in PHP 5.1.3. </span> </p></blockquote> <p class="para"> To introspect a class, you will first have to create an instance of the <b class="classname">ReflectionClass</b> class. You can then call any of the above methods on this instance.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -