isset()多个参数的区别

时间:2014-02-02 11:14:57

标签: php isset difference

之间有什么区别
if (!isset($_SESSION['lang']) && !isset($_GET['lang'])) return 'ru';

if (!isset($_SESSION['lang'], $_GET['lang'])) return 'ru';

为什么第一个工作正常,但第二个总是返回'ru'? 据我所知,这两个条件是相同的,但为什么它们在相同条件下的工作方式不同?

没有session和get参数,第一个版本什么都不返回(因为我需要它),但是第二个版本总是返回true,无论是否设置了任何参数。

3 个答案:

答案 0 :(得分:2)

第一个条件意味着必须设置它们

if (! isset($_SESSION['lang']) && ! isset($_GET['lang'])) 

第二个条件:

isset($_SESSION['lang'], $_GET['lang']表示:both are set

!(isset($_SESSION['lang'], $_GET['lang'])表示:at least one is unset

因此,如果$_SESSION['lang']已设置且未设置$_GET['lang'],则第二个条件将显示ru

答案 1 :(得分:1)

  

如果提供了多个参数,则isset()将仅返回TRUE   如果设置了所有参数。评估从左到右   并在遇到未设置的变量时立即停止。

这意味着isset(A,B)isset(A) && isset(B)相同。

因此你的第二个版本

!isset(A,B)

相当于

!(isset(A) && isset(B))

相当于

!isset(A) || !isset(B)  // DeMorgan

NOT 等同于您的第一个版本

!isset(A) && !isset(B)

答案 2 :(得分:0)

您使用的是错误的条件。 您可以使用以下3个条件中的任何一个。

if ((!isset($i)) || (!isset($j))) echo 'ru1';
if (!(isset($i) && isset($j))) echo 'ru3';
if (!isset($i,$j)) echo 'ru2';