i’m testing php’s reflection with default params like this…
class Test{
public function testMethod($class,$methodName){
// the returned values
$data = array();
// get the method of the class passed by params
$funcHandler = new ReflectionMethod($class,$methodName);
// iterates through the parameters to catch de default values
foreach ($funcHandler->getParameters() as $param){
// instance the params to get the properties for that method
$paramDetail = new ReflectionParameter(array($class, $method),$param->name);
// check if that param is or has a default value attached like (public function method($a,$b,$c = false, $d = null)
$data[$param->name] = ($paramDetail->isDefaultValueAvailable) ? funcHandler->getDefaultValue : '';
return $data;
}
}
//let's test the reflection with the method params...
class Foo{
public function method1($a,$b,$c = false, $d = null, $e = 'hello'){
// instance of the Test Class
$obj = new Test();
// calling the test method with this class and method names
print_r($obj->testMethod(__CLASS__,__FUNCTION__));
}
}
The problem is that the line “new ReflectionParameter(array($class, $method),$param->name);”
when executing “$data[$param->name] = ($paramDetail->isDefaultValueAvailable) ? ”
says that has no isDefaultValueAvailable nor isOptional.
Any ideas how to extract from a class method optional params?
It seems to work fine with functions.
The ReflectionParameter class has an isOptional() method, that will tell you if the parameter is optional or not (and it can be optional only if it has a default value), if it is optional, you can call the getDefaultValue() to extract the default.
here’s your code patched to use them:
output: