php有没有什么函数可以获取一个方法中的参数名和参数类型的

 我来答
迷花石
2016-07-27 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:89.2万
展开全部
/**
 * 获取一个函数的依赖
 * @param  string|callable $func
 * @param  array  $param 调用方法时所需参数 形参名就是key值
 * @return array  返回方法调用所需依赖
 */
function getFucntionParameter($func,$param=[]) {
    if(!is_array($param)) {
        $param = [$param];
    }
    $ReflectionFunc = new \ReflectionFunction($func);
    $depend = array();
    foreach($ReflectionFunc->getParameters() as $value) {
        if(isset($param[$value->name])) {
            $depend[] = $param[$value->name];
        }elseif($value->isDefaultValueAvailable()){
            $depend[] = $value->getDefaultValue();
        }else{
            $tmp = $value->getClass();
            if(is_null($tmp)) {
                throw new \Exception("Function parameters can not be getClass {$class}");
            }
            $depend[] = $this->get($tmp->getName());
        }
    }
    return $depend;
}


function test($a,$b=20) {
    echo $a,',',$b;
}

$depend = getFucntionParameter('test',['a'=>30,'b'=>40]);

call_user_func_array('test',$depend); // 30,40

上面的函数是我开发的框架的容器的方法。

php提供了很完整的反射机制。不但可以反射函数,还可以反射方法,反射类构造函数。

更多追问追答
追问
看来是我没有问清楚,我想获取的是这个方法的参数变量,而不是这个方法的参数值,谢谢了
追答
上面的代码中 $value->name 就是参数名字,至于参数类型,因为是形参,所以参数类型是无法获取的。
百度网友577f80d
2016-07-27 · TA获得超过791个赞
知道小有建树答主
回答量:1352
采纳率:66%
帮助的人:531万
展开全部
参数直接就可以获取了啊。
用gettype($参数) 获取变量的类型。

比如:
<?php
function say($a){
echo "参数是:".$a."<br>";
echo "类型是:".gettype($a);
}
say('hi');
?>
追问
你误解我的问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-07-27
展开全部
没有吧,,可以定义一个static 静态变量 全局变量,,然后用gettype() 判读类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
烟囱土著
2019-07-05 · 悦读人生,不负时光。
烟囱土著
采纳数:0 获赞数:0

向TA提问 私信TA
展开全部
// 直接上代码,这是一个获取类方法和注释的方法
// 运行结果看:https://www.cnblogs.com/phonecom/p/11138672.html
public function generateMethod()
{
    $r = new \ReflectionClass('\think\Build');
    $methods = $r->getMethods();

    $string = '';
    foreach ($methods as $m) {
        $limit = 'public';
        if ($m->isPrivate()) {
            $limit = 'private';
        } elseif ($m->isProtected()) {
            $limit = 'protected';
        }

        $methodDefinition = '### ' . $limit . ' function ' . $m->getName() . '(';
        $methodParam = $m->getParameters();
        foreach ($methodParam as $mp) {
            $type = '';
            if ($mp->hasType()) {
                    // 注意!!!注意!!!
                    // 获取参数类型
                $type = $mp->getType()->getName() . ' ';
            }
            // 注意!!!注意!!!
            // 获取参数名
            $name = $mp->getName();

            $value = '';
            if ($mp->isDefaultValueAvailable()) {
                $defaultValue = $mp->getDefaultValue();
                if (is_array($defaultValue)) {
                    $value = ' = []';
                } elseif (is_bool($defaultValue)) {
                    $value = $defaultValue ? ' = true ' : ' = false ';
                } else {
                    $value = ' = \'' . $mp->getDefaultValue() . '\'';
                }
            }
            $methodDefinition .= $type . '$' . $name . $value . ',';
        }
        $methodDefinition = rtrim($methodDefinition, ',');
        $methodDefinition .= ')';

        $methodDefinition .= PHP_EOL;
        $methodDefinition .= "\t" . str_replace(['/', '*', '/'], '', $m->getDocComment());
        $methodDefinition .= PHP_EOL;
        $methodDefinition .= PHP_EOL;

        $string .= $methodDefinition;
    }

    file_put_contents('./classMethodList.txt', $string);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
life天天给力
2016-07-27 · 超过25用户采纳过TA的回答
知道答主
回答量:145
采纳率:33%
帮助的人:50.1万
展开全部
这个好像没有吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式