php有没有什么函数可以获取一个方法中的参数名和参数类型的
5个回答
展开全部
/**
* 获取一个函数的依赖
* @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 就是参数名字,至于参数类型,因为是形参,所以参数类型是无法获取的。
展开全部
参数直接就可以获取了啊。
用gettype($参数) 获取变量的类型。
比如:
<?php
function say($a){
echo "参数是:".$a."<br>";
echo "类型是:".gettype($a);
}
say('hi');
?>
用gettype($参数) 获取变量的类型。
比如:
<?php
function say($a){
echo "参数是:".$a."<br>";
echo "类型是:".gettype($a);
}
say('hi');
?>
追问
你误解我的问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-07-27
展开全部
没有吧,,可以定义一个static 静态变量 全局变量,,然后用gettype() 判读类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
// 直接上代码,这是一个获取类方法和注释的方法
// 运行结果看: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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个好像没有吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询