我是PHP的新手并且处理可能有未定义变量的脚本,我有两种方法可以解决这个问题,我的问题是什么是最好的方法。
变量$_GET['page']
有时可以定义,有时也可以定义。
我用isset()和if:
检查的第一种方式if(isset($_GET['page'])){
$sql.=limitrows($_GET['page'],10);
}else{
$sql.=limitrows(1,10);
}
第二种方式我只是编写函数并使用@
删除错误并处理函数内的isset()
function limitrows($page=1, $rows=10){
if (isset($page)==false or $page<=0 ){
$page=1;
}
}
$sql.=@limitrows($_GET['page'],10);
第二种方式使我的代码更清洁,我在函数内做了所有脏工作,但它显示错误,我必须@
。
什么是最好的方法?
答案 0 :(得分:3)
一种可能性是使用filter function来访问GET参数。
$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT);
使用这种方法,$page
将始终设置,因此您不必担心未定义的索引警告。 (如果'page'
不是$_GET
中的密钥,filter_input
将返回null
。)
然后,当您需要稍后使用$page
时,检查它会更简单:
function limitrows($page, $rows=10) {
if (!$page) $page = 1; // assuming you don't have a page 0, or
// if ($page === null) $page = 1; // if you DO have a page 0
// ...
}
答案 1 :(得分:2)
另一种方法是使用array_key_exists
来检查是否存在数组键。您可以使用if
语句,或使用三元组缩短它。
// with if
$page = 1;
if (array_key_exists('page', $_GET) === true) {
$page = $_GET['page'];
}
// with ternary
$page = array_key_exists('page', $_GET) === true ? $_GET['page'] : 1;
不要使用@
错误抑制运算符。进入这是一个不好的做法,99.99%的时间你想在所有情况下看到所有错误。
编码中的“最佳方式”是意见,既定代码风格和行业最佳实践的组合。一般来说,应该为作业使用正确的函数(在这种情况下,array_key_exists
或filter_input
,如另一个答案所示),不使用正常代码流的错误处理,抑制或异常,以及明确/冗长,而不是尝试最短的代码。您可能能够将某些东西压缩成1行而不是3行,但到了什么目的?它所做的只是增加代码中任何给定部分的特定复杂性,使其他人(以及您自己!)在将来更难理解和维护。
就在哪里做什么而言,在函数外收集你的参数并验证函数内的参数。
文档/更多阅读
array_key_exists
- http://php.net/manual/en/function.array-key-exists.php 答案 2 :(得分:0)
使用三元运算符
$sql.=@limitrows(isset($_GET['page'])?$_Get['page']:1,10);
格式[逻辑]?[true]:[false]