我在stackoverflow上学习了如何通过引用访问另一个答案,但是无法再找到它。无论如何,以下方法是不安全还是根本不可靠?
protected function checkVar($requestType, $varname, $checkIfNumber = false)
{
switch($requestType)
{
case 'GET':
$sg = &$_GET;
break;
case 'POST':
$sg = &$_POST;
break;
default:
throw new Exception('Variable `$requestType` is not `GET` or `POST` in AController::checkVar().');
}
if(!isset($sg[$varname])) {
throw new Exception("$requestType variable [$varname] is not set in AController::checkVar().");
} else if(empty($sg[$varname])) {
throw new Exception("$requestType variable [$varname] is empty in AController::checkVar().");
} else if($checkIfNumber) {
if(!ctype_digit($sg[$varname])) {
throw new Exception("$requestType variable [$varname] is not a number in AController::checkVar().");
}
}
return $sg[$varname];
}
答案 0 :(得分:3)
这不是你应该如何使用引用。只要值没有改变,“复制”操作实际上更便宜,并且这里不需要引用(特别是因为您没有通过引用返回,而是实际复制)。在代码的这一点上唯一可以引用的是引起后面的模糊错误,这很容易被追踪。
答案 1 :(得分:2)
这就是我们拥有$_REQUEST超全球的原因。
protected function checkVar($varname, $checkIfNumber = false)
{
if(!isset($_REQUEST[$varname])) {
throw new Exception("variable [$varname] is not set in AController::checkVar().");
} else if(empty($_REQUEST[$varname])) {
throw new Exception("variable [$varname] is empty in AController::checkVar().");
} else if($checkIfNumber) {
if(!ctype_digit($_REQUEST[$varname])) {
throw new Exception("variable [$varname] is not a number in AController::checkVar().");
}
}
return $_REQUEST[$varname];
}
我知道这不是严格相同的事情,但恕我直言,这已经足够了。