php7三元運算符
1. 怎麼簡寫php 中的三元運算符
三元運算符簡寫形式
舊式風格:echo $a ? $a : 「No Value」;
可簡寫成:echo $a ?: 「No Value」;
即如果省略三元運算符的第二個部分,會默認用第一個部分代替。
2. PHP中三元運算符如何表示當前值為空時舍棄這個條件
1 $if_summary = $row['IF_SUMMARY']==2?'是':'否';
PHP的三元運算符
這句話的意思就等於是
12345 if($row['IF_SUMMARY']==2){ $if_summary="是"; }else{ $if_summary="否"; }
三元運算符的功能與「if...else」流程語句一致,它在一行中書寫,代碼非常精練、執行效率更高。
在PHP程序中恰當地使用三元運算符能夠令腳本更為簡潔、高效。
代碼格式如下:(expr1) ? (expr2) : (expr3);
解釋:如果條件「expr1」成立,則執行語句「expr2」,否則執行「expr3」。
實現同樣的功能,若使用條件流程語句,就需要書寫多行代碼:
123456 if(expr1) { expr2; } else { expr3; }
可見,前面所說的三元運算符之好並非誇張。可是,多數情況下我們只在代碼較為簡單的時候使用三元運算符,即執行語句只為單句的時候。如:
1 $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<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);
嵌套使用的三元運算符可讀性不太好,日後對代碼的維護極可能存在問題,但比起「if...else」之類的流程語句,在上述情形之下,它的確太簡練了,這是它的誘人之處。
對於喜歡偷懶和追求代碼簡潔的人來說,用三元運算符取代if流程語句應該是絕佳的選擇。即使不用考慮「三元」中條件句以外的任意某一「元」,使用三元運算符仍然比if語句簡練。以下語句的語法是正確的,它們以小解引號的方式忽略了第二或第三「元」:
12 $a>$b ? print "Yes" : ""; $a>$b ? '': print 'No';
應該注意的是:在使用三元運算符時,建議使用print語句替代echo語句。
注意下列一串語句的理解:
1 $str = $_GET['abc'] ? 'wangjinbo' : 'wjb';
這里不能理解為:當$str等於$_GET['abc'] 時,賦值為 'wangjinbo' 否則賦值為 'wjb';因為一:判斷相等應該用==;因原二:三元算符的語法是如上所示:(expr1) ? (expr2) : (expr3),顯然上面的二元,三元'wangjinbo'或'wjb'不能單獨構成一個有意義的表達式;
正確理解是:當$_GET['abc']為空(也就是否,PHP中 '',null,0,undifine,都等效布爾值false)時,將$str賦值為'wangjinbo',否則賦值為'wjb';
以上所述就是本文的全部內容了,希望大家能夠喜歡。
3. PHP中:什麼意思
PHP中「?:」指的是三目運算符。
三元運算符,又稱條件運算符,是計算機語言的重要組成部分。它是唯一一個有三個操作數的操作符,所以有時它被稱為三元操作符。一般來說,二項式運算元是右界的。
三元運算符提供了一種表示簡單if-else語句的簡寫方法。操作符由問號(?)組成。和一個冒號(:)的形式:表達式?表達式:表達式;一個語句被稱為條件表達式,它由三個子表達式組成,使用問號?結腸:分開。
問號前的條件表達式部分是要測試的條件。這類似於if語句中括弧中的表達式。如果條件為真,那麼執行Betweenand:否則,在:之後執行該部分。如果您認為有幫助,可以在子表達式周圍加上括弧。
(3)php7三元運算符擴展閱讀:
運算規則:
對於條件表達式b?X:y,計算條件b,然後做出判斷。如果b的值為真,則計算x的值,結果為x的值;否則,計算y的值,得到y的值。
條件表達式永遠不會同時求x和y的值。條件運算符是右結合的,也就是說,從右到左求值。例如,一個?B:c?D:e會按a嗎?B:(c?D:e)執行。
可以理解為:條件?結果1:結果2,裡面?數字是格式要求。如果條件為真,條件為真就是結果1,否則就是結果2。
4. Php7有哪些新特性
PHP 7.4 的主要特性包括以下幾個,
短閉包函數(short closure) 預載入提交性能 屬性類型限定 Improved type variance(不會翻譯) 三元運算簡寫 數組展開運算 新增類的魔術方法:serialization 數字分隔符 運算優先順序 允許在__toString中拋出異常 支持反射引用 新增位元組分割函數 移除php短標簽 棄用左關聯運算符 不再向後兼容的變更 短閉包函數短閉包函數可以減少冗餘代碼:
array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users)需要注意幾點:
短閉包可以直接訪問閉包函數外面的變數,所以不需要再寫?use?關鍵詞 以fn關鍵詞開始 $this?可以像普通的閉包一樣使用 短閉包只有一行代碼,僅僅做返回聲明使用,不允許使用return?關鍵詞還可以使用更嚴格類型的方式
$ids = array_map(fn(User $user): int => $user->id, $user); 預載入PHP預載入可以極大的提高性能
優點:在PHP 7.4以前,如果你使用了框架來開發,每次請求文件就必須載入和重新編譯。預載入在框架啟動時在內存中載入文件,而且在後續請求中永久有效。
缺點:性能的提升會在其他方面花費很大的代價,每次預載入的文件發生改變時,框架需要重新啟動。
屬性類型限定 class A { public string $name; public Foo $foo; }不得不說,PHP越來越接近Java等強類型語言
Improved type variance協變返回類型:
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }依賴(是不是很熟悉):
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 簡寫三元運算符在目前> PHP 7以後的寫法:
$data['date'] = $data['date'] ?? new DateTime(); 在PHP 7.4你可以這樣寫: $data['date'] ??= new DateTime(); 數組展開運算合並數組到另一個數組中,返回一維數組
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]注意? :只對數字索引有效
新增類的魔術方法RFC添加了兩個新的魔術方法__serialize和__unserialize
數字分隔符允許使用下劃線更直觀的分隔數值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 運算優先順序PHP 7.4之前,如果你這樣寫:
echo "sum: " . $a + $b; PHP會解析為: echo ("sum: " . $a) + $b; PHP 8將會解析為: echo "sum :" . ($a + $b); __toString中拋出異常支持反射引用PHP 7.4將會新增ReflectionReference?類
移除php短標簽<?將會在PHP 8中移除,<?=會繼續保留
棄用左關聯運算符PHP遺留了一些奇怪的怪癖,比如
1 ? 2 : 3 ? 4 : 5; // 將會在 PHP 7.4 中廢棄,在 PHP 8中會拋出編譯錯誤 (1 ? 2 : 3) ? 4 : 5; // 正確 不再向後兼容的變更 棄用在沒有父類的情況下調用parent:: 調用var_mp列印DateTime和DateTimeImmutableshi』實例,將不再保留對象上的可訪問屬性 openssl_random_pseudo_bytes?會在調用錯誤時拋出異常 序列化PDO和PDOStatement?實例將會生成一個Exception而不是PDOException異常 調用get_object_vars()列印ArrayObject?實例將會返回ArrayObject?自己的屬性,而不是被包裹的數組或對象的值,數組強制轉換不受影響
5. PHP語言PHP語言里的位運算符&、|、^ 、~、〈〈 、〉〉這些符號我一個也不懂,希望高手給個全面的解釋!拜
"&" 按位與運算
按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下:
00001001 (9的二進制補碼)
&00000101 (5的二進制補碼)
00000001 (1的二進制補碼)
<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a&$b);
?>
"|" 按位或運算
按位或運算符「|」是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如:9|5可寫算式如下:
00001001
|00000101
00001101 (十進制為13)可見9|5=13
<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a|$b)."\n"; //二進制
echo sprintf("%d", $a|$b)."\n"; //十進制
"^" 按位異或運算
按位異或運算符「^」是雙目運算符。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下:
00001001
^00000101
00001100 (十進制為12)
<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a^$b)."\n"; //二進制
echo sprintf("%d", $a^$b)."\n"; //十進制
"~" 求反運算
求反運算符~為單目運算符,具有右結合性。其功能是對參與運算的數的各二進位按位求反。
例如~9的運算為:
~(0000000000001001)結果為:1111111111110110
<?php
$a = 9;
$b = 5;
echo sprintf("%b", ~$a)."\n"; //二進制
"〈〈" 左移運算
左移運算符「<<」是雙目運算符。其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數,高位丟棄,低位補0。
例如:
a<<4
指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。
<?php
$a = 3;
$temp = $a<<4;
echo sprintf("%d", $temp)."\n"; //十進制
「>>」 右移運算
右移運算符「>>」是雙目運算符。其功能是把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。
例如:
設 a=48,
a>>4
表示把00110000右移為00000011(十進制3)。
應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時,最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定
<?php
$a = 48;
$temp = $a>>4;
echo sprintf("%d", $temp)."\n"; //十進制
6. PHP7新增運算符用法實例分析
本文實例講述了PHP7新增運算符用法。分享給大家供大家參考,具體如下:
NULL
合並運算符
其實是三元運算符的改造,減少的代碼量
//原先的做法
//$lig
=
isset($_GET['lig'])?$_GET['lig']:'bee';
$lig
=
$_GET['lig']??'bee';
echo
$lig;
運行效果圖如下:
太空船運算符(組合比較符)
實質就是大小比較符,不過相比'<'、'>'的返回值多了-1,跟Java的字元串比較compareto()功能類似
<?php
echo
1<=>1.1;
print
(PHP_EOL);//換行符
echo
"<br>";
print
(1.1<=>1);
echo
"<br>";
echo
1<=>'1';
運行效果圖如下:
更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php面向對象程序設計入門教程》、《PHP網路編程技巧總結》、《PHP數組(Array)操作技巧大全》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
7. php中運用三元運算符比較三個數大小並從大到小輸出
非得用三元運算嗎?
用其他的行不行?
個人覺得,用其他的反而更方便!
<?php
//方法一
//構造一個數組
$Num = array();
//給數組賦值3個隨機數元素, 具體使用中, 數字的來源你自己替換
$Num[] = floor(rand());
$Num[] = floor(rand());
$Num[] = floor(rand());
//構造一個排序的自定義函數
function my_sort( $a, $b ) {
if ( $a == $b ) {
return 0;
}elseif( $a > $b ) {
return -1;
} else {
return 1;
}
}
//應用自定義函數排序數組
uasort( $Num, 'my_sort');
//輸出
echo '方法一輸出:', join(',', $Num ), '<br/><br/>';
//方法二
//構造一個數組
$Num = array();
//給數組賦值3個隨機數元素, 具體使用中, 數字的來源你自己替換
$Num[1] = floor(rand());
$Num[2] = floor(rand());
$Num[3] = floor(rand());
//取得最大的和最小的數字
$Da = max( $Num );
$Xiao = min( $Num );
//刪除找到的兩個數字
unset( $Num[array_search( $Da, $Num)], $Num[array_search( $Xiao, $Num)] );
//得到中間的數字
$Zhong = join( $Num );
echo '方法二輸出:', $Da, ',', $Zhong, ',', $Xiao;
8. 關於php 三元運算符的優先順序問題。請教
三元運算符的優先順序是從右到左的,因此上面順序是:
$i = 2;
先運行:($i == 2 ? "A" : $i == 1)
然後再運行 (? 'B' : 'C';)
假設第一個運行的結果是 $ret 那麼$ret的值為A;
那麼第二個可以寫成
$ret?'B':'C';
因$ret的值為A,是真值,所以結果是B。