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

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 truefalse 如果不匹配)和另一个(非常相似)来检查你是否得到了所有$_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)

希望对您有所帮助!