2017-05-25 198 views
2

我似乎無法在"if"語句中分配多個變量。以下代碼:PHP:在if語句中分配多個變量

<?php 

function a ($var) 
{ 
    if ($var == 1) 
    { 
     return 'foo'; 
    } 

    return false; 
} 

function b ($var) 
{ 
    if ($var == 1) 
    { 
     return 'bar'; 
    } 

    return false; 
} 

if ($result1 = a(1) && $result2 = b(1)) 
{ 
    echo $result1 . ' ' . $result2; 
} 

?> 

返回「1 bar」而不是「foo bar」。如果我刪除第二個條件/賦值,它將返回「foo」。

有沒有辦法在「if」語句中分配多個變量,還是僅限於一個?

+0

這是一個非常糟糕的主意。如果在兩個作業之間放置「或」條件會怎樣? IF(e = mc^2或E = Mc^2)...第二次作業是否執行? –

回答

1

這是所有關於運算符優先級

<?php 

function a ($var) 
{ 
    if ($var == 1) 
    { 
     return 'foo'; 
    } 

    return false; 
} 

function b ($var) 
{ 
    if ($var == 1) 
    { 
     return 'bar'; 
    } 

    return false; 
} 

if (($result1 = a(1)) && ($result2 = b(1))) 
{ 
    echo $result1 . ' ' . $result2; 
} 

?> 

https://repl.it/IQcU

UPDATE

賦值運算符=是右asscoiative,這意味着,

$result1 = a(1) && $result2 = b(1) 

等同的,

$result1 = (a(1) && $result2 = b(1)) 

其評估

$result1 = ("foo" && [other valild assignment]) 

這將導致的是,

$result1變得true

和布爾真echo true /字符串值(strval(true))輸出/是1

你也可以檢查修訂版https://repl.it/IQcU/1

看到下面的語句

$result1 = a(1) && $result2 = b(1) 

相當於這一個。

$result1 = (a(1) && $result2 = b(1)) 
+2

正確。+ 1.但需要添加更多的解釋爲什麼'1酒吧'來? –

+1

好吧,我已經更新 - )) – marmeladze

+2

啊哈。不敢相信我從來沒有遇到過這個。通常情況下,我要麼在if條件中分配一個值,要麼進行多重比較($ a =='foo'),這顯然不會在&&和類似結構之間進行關聯。我認爲&&是一種條件分隔符,但顯然在做分配時不是。謝謝! –

4

需要加括號()在每個任務象下面這樣: -

if (($result1 = a(1)) && ($result2 = b(1))) 
{ 
    echo $result1 . ' ' . $result2; 
} 

輸出: - :

Why 1 bar is coming through OP's code - https://eval.in/804770

正確的解釋是@marmeladze這裏給出

+0

你的解釋是錯誤的。看看這個其他答案:https://stackoverflow.com/a/44172350它正確地解釋了發生了什麼。 – Rizier123

+0

@ Rizier123明白了你的觀點。刪除我的解釋並添加相同的鏈接。希望它很好。謝謝 –

1

if語句需要一些括號中的最後一個,它應該是:

if (($result1 = a(1)) && ($result2 = b(1))) 
{ 
    echo $result1 . ' ' . $result2; 
} 

這確保了事情的支架首先執行,它將幫助。

+1

正確。+ 1.但需要添加更多解釋爲什麼'1酒吧'來了? –

+0

括號內的內容先執行。如果沒有它們,它會是:if($ result1 = a(1)&& $ result2 = b(1))導致第二個變量不賦值。 –

0

您必須添加==才能查看條件。

試試這個,

if ($result1 == a(1) && $result2 == b(1)) 
{ 
    echo $result1 . ' ' . $result2; 
} 

經過與貝洛例如

<?php 

function a ($var) 
{ 
    if ($var == 1) 
    { 
     return 1; 
    } 

    return false; 
} 

function b ($var) 
{ 
    if ($var == 1) 
    { 
     return 2; 
    } 

    return false; 
} 

if (1 == a(1) && 2 == b(1)) 
{ 
    echo 'success'; 
} 
?> 
+0

我不認爲這是解決OP的問題或給他一個線索爲什麼'1酒吧'來他的情況? –