我正在创建一个应该以这种方式调用的编辑页面:
users.php?action=edit&id=5
这是我的代码:
} elseif (isset($_GET['action']) && $_GET['action'] == 'edit' && isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0) {
如你所见,它很长。首先需要使用isset进行检查。我知道你可以把它排除在外,但是当错误报告设置为'E_ALL'时,我会收到PHP通知。
我可以创建一个函数来缩短它,但是这样我需要创建太多函数,因为我在脚本中的不同位置都有这样的代码,每个函数都需要不同的信息。
有没有办法缩短这段代码?
谢谢!
答案 0 :(得分:4)
因为可能会使用action和id,所以也可以将它们设置在脚本的顶部:
$action = !empty($_GET['action'])?$_GET['action']:false;
$id = !empty($_GET['id'])?$_GET['id']:false;
switch ($action) {
case 'edit':
if ($id !== false) {
//processing here
}
break;
default:
echo 'No known action was passed through';
}
初始变量声明使用ternary
运算符作为fyi缩短if/else
。
额外信息
我更喜欢这种方法,因为它更容易阅读,而且你不必考虑你的逻辑,所以它会更容易出错。
答案 1 :(得分:0)
您可以编写一个带有一组键的函数:
function check_get_params($keys) {
foreach ($keys as $key) {
if (! isset($_GET[$key]) ) {
return false;
}
}
return true;
}
然后您的上一行将是:
} elseif (check_get_params(array('action', 'id')) && $_GET['action'] == 'edit' && is_numeric($_GET['id'])) {
这将更清洁:
} elseif (check_get_params(array('action', 'id'))) {
if ($_GET['action'] == 'edit' && is_numeric($_GET['id'])) {
答案 2 :(得分:0)
我会先检查参数:
$action = (isset($_GET['action']) && !empty($_GET['action'])) ? $_GET['action'] : false;
$id = (isset($_GET['id']) && !empty($_GET['id'])) ? $_GET['id'] : false;
settype($id, 'int'); // "123" became 123(int)
然后继续:
} elseif ($action && $id && $action == 'edit' && $id > 0) {
// here we are
}