检查多个变量声明的有效方法


Efficient way to check multiple variables declarations?

在我的一个项目中,我使用一系列页面,每个页面都提供下一个项目使用的信息,包括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子句中很累,对我来说似乎效率不高。有更好、更直接的方法来检查这样的事情吗?还是我发布的内容是最好、最常用的方式?

您可以使用对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;
}

我认为您只需要编写一些辅助方法。一个是将$_POST数据重写为$_SESSION,如下所示:

function copyPostToSession(array $fields) {
    foreach($fields as $field) {
       if(isset($_POST[$field])) {
          $_SESSION[$field] = $_POST[$field];
       }
    }
}

所以不用if森林,而是使用

copyPostToSession(array('name','bday'));

(此外,您可以计算有多少字段存在,如果不匹配,则返回truefalse),另一个(非常相似)用于检查您是否在$_SESSION中获得了所有所需的数据。

PHP的isset()函数是一个可变函数。你可以提出任意多的论点:

isset($a, $b, $c)

翻译过来就是:

isset($a) && isset($b) && isset($c)

希望它能有所帮助!

在每台服务器的情况下,分离函数往往会有所不同。你可以尝试多次计算执行一个函数的时间,然后比较哪个更快。

但是,是的,这看起来是相当快的代码。

也许值得尝试切换案例语句作为替代方案?