AND OR条件条件评估

时间:2015-01-30 07:36:25

标签: php

我正在尝试根据if条件运行一段代码。我不承认为什么一个条件返回false而另一个条件返回true,它们似乎正在检查完全相同的东西。如果有人可以提供帮助并说明为什么使用“isset”会更改返回的值。

if(isset($_SESSION['parent_id'])!= '' && '
isset($_SESSION['p_email'])!=   '' &&  
isset($_SESSION['child_id']) ||
isset($_SESSION['agency_id'])!= '' && 
isset($_SESSION['a_email'])!= '' && 
isset($_GET['child_id']) !='' || 
isset($_SESSION['admin_id'])!= '' && 
isset($_SESSION['admin_email'])!= '' && isset($_GET['child_id']) !=='' )

上方返回true,这是正确的值。

    if( ($_SESSION['parent_id'])!= '' &&  
($_SESSION['p_email'])!= '' &&   
($_SESSION['child_id']) || 
 ($_SESSION['agency_id'])!= '' &&
  ($_SESSION['a_email'])!= '' &&  
($_GET['child_id']) !='' ||  
($_SESSION['admin_id'])!= '' && 
 ($_SESSION['admin_email'])!= '' &&  
($_GET['child_id']) !=='' )

上面的 代码返回false,这是错误的返回值。

1 个答案:

答案 0 :(得分:3)

如果你有这么复杂的情况,你需要重新考虑这个问题。首先,我会将代码拆分为更易读的部分。我只能猜到你试图做什么,但似乎你想要这样的东西:

$caseWithParentId = isset($_SESSION['parent_id']) &&
  isset($_SESSION['p_email']) &&
  isset($_SESSION['child_id']);
$caseWithAgencyId = isset($_SESSION['agency_id']) &&
  isset($_SESSION['a_email']) &&
  isset($_SESSION['child_id']);
$caseWithAdminId = isset($_SESSION['admin_id']) &&
  isset($_SESSION['admin_email']) &&
  isset($_SESSION['child_id']);

if ($caseWithParentId || $caseWithAgencyId || $caseWithAdminId)
{
  //...
}

然后我想知道你为什么最终得到相同的PHP文件,有这么多可能的组合,通常每个情况都有一个目标。