在我的一个项目中,我正在使用一系列页面,每个页面都提供下一个使用的信息,包括POST和会话变量。简单的例子:
第1页:输入名称 - >第2页显示名称;询问出生日期 - >第3页显示姓名和出生日期。
如果用户直接进入第3页,我想显示他/她没有输入姓名和/或出生日期的消息,应该再试一次。目前我仍然这样做。在第2页:
if (isset($_POST['name'])) $_SESSION['name'] = $_POST['name'];
和第3页:
if (isset($_SESSION['name'])) $name = $_SESSION['name'];
if (isset($_POST['bday'])) $_SESSION['bday'] = $_POST['bday'];
作为声明,在体内有一个if子句,如
if (isset($name) && isset($_SESSION['bday'])) {
// do main stuff
else {
// display error message
}
这个例子很简单,但在现实世界中,我的代码中有很多变量和数据来自表单,并将所有这些放在变量赋值中,然后在if子句中使用很累,对我来说效率似乎不高。是否有更好,更直接的方式来检查这样的事情?或者,我发布了最好,最常用的方式?
答案 0 :(得分:0)
我相信你只需要编写一些辅助方法。一个将$_POST
数据重写为$_SESSION
,愚蠢如下:
function copyPostToSession(array $fields) {
foreach($fields as $field) {
if(isset($_POST[$field])) {
$_SESSION[$field] = $_POST[$field];
}
}
}
所以代替if
林,你可以:
copyPostToSession(array('name','bday'));
(另外,您可以计算存在的字段数,如果存在不匹配则返回true
或false
),另一个(非常相似)检查您是否获得{{1}中的所有必需数据}}
答案 1 :(得分:0)
您可以使用一次调用isset来检查多个变量。
isset($_SESSION['name'], $_SESSION['bday'], ...)
或者您可以编写自己的功能,如
if (variablesFilled(['name', 'bday', ...])) { }
function variablesFilled($array) {
foreach ($array as $entry) {
if (!isset($_SESSION[$entry])) {
return false;
}
}
return true;
}
答案 2 :(得分:0)
PHP的 isset() 功能是variadric function。 您可以根据需要添加任意数量的参数:
isset($a, $b, $c)
...转换为:
isset($a) && isset($b) && isset($c)
希望它有所帮助!
答案 3 :(得分:-1)
单独的功能在每个服务器的情况下往往有所不同。您可以尝试计算大量执行函数的时间,并比较哪个更快。
但是,是的,那里的代码看起来相当快。
可能值得尝试将switch case语句作为替代方案吗?