Php 如何获取方法的默认变量定义

Php 如何获取方法的默认变量定义,php,reflection,methods,Php,Reflection,Methods,使用PHP的ReflectionClass。这可能吗 我想得到一个方法和定义变量的列表,如果可能的话,还有它们的默认值 $reflection = new \ReflectionClass($var); $methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC); print_r($methods); // only method names here :( 使用该方法。使用您的代码示例: $reflection =

使用PHP的ReflectionClass。这可能吗

我想得到一个方法和定义变量的列表,如果可能的话,还有它们的默认值

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

print_r($methods); // only method names here :(
使用该方法。使用您的代码示例:

$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"
}

谢谢您应该将其作为答案发布,否则我将删除我的q:Phmmm,但我如何才能将方法名称传递给它<代码>数组($var,$method->name)似乎不起作用,因为它需要一个字符串…好吧,我发现,我必须使用ReflectionMethod而不是ReflectionFunction…只是想知道,参数列表是否总是按原始顺序返回?好问题,让我再做一点测试…一秒钟@Alex…看来参数是按顺序返回的