0

据我了解,与提供方便的 javascript 相反if (var) {},即使var在 PHP 中不存在,您也必须使用if (isset(var)) {}, 或if (isset(var) && var) {}.

今天我偶然发现了一个似乎来自可靠来源的登录教程isset,其中未使用:

if(!$_SESSION['id']):

[来自链接页面,demo.php 部分,第 15 行]

在我的本地服务器上,此行在未设置时会中断$_SESSION['id'],即恕我直言,这是一种预期的行为。$_SESSION['id']在此行之前未定义。

有什么神秘的方法可以避免烦人的isset()检查吗?

4

2 回答 2

6

您的应用程序不会“中断”,因为它只是一个通知,是的:如果您不确定数组键是否存在,您应该始终测试它们是否存在。

$defaults = array('id' => null);
$session = array_merge($defaults, $_SESSION);

现在您可以确定 $session 有一个 key id

但是,您可以使用@

if (!@$_SESSION['id']) { /* .. */ }

但通常,如果你曾经触摸过@按键:

  • 你有一个很好的理由
  • 你做错了什么:)

在一个干净的应用程序中,您@只需要在一些非常罕见的情况下。

最后一句话:永远不要在没有验证的情况下使用来自外部的值!

于 2013-02-10T22:29:45.090 回答
2

if(!$_SESSION['id'])只会检查会话变量是否为空。isset检查它是否是NULL. 个人empty()是要走的路。它检查:

  • ""(一个空字符串)
  • 0(0 为整数)
  • 0.0(0 作为浮点数)
  • "0" (0 作为字符串)
  • 空值
  • 错误的
  • array() (一个空数组)
  • $var; (声明的变量,但没有值)
于 2013-02-10T22:30:28.387 回答