Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

Reflection – Teil 3: ReflectionParameter

Vorangegangene Teile:

Wie im letzten Teil 2 über die ReflectionMethod und die ReflectionFunction angedroht 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:

class C  {  	public function fct($a,$b,array $c = array(1,2,3))  	{}  }  

Default-Wert des Parameters

Erstmal müssen wir uns ein ReflectionParameter – Objekt ergattern. Das geht im – hier geschilderten – umständlichsten Fall von der Klasse über die Methode zu den Parametern. Falls wir keine Methode sondern eine normale Funktion behandeln würden, würden wir uns einen Schritt sparen können.

$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  print_r($refparam->getDefaultValue());  /*  Array  (      [0] => 1      [1] => 2      [2] => 3  )  */  

Solltet ihr euch erdreisten, einen nicht optionalen (=mit Default-Wert belegten) Parameter mit getDefaultValue zu penetrieren, fliegt euch eine ReflectionException Parameter is not optional um die Ohren.

Parameter-Name

$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  print_r($refparam->getName());   //c  

Parameter-Position

PHP beginnt freundlicherweise bei 0 zu zählen.

$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  print_r($refparam->getPosition());   //2  

Ist Parameter mit Default-Wert belegt?

$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  var_dump($refparam->isDefaultValueAvailable());   //bool(true)  

Ist der Parameter ein Array

$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  var_dump($refparam->isArray());   //bool(true)  

Ist der Parameter optional?
$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  var_dump($refparam->isOptional());   //bool(true)  

Wird der Parameter per Referenz übergeben?

$reflector = new ReflectionClass("C");  $refmethod = $reflector->getMethod("fct");  //contains an array with all params of the function  $refparams = $refmethod->getParameters();   $refparam = $refparams[2];  var_dump($refparam->isPassedByReference());   //bool(false)  

To be continued…

Gut, zugegeben – der Teil war jetzt wenig spannend. Bevor es im nächsten Teil mit den Properties weitergeht, sei noch auf das PHP Handbuch zu ReflectionParam verwiesen.

Folgende Teile: