首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在反射类方法(PHP5.x)中获得参数类型?

如何在反射类方法(PHP5.x)中获得参数类型?
EN

Stack Overflow用户
提问于 2016-03-28 17:24:41
回答 2查看 2.2K关注 0票数 3

我正在尝试获得$bar变量类型。

代码语言:javascript
复制
<?php
class Foo
{
    public function test(stdClass $bar, array $foo)
    {

    }
}

$reflect = new ReflectionClass('Foo');
foreach ($reflect->getMethods() as $method) {
    foreach ($method->getParameters() as $num => $parameter) {
        var_dump($parameter->getType());
    }
}

我期待stdClass,但我得到

代码语言:javascript
复制
Call to undefined method ReflectionParameter::getType()

有什么不对的?还是有别的办法?.

代码语言:javascript
复制
$ php -v
PHP 5.4.41 (cli) (built: May 14 2015 02:34:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

UPD1它也应该适用于数组类型。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 17:46:32

看起来类似的问题已经在PHP反射-获取方法参数类型作为字符串中添加了

我写了我的解决方案--它适用于所有情况:

代码语言:javascript
复制
/**
 * @param ReflectionParameter $parameter
 * @return string|null
 */
function getParameterType(ReflectionParameter $parameter)
{
    $export = ReflectionParameter::export(
        array(
            $parameter->getDeclaringClass()->name,
            $parameter->getDeclaringFunction()->name
        ),
        $parameter->name,
        true
    );
    return preg_match('/[>] ([A-z]+) /', $export, $matches)
        ? $matches[1] : null;
}
票数 2
EN

Stack Overflow用户

发布于 2016-03-28 17:50:09

如果您只键入提示类,则可以使用PHP5和7中支持的->getClass()

代码语言:javascript
复制
<?php

class MyClass {

}

class Foo
{
    public function test(stdClass $bar)
    {

    }

    public function another_test(array $arr) {

    }

    public function final_test(MyClass $var) {

    }
}

$reflect = new ReflectionClass('Foo');
foreach ($reflect->getMethods() as $method) {
    foreach ($method->getParameters() as $num => $parameter) {
        var_dump($parameter->getClass());
    }
}

我之所以说类,是因为在数组上,它将返回NULL。

输出

代码语言:javascript
复制
object(ReflectionClass)#6 (1) {
  ["name"]=>
  string(8) "stdClass"
}
NULL
object(ReflectionClass)#6 (1) {
  ["name"]=>
  string(7) "MyClass"
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36267390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档