今天在改****的時候遇到了乙個語句看不懂:
$if_summary = $row['if_summary']==2?'是':'否';
後來百度後發現是php的三元運算子
這句話的意思就等於是
if($row['if_summary']==2)else
三元運算子的功能與「if...else」流程語句一致,它在一行中書寫,**非常精練、執行效率更高。
在php程式中恰當地使用三元運算子能夠令指令碼更為簡潔、高效。
**格式如下:(expr1) ? (expr2) : (expr3);
解釋:如果條件「expr1」成立,則執行語句「expr2」,否則執行「expr3」。
實現同樣的功能,若使用條件流程語句,就需要書寫多行**:
if(expr1) else
可見,前面所說的三元運算子之好並非誇張。可是,多數情況下我們只在**較為簡單的時候使用三元運算子,即執行語句只為單句的時候。如:
$a>$b ? print "a大於b" : print "a小於b";
事實上,三元運算子可以擴充套件使用,當設定的條件成立或不成立,執行語句都可以不止一句,試看以下格式:
(expr1) ? (expr2).(expr3) : (expr4).(expr5);
我們非常明顯地看到,多個執行語句可以使用用字串運算符號(「.」)連線起來,各執行語句用小角括號包圍起來以表明它是乙個獨立而完整的執行語句。這樣擴充套件後它的功能更為逼近「if...else」流程語句。
同時三元運算子還可以巢狀使用。例如,a大於b成立時:如果a小於c,那麼x=c-a否則x=a-c;否則a小於b成立時:如果b小於c,那麼x=c-b否則x=b-c:
$a>$b ? $x=($a
巢狀使用的三元運算子可讀性不太好,日後對**的維護極可能存在問題,但比起「if...else」之類的流程語句,在上述情形之下,它的確太簡練了,這是它的誘人之處。
對jjznlmovb於喜歡偷懶和追求**簡潔的人來說,用三元運算子取代if流程語句應該是絕佳的選擇。即使不用考慮「三元」中條件句以外的任意某一「元」,使用三元運算子仍然比if語句簡練。以下語句的語法是正確的,它們以小解引號的方式忽略了第二或第三「元」:
$a>$b ? print "yes" : "";
$a>$b ? '': print 'no';
應該注意的是:在使用三元運算子時,建議使用print語句替代echo語句。
注意下列一串語句的理jjznlmovb解:
$str = $_get['abc'] ? 'wangjinb程式設計客棧o' : 'wjb';
這裡不能理解為:當$str等於$_get['abc'] 時,賦值為 'wangjinbo' 否則賦值為 'wjb';因為一:判斷相等應該用==;因原二:三元算符的語法是如上所示:(expr1) ? (expr2) : (expr3),顯然上面的二元,三元'wangjinbo'或'wjb'不能單獨構成乙個有意義的表示式;
正確理解是:當$_get['abc']為空(也就是否,php中 '',null,0,undifine,都等效布林值false)時,將$str賦值為'wangjinbo',否則賦值為'wjb';
本文標題: php三元運算子知識彙總
本文位址: /wangluo/php/127448.html
PHP 三元運算子
a a a 1 第一種 a a 1 第二種第二種寫法從 php 5.3 引入,表示若 a 返回值為真時,取 a 的返回值。此外,在 php7 中引入了?運算子 a a 1 該表示式與第二種寫法類似,可以達到相同的效果。但?運算子是以判斷 a 變數是否存在於上下文環境中作為條件,而三元運算子不具備這種...
三元運算子
根據條件執行兩個語句中的其中乙個。test?語句1 語句2引數 test 任何boolean 表示式。語句1當 test 是true時執行的語句。可以是復合語句。語句2當 test 是false時執行的語句。可以是復合語句。說明?運算子是if.else語句的快捷方式。它通常被用作較大表示式的一部分,...
三元運算子
先定義a和b 兩個數比較 int a 123 int b 144 通過定義big來反映a和b誰更小 int big a b?a b 通過定義small來反映a和b誰更小 int small asystem.out.println a和b之間較大的數 big system.out.println a和...