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

发布于 2025-01-05 09:27:45 字数 264 浏览 0 评论 0原文

使用 PHP 的 ReflectionClass。这可能吗?

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

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

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

Using PHP's ReflectionClass. Is this possible?

I want to get a list of methods and the defined variables and if possible their default values too.

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

内心荒芜 2025-01-12 09:27:45

使用 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"
}

Use the ReflectionParameter::getDefaultValue() method. With your code example:

$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();
        }
    }
}

An example:

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"
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文