Как получить определения переменных по умолчанию для метода - PullRequest
1 голос
/ 14 февраля 2012

Использование PHP ReflectionClass. Возможно ли это?

Я хочу получить список методов и определенных переменных и, если возможно, их значения по умолчанию.

$reflection = new \ReflectionClass($var);
$methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);

print_r($methods); // only method names here :(

1 Ответ

2 голосов
/ 14 февраля 2012

Используйте метод 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...