{"id":267,"date":"2010-11-21T01:55:10","date_gmt":"2010-11-21T00:55:10","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=267"},"modified":"2010-11-26T23:30:14","modified_gmt":"2010-11-26T22:30:14","slug":"reflection-teil-3-reflectionparameter","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/reflection-teil-3-reflectionparameter\/","title":{"rendered":"Reflection \u2013 Teil 3: ReflectionParameter"},"content":{"rendered":"<p>\n<b>Vorangegangene Teile:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/d-mueller.de\/blog\/reflection-teil-1-reflectionclass\/\">Teil 1: Einf\u00fchrung und ReflectionClass<\/a><\/li>\n<li><a href=\"https:\/\/d-mueller.de\/blog\/reflection-teil-2-reflectionmethod-und-reflectionfunction\/\">Teil 2: ReflectionMethod und ReflectionFunction<\/a><\/li>\n<\/ul>\n<p>Wie im letzten Teil 2 \u00fcber die <a href=\"https:\/\/d-mueller.de\/blog\/reflection-teil-2-reflectionmethod-und-reflectionfunction\/\">ReflectionMethod und die ReflectionFunction angedroht<\/a> soll es nun um die Parameter gehen, die man ebenfalls reflecten kann. Ob es sich dabei um die Parameter einer Funktion oder um die Parameter einer Methode handelt, spielt keine Rolle. Wie in allen anderen Teilen muss mal wieder ein Beispielcode herhalten:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nclass C\r\n{\r\n\tpublic function fct($a,$b,array $c = array(1,2,3))\r\n\t{}\r\n}\r\n<\/pre>\n<h3>Default-Wert des Parameters<\/h3>\n<p>Erstmal m\u00fcssen wir uns ein ReflectionParameter &#8211; Objekt ergattern. Das geht im &#8211; hier geschilderten &#8211; umst\u00e4ndlichsten Fall von der Klasse \u00fcber die Methode zu den Parametern. Falls wir keine Methode sondern eine normale Funktion behandeln w\u00fcrden, w\u00fcrden wir uns einen Schritt sparen k\u00f6nnen.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nprint_r($refparam-&gt;getDefaultValue());\r\n\/*\r\nArray\r\n(\r\n    [0] =&gt; 1\r\n    [1] =&gt; 2\r\n    [2] =&gt; 3\r\n)\r\n*\/\r\n<\/pre>\n<p>Solltet ihr euch erdreisten, einen nicht optionalen (=mit Default-Wert belegten) Parameter mit <i>getDefaultValue<\/i> zu penetrieren, fliegt euch eine ReflectionException <i>Parameter is not optional<\/i> um die Ohren.<\/p>\n<h3>Parameter-Name<\/h3>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nprint_r($refparam-&gt;getName()); \r\n\/\/c\r\n<\/pre>\n<h3>Parameter-Position<\/h3>\n<p>PHP beginnt freundlicherweise bei 0 zu z\u00e4hlen.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nprint_r($refparam-&gt;getPosition()); \r\n\/\/2\r\n<\/pre>\n<h3>Ist Parameter mit Default-Wert belegt?<\/h3>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nvar_dump($refparam-&gt;isDefaultValueAvailable()); \r\n\/\/bool(true)\r\n<\/pre>\n<h3>Ist der Parameter ein Array<\/h3>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nvar_dump($refparam-&gt;isArray()); \r\n\/\/bool(true)\r\n<\/pre>\n<h3>Ist der Parameter optional?<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nvar_dump($refparam-&gt;isOptional()); \r\n\/\/bool(true)\r\n<\/pre>\n<h3>Wird der Parameter per Referenz \u00fcbergeben?<\/h3>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$reflector = new ReflectionClass(&quot;C&quot;);\r\n$refmethod = $reflector-&gt;getMethod(&quot;fct&quot;);\r\n\/\/contains an array with all params of the function\r\n$refparams = $refmethod-&gt;getParameters(); \r\n$refparam = $refparams[2];\r\nvar_dump($refparam-&gt;isPassedByReference()); \r\n\/\/bool(false)\r\n<\/pre>\n<h3>To be continued&#8230;<\/h3>\n<p>Gut, zugegeben &#8211; der Teil war jetzt wenig spannend. Bevor es im n\u00e4chsten Teil mit den Properties weitergeht, sei noch auf das PHP Handbuch zu ReflectionParam <a href=\"http:\/\/www.php.net\/manual\/en\/class.reflectionparameter.php\">verwiesen<\/a>.<\/p>\n<p>\n<b>Folgende Teile:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/d-mueller.de\/blog\/reflection-teil-4-reflectionproperty\/\">Teil 4: ReflectionProperty<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Vorangegangene Teile: Teil 1: Einf\u00fchrung und ReflectionClass Teil 2: ReflectionMethod und ReflectionFunction Wie im letzten Teil 2 \u00fcber die ReflectionMethod und die ReflectionFunction angedroht soll es nun um die Parameter gehen, die man ebenfalls reflecten kann. Ob es sich dabei &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/reflection-teil-3-reflectionparameter\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[],"class_list":["post-267","post","type-post","status-publish","format-standard","hentry","category-php","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}