我想在 php 中检测方法的参数是否为空。我使用 ReflectionParameter 但它在检测参数类型时有奇怪的行为。这是我测试的代码:
class myClass{
public function test($param2=null,$param1,$param3='something'){
echo "it's $param1";
if(!is_null($param2)){
echo "<br> it's $param2";
}
}
public function reflection(){
$reflection = new ReflectionMethod($this,'test');
$params = $reflection->getParameters();
echo '<pre> public function test($param2=null,$param1,$param3=\'something\'){}
<hr>';
#var_dump($params);
#echo '<hr>';
$this->reflection_parameter(0);
echo '<hr>';
$this->reflection_parameter(1);
echo '<hr>';
$this->reflection_parameter(2);
}
public function reflection_parameter($position){
$p = new ReflectionParameter(array($this,'test'),$position);
#var_dump($p->getPosition(),$p->getName(),$p->getDeclaringFunction());
var_dump('allowsNull()',$p->allowsNull());
var_dump('isOptional()',$p->isOptional());
#var_dump('isArray()',$p->isArray());
#var_dump('isCallable()',$p->isCallable());
var_dump('isDefaultValueAvailable()',$p->isDefaultValueAvailable());
#var_dump('getDefaultValue()',$p->getDefaultValue());
#var_dump('class',$p->getDeclaringClass()->name);
}
}
$refl= new myClass();
$refl->reflection();
我附上了输出截图: http: //axgig.com/images/21110184497178611107.png
如你看到的
public function test($param2=null,$param1,$param3='something')
param2 可以为 null,但 isOptional 和 isDefaultValueAvailable 都为 false 与没有任何默认值的 param1 相同,但对于 param3 它返回 true
现在将测试函数的第一行更改为:
public function test($param1,$param2=null,$param3='something')
并查看输出: http : //axgig.com/images/85816853742428271329.png 现在 isOptional 和 isDefaultValueAvailable 对于 param2 是 true 而对于以前的使用是 false