2011-08-16 59 views
0

聲明我有這個條件if語句:重寫如果PHP

if (isset($_POST['x']) && empty($_POST['x']) && isset($_SESSION['x']) && $_SESSION['x']) 

    $response['x'] = 1; 

else 

    $response['x'] = 2; 

我想讓它像相反,例如:

if (!isset($_POST['iQapTcha']) || !empty($_POST['iQapTcha']) || !isset($_SESSION['iQaptcha']) || !$_SESSION['iQaptcha']) 

    $response['captcha'] = 2; 

    exit(); 

是我的新版本是否正確?或者這不是最好的主意?

謝謝。

回答

4

Simpliest方式:

if (!(*old condition here*)) 
1

是的,完全正確的,也可能是最好的選擇 另一種方法是

if !(isset($_POST['x']) && empty($_POST['x']) && isset($_SESSION['x']) && $_SESSION['x']) 

,但它並不像PHP將評估所有的變量一樣好。隨着你的選擇,它可以停止時的條件之一滿足(因爲它是OR)

+2

也有條件分揀電路;如果任何條件是錯誤的,'&&將停止評估,整個事情將是真實的。 – geoffspear

3

我猜測它是否是正確的取決於你想要做什麼。

如果你有,你只是想否定一個條件,你可以在!()包裹的一切:

if(a == b && c == d) ... 
// the negation is: 
if(!(a == b && c == d)) ... 

附加註釋:(!isset($x) || !empty($x)) == !empty($x)所以你的第二個語句可縮短至

if(!empty($_POST['iQapTcha']) || !empty($_SESSION['iQaptcha'])) ...