2016-02-24 90 views
2

其中:不知道是什麼的值是

$b = true; 
$c = 0; 
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b)); 

我不知道如何工作了。

所以,我明白,這是一個速記運營商,通常它是一個案例:

$value ? true : false 

意味着

if $a = true { true } else { false }; 

這樣:

if $a{ 
    if $a{ 
     true;} 
    else{ 
     0;}; 
else{ 
if $0{ 
    $a;} 
else{ 
    true;} 
}; 

這確實讓價值$是真的嗎?

+1

這裏什麼是您的問題 – Gopalakrishnan

+2

結果是'注意:未定義的變量:A' – RiggsFolly

+1

是因爲你還沒有宣佈$ a的值,你在速記條件下使用之前。 – Gopalakrishnan

回答

3

$a的價值將是true

$b = true; 
$c = 0; 
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b)); 

速記可以這樣解釋:

if($a) { 
    if($a) { 
    $a = $b; 
    } else { 
    $a = $c; 
    } 
} else { 
    if($c) { 
    $a = $a; 
    } else { 
    $a = $b; 
    } 
} 

因爲$a是擺在首位不存在虛假,它會立即跳轉到其他語句。這樣對你很重要的唯一的部分是:

if($c) { 
    $a = $a; 
    } else { 
    $a = $b; 
    } 

0相同false,所以$c會回來爲假,因此$a等於$b,這是true

編輯:

有上時引發該通知的一些討論,但這個無法說清的事實,聲明並非真正的錯誤,因爲這是沒有中斷的代碼。結果不是Notice: Undefined variable: a,「結果」(認爲這些人的意思是輸出)應該是空白的,如果它不是我們在var_dump末尾確定$a的值。 問題是$a的值是什麼,而不是屏幕上顯示的值。

顯示在屏幕上的某個變量沒有被設置,與$a的值無關。

如果執行下面的代碼,通知不認識的唯一的事:

$b = true; 
$c = 0; 
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b)); 

var_dump($a); 

所以輸出:

E_NOTICE : type 8 -- Undefined variable: a -- at line 5 
bool(true) 

該通知被拋出的事實並不妨礙$a成爲現實。

此外,通知很容易被抑制...

error_reporting(0); 
$b = true; 
$c = 0; 
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b)); 

var_dump($a); 

將導致$a仍然成爲現實,並且沒有看到通知。

bool(true) 
+1

非常感謝你,這就是我想要得到的,這是我的邏輯。感謝天堂! –

+0

我不同意這個答案。如果按原樣運行代碼,則會得到「注意:未定義的變量:第4行myfile.php中的一個」。看看我的答案,看看它的另一種方式.. – mseifert

+0

注意錯誤不是真正的錯誤(可以很容易地通過關閉通知來抑制),而通知被拋出'$ a'在第一個錯誤時仍然是錯誤的如果陳述;所以如果你運行代碼,那麼'var_dump($ a);'你會得到結果'bool(true)' – skrilled

1

如果您爲運行代碼,你會得到:Notice: Undefined variable: a in myfile.php on line 4

因此,我推測$a設置的地方更早。然而,無論$ a有哪些價值,如果$ a可以被評估爲真或假,在運行代碼之後$ a仍然是真的,原因如下:

如果$ a爲真,那麼第一部分會產生$ a = $ b,我們知道$ b = true。

if(TRUE) { 
    if(TRUE) { 
    $a = $b; //AND $b == TRUE 
    } else { 
    $a = $c; 
    } 
} else { 
    ... 
} 

如果$一個是假的,那麼第二部分將產生$ A = $ B再次

if(FALSE) { 
    ... 
} else { 
    if(0) { // 0 will equate to FALSE 
    ... 
    } else { 
    // 0 is the same as FALSE so we end up again with $a = $b 
    $a = $b; //AND $b == TRUE 
    } 
} 

事實上,如果你運行這段代碼,它會告訴你的$ a的值誠然兩次:

<?php 
$a = false; 
$b = true; 
$c = 0; 
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b)); 

echo $a; 

$a = true; 
$b = true; 
$c = 0; 
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b)); 

echo $a; 
相關問題