2010-08-27 76 views
11

我經常使用三元運算符,但我一直無法找到關於此的文檔中的任何內容,我一直在想它。PHP三元運算符澄清

下面是一個可能的例子:

echo ($something->message ? $something->message : 'no message'); 

,你可以看到,如果$ something->消息是正確的,我們返回$ something->消息,但爲什麼要寫兩次?有沒有辦法做這樣的事情:

echo ($something->message ? this : 'no message'); 

現在,我沒有很好地規劃理論精通,所以它可能有一個原因,前者不能與一些引用像「本」,但爲什麼不?這不會流三線運算符的使用嗎?對於像我的例子這是很沒用,但是讓我們說這是

echo (function(another_function($variable)) ? function(another_function($variable)) : 'false'); 

我無法找到任何的方式來做到這一點,所以我假設它是不可能的,如果我錯了,請通知我,否則:爲什麼不呢?爲什麼這是不可能的,技術原因是什麼,還是僅僅是從未發生過的事情?我應該將它聲明爲一個變量,然後對該變量進行測試嗎?

+0

可能的重複[是否PHP有默認的分配習慣像perl?](http://stackoverflow.com/questions/2958630/does-php-have-a-default-assignment-idiom-like-perl) – outis 2012-04-01 05:45:06

回答

19

從PHP 5.3開始,可以省略三元運算符的中間部分。表達式expr1?:如果expr1的計算結果爲TRUE,則expr3返回expr1,否則返回expr3。

Source

例如

$used_value = function1() ?: $default_value; 

相同

$check_value = function1(); //doesn't re-evaluate function1() 
if($check_value) { 
    $used_value = $check_value; 
} else { 
    $used_value = $default_value; 
} 

字爲明智

如果您將要依靠類型轉換爲TRUE,那麼瞭解將要轉換爲TRUE的東西很重要,哪些不會。在PHP的type juggling上閱讀type conversion tables可能是值得的。例如,(bool)array()FALSE

+1

提交該補丁的人是我的英雄。我剛剛閱讀該頁面,似乎直接跳過該部分。謝謝,也許我應該升級。當時間到了,我會接受你的回答! – sam 2010-08-27 00:14:09

+0

'echo($ something-> message?:'no message');'在OP的第一個例子中。 – 2010-08-27 00:14:10

+1

+1讓它給你一個三元運算符的所有事情的晦澀難懂的執行情況讓你感到驚訝:)得愛不協調.. – 2010-08-27 00:16:56