和或条件条件评估


AND OR Conditions Conditions Evaluation

我正在尝试运行一段基于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,这是错误的返回值。

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

$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 文件上,有这么多可能的组合,通常每种情况都有一个目标。