检查多个变量声明的有效方法?
Efficient way to check multiple variables declarations?
在我的一个项目中,我正在处理一系列页面,每个页面都提供在下一个页面中使用的信息,以及 POST 和会话变量。简单示例:
第1页:输入名称->第2页显示名称;询问出生日期 -> 第 3 页显示姓名和出生日期。
如果用户直接转到第 3 页,我想显示一条消息,指出 s/he 尚未输入姓名 and/or 出生日期,应该重试。目前我仍然这样做。第 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 子句中很累而且似乎效率不高大部头书。有没有更好、更直接的方法来检查这样的事情?还是我发布的是最好、最常用的方式?
不同的功能在每个服务器的情况下往往略有不同。您可以尝试多次计算执行某个功能的时间,然后比较哪个更快。
但是,是的,那里的代码看起来相当快。
或许值得尝试使用 switch case 语句作为替代方案?
我相信您只需要编写一些辅助方法即可。一个将 $_POST
数据重写为 $_SESSION
,像这样愚蠢:
function copyPostToSession(array $fields) {
foreach($fields as $field) {
if(isset($_POST[$field])) {
$_SESSION[$field] = $_POST[$field];
}
}
}
因此,您不是 if
森林,而是:
copyPostToSession(array('name','bday'));
(另外你可以计算有多少字段存在,return true
或 false
如果不匹配)和另一个(非常相似)来检查你是否得到了所有$_SESSION
.
中所需的数据
您可以一次调用 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;
}
PHP 的 isset() function is a variadric function。
您可以根据需要输入任意数量的参数:
isset($a, $b, $c)
...转换为:
isset($a) && isset($b) && isset($c)
希望对您有所帮助!
在我的一个项目中,我正在处理一系列页面,每个页面都提供在下一个页面中使用的信息,以及 POST 和会话变量。简单示例:
第1页:输入名称->第2页显示名称;询问出生日期 -> 第 3 页显示姓名和出生日期。
如果用户直接转到第 3 页,我想显示一条消息,指出 s/he 尚未输入姓名 and/or 出生日期,应该重试。目前我仍然这样做。第 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 子句中很累而且似乎效率不高大部头书。有没有更好、更直接的方法来检查这样的事情?还是我发布的是最好、最常用的方式?
不同的功能在每个服务器的情况下往往略有不同。您可以尝试多次计算执行某个功能的时间,然后比较哪个更快。
但是,是的,那里的代码看起来相当快。
或许值得尝试使用 switch case 语句作为替代方案?
我相信您只需要编写一些辅助方法即可。一个将 $_POST
数据重写为 $_SESSION
,像这样愚蠢:
function copyPostToSession(array $fields) {
foreach($fields as $field) {
if(isset($_POST[$field])) {
$_SESSION[$field] = $_POST[$field];
}
}
}
因此,您不是 if
森林,而是:
copyPostToSession(array('name','bday'));
(另外你可以计算有多少字段存在,return true
或 false
如果不匹配)和另一个(非常相似)来检查你是否得到了所有$_SESSION
.
您可以一次调用 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;
}
PHP 的 isset() function is a variadric function。 您可以根据需要输入任意数量的参数:
isset($a, $b, $c)
...转换为:
isset($a) && isset($b) && isset($c)
希望对您有所帮助!