在检查变量是否存在之前必须使用isset()吗?

时间:2013-02-10 22:25:02

标签: php

据我了解,反对提供方便if (var) {}的javascript,即使var不存在,在PHP中你必须使用if (isset(var)) {}或{{1} }。

今天我偶然发现一个似乎来自可靠来源的login tutorial,其中if (isset(var) && var) {}未被使用:

isset

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

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

是否有一种神秘的方法可以避免烦人的$_SESSION['id']检查?

2 个答案:

答案 0 :(得分:6)

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

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

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

但是,您可以使用@

取消警告和通知
if (!@$_SESSION['id']) { /* .. */ }

但通常如果您触摸@键:

  • 你做错了什么:)

在干净的应用程序中,只有在极少数情况下才需要@

最后一句话:从不使用来自外部的值而不进行验证!

答案 1 :(得分:2)

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

  • “”(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • “0”(0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • $变种; (声明的变量,但没有值)