Используйте метод ReflectionParameter::getDefaultValue()
. С вашего примера кода:
$reflection = new \ReflectionClass($var);
$methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);
$methodParameters = array();
foreach ($methods as $method) {
$parameters = $method->getParameters();
foreach ($parameters as $parameter) {
$name = $method->getName() . '::' . $parameter->getName();
$methodParameters[$name] = null;
if ($parameter->isOptional()) {
$methodParameters[$name] = $parameter->getDefaultValue();
}
}
}
Пример:
class a {
public function methodOne() {
}
public function methodTwo($param) {
}
public function methodThree($param = 'foo') {
}
}
$var = new a();
$reflection = new \ReflectionClass($var);
$methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);
$methodParameters = array();
foreach ($methods as $method) {
$parameters = $method->getParameters();
foreach ($parameters as $parameter) {
$name = $method->getName() . '::' . $parameter->getName();
$methodParameters[$name] = null;
if ($parameter->isOptional()) {
$methodParameters[$name] = $parameter->getDefaultValue();
}
}
}
var_dump($methodParameters);
// results in this array:
array(2) {
["methodTwo::param"]=>
NULL
["methodThree::param"]=>
string(3) "foo"
}
http://php.net/manual/en/reflectionparameter.getdefaultvalue.php – cspray
спасибо! вы должны опубликовать это как ответ, или я удалю свой q: P – Alex
hmmm, но как я могу передать ему имя метода? 'array ($ var, $ method-> name)', похоже, не работает, потому что эта вещь ожидает строку ... – Alex