亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP填坑——運算符

2019-11-08 03:01:57
字體:
來源:轉載
供稿:網友

php填坑——運算符

測試環境 PHP version 5.3.29/5.6.29/7.1.0 Apache 2.4.25

運算符

運算符是可以通過給出的一或多個值(表達式)來產生另一個值(因而整個結構成為一個表達式)的東西。

PHP中運算符包括如下內容:

運算符優先級 算術運算符 賦值運算符 位運算符 比較運算符 錯誤控制運算符 執行運算符 遞增/遞減運算符 邏輯運算符 字符串運算符 數組運算符 類型運算符

運算符優先級

PHP中運算符優先級請參考:運算符優先級

Example-1

注意:邏輯運算符的兩套符號優先級不同,優先級從高到低依次為:&& > || > = > and > xor > or

<?php $bool = true && false; var_dump($bool); // false $bool = true and false; var_dump($bool); // true?>

算術運算符

除法運算符總是返回浮點數。只有兩個操作數都是整數(或字符串轉換成的整數)并且正好能整除時返回一個整數;

取模運算符的操作數在運算之前都會轉換成整數(向下取整,除去小數部分);

取模運算符 % 的結果和被除數的符號相同,即$a % $b的結果和 $a 的符號相同;

Example-1

PHP 5.6 新增冪運算符,等同于pow()函數;

<?php $a=3; $b=4; echo $a**$b; //PHP 5.6 新增冪運算符?>

Example-2

取模運算符%只在integer數據范圍內有效,對較大的數進行取模運算的時候最好使用fmod()函數代替取模運算符%;

<?php echo 3333333333 % 3,'<br/>'; //PRints -1 echo fmod(3333333333 ,3); //prints 0 ?>

賦值運算符

Example-1

PHP先計算組合運算符右側的值,最后再用左側的變量和右側表達式的結果進行計算; 和javascript計算結果不同。

<?php $a = 0; $a -= (++$a) + (++$a); echo $a; //outputs: -1,右側計算結果為3,此時$a為2,最后結果是2-3=-1?><script> var a = 0; a -= (++a) + (++a); alert(a); //alert: -3,等效于a=a-((++a)+(++a));</script>

位運算符

位移在 PHP 中是數學運算。向任何方向移出去的位都被丟棄。左移時右側以零填充,符號位被移走意味著正負號不被保留。右移時左側以符號位填充,意味著正負號被保留。

如果位運算符&,|,^兩側都是string類型的,則按照ASCII碼值進行計算,返回的結果也是string類型,其他情況下則會強制轉化成整型,結果必然也是整型。

如果位運算符 ~ 是string類型的,則按照ASCII碼值進行計算,返回的結果也是string類型,其他情況下則會強制轉化成整型,結果必然也是整型。

位運算符<<,>>總是被轉換成整型計算。

Example-1

字符串類型的位運算

<?phpif (('18' & '32') == '10') { //ord()返回字符串第一個字符的ASCII echo ord('18'); //return 十進制 49, 數字1的二進制為 110001 echo ord('32'); //return 十進制 51, 數字3的二進制為 110011 echo ord('10'); //return 十進制 49, 數字1的二進制為 110001 //因此 110001 & 110011 = 110001}?>

比較運算符

如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換為數值并且比較按照數值來進行。

Example-1

PHP 7.0 新增以下兩個比較運算符:

結合比較運算符 $a<=>$b ,當$a小于、等于、大于 $b時,分別返回一個小于、等于、大于0的integer 值; NULL 合并操作符 ?? ,返回從左往右第一個存在且不為 NULL 的操作數,如果都沒有定義且不為 NULL,則返回 NULL。 <?php $foo = null; $bar = null; $baz = 1; $qux = 2; echo $foo ?? $bar ?? $baz ?? $qux; // outputs 1?>

Example-2

三目運算符可以省略第二個表達式。表達式expr1 ?: expr3在 expr1 求值為 TRUE 時返回 expr1,否則返回 expr3,同時報 ERR_NOTICE錯誤。

比較常用的寫法是(isset($var) && $var) ? $var : 'default_value',如果忽略Notice錯誤,則可簡寫成 @($var?:'default_value');

<?php $a = array(); $a['foo'] = 'oof'; $b = @($a['foo'] ?: 'No foo'); $c = @($a['bar'] ?: 'No bar'); echo $b.PHP_EOL.$c; //outputs: oof No bar?>

Example-3

三目運算符表達式和字符串拼接的時候請小心,因為運算符優先級的問題,將會產生意想不到的結果,建議將表達式用圓括號()括起來。

<?php echo "a string that has a " . (true) ? 'true' : 'false' . "condition in."; //echo true?>

Example-4

建議使用!$var=='str'代替$var != 'str'做判斷,在PHP 7.1.0上測試運行時間如下:

<?php for($bench = 0; $bench < 3; $bench++) { $start = microtime(true); $a = 1; $b = 0; for($i = 0; $i < 100000000; $i++) { if(!$a == 'hello') { $b++; } } $end = microtime(true); echo "Used time: " . ($end-$start) . "<br/>/n"; } /** * $a != 'hello' * Used time: 8.529669046402 * Used time: 8.1041309833527 * Used time: 8.2515349388123 * * !$a == 'hello' * Used time: 5.8349351882935 * Used time: 5.6691370010376 * Used time: 5.6830477714539 */?>

Example-5

當使用比較運算符(==)比較兩個對象變量時,比較的原則是:如果兩個對象的屬性屬性值都相等,而且兩個對象是同一個類的實例,那么這兩個對象變量相等。

而如果使用全等運算符(===),這兩個對象變量一定要指向某個類的同一個實例(即同一個對象)。

<?PHP class A { private $value; function __construct ($value) { $this->value = $value; } } class B { private $value; function __construct ($value) { $this->value = $value; } } $a1 = new A (1); $a2 = new A (2); $b1 = new B (1); var_dump( $a1 == $a2 ); //bool(false) var_dump( $a1 == $b1 ); //bool(false)?>

Example-6

數組與數組的比較,具有較少成員的數組較小,如果運算數 1 中的鍵不存在于運算數 2 中則數組無法比較,否則挨個值比較。

<?php $var_a = array(1 => 1, 2 => 0, 3 => 1); $var_b = array(1 => 1, 3 => 0, 2 => 1); if(1){ //此處代碼無法解釋??? //($var_a > $var_b,$var_a < $var_b,$var_a != $var_b)均為true var_dump($var_a > $var_b); // bool(true) var_dump($var_b > $var_a); // bool(true) var_dump($var_b == $var_a); // bool(false) echo "<br/>"; //($var_c > $var_d ,$var_c < $var_d ,$var_c==$var_d)均為false $var_c = array(1 => 1, 2 => 1, 3 => 0); $var_d = array(1 => 1, 3 => 1, 2 => 0); var_dump($var_c > $var_d); // bool(false) var_dump($var_d > $var_c); // bool(false) var_dump($var_d == $var_c); // bool(false) echo "<br/>"; } $var_e = array(1 => 1, 2 => 0, 3 => 1); $var_f = array(1 => 1, 2 => 1, 3 => 0); var_dump($var_e > $var_f); // bool(false) var_dump($var_f > $var_e); // bool(true) var_dump($var_e == $var_f); // bool(false) echo "<br/>";?>

錯誤控制運算符

當將@放置在一個 PHP 表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉。

運算符只對表達式有效。簡單的規則就是:如果能從某處得到值,就能在它前面加上 @ 運算符。

Example-1

謹慎使用 @ ,它會降低代碼執行速度,它是代碼執行速度與便捷的妥協,代碼在PHP 5.3.29 版本上測試結果如下:

<?php $start =microtime(true); function x() { } for ($i = 0; $i < 1000000; $i++) { @x(); } $end = microtime(true); echo "Used time: " . ($end-$start) . "<br/>/n"; /** * without @ * Used time: 0.16029000282288 * with @ * Used time: 0.7277979850769 */?>

執行運算符

PHP 支持一個執行運算符:反引號(``),PHP 將嘗試將反引號中的內容作為 shell 命令來執行,并將其輸出信息返回。

反引號不能在雙引號字符串中使用。

Example-1

<?php header('content-type:text/html;charset=gbk'); $host = 'www.baidu.com'; echo `ping -n 3 {$host} /n`;?>

遞增/遞減運算符

字符變量的遞增/遞減運算時,字符變量只能遞增,不能遞減,并且只支持純字母(a-z 和 A-Z)。遞增/遞減其他字符變量則無效,原字符串沒有變化。

Example-1

字符變量只能遞增,不能遞減。

<?php $s = 'W'; for ($n=0; $n<10; $n++) { echo ++$s . ' '; //X Y Z AA AB AC AD AE AF AG } echo "<br/>"; for ($n=10; $n>0; $n--) { echo (--$s) . ' ';//AG AG AG AG AG AG AG AG AG AG }?>

Example-2

字符串里有字符’E’且后面緊跟著數字,則會被當成科學計數法,此時字符串的遞增、遞減運算會轉換成數字運算。

<?php $a="9D9"; var_dump(++$a); // string(3) "9E0" $a="9E2"; var_dump(++$a); // float(901)?>

邏輯運算符

“與”和”或”有兩種不同形式運算符(&& / and|| / or)的原因是它們運算的優先級不同,如果不記得優先級,建議給表達式加上圓括號(),防止出現意想不到的結果。

Example-1

<?php $e = false || true; $f = false or true;// false 被賦給 $f,true 被忽略,等價于(($f = false) or true) var_dump($e, $f);?>

字符串運算符

數組運算符

數組運算符包括聯合、全等、相等、不全等、不等運算操作。

Example-1

+運算符把右邊的數組元素附加到左邊的數組后面,如果兩個數組中有相同的鍵名,則只用左邊數組中的,右邊的被忽略。

<?php $a = array("a" => "apple", "b" => "banana"); $b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); echo "<pre>"; $c = $a + $b; // Union of $a and $b var_dump($c); $c = $b + $a; // Union of $b and $a var_dump($c); $a += $b; // Union of $a += $b is $a and $b var_dump($a);?>

Example-2

再次強調,數組中的 + 是聯合的意思,并不是將數組中的每一個元素相加。

<?php $a = array(1,2,3); $b = array(4,5,6,7,8); $c = $a + $b; // Union of $a and $b print_r($c); //Array ([0] => 1 [1] => 2 [2] => 3 [3] => 7 [4] => 8)?>

類型運算符

instanceof 用于確定一個對象是否屬于某一的實例;

instanceof 也可用來確定一個對象是不是繼承自某一父類的子類的實例;

instanceof 也可用于確定一個對象是不是實現了某個接口對象的實例;

Example-1

<?php class MyClass1{ } interface MyInterface{ } class MyClass2 implements MyInterface{ } $a = new MyClass1; $b = new MyClass2; var_dump(!$a instanceof stdClass); //bool(true) var_dump($b instanceof MyClass2); //bool(true) var_dump($b instanceof MyInterface); //bool(true)?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久久在线| 欧美日韩亚洲一区二| 日韩视频在线免费| 日韩高清a**址| 福利二区91精品bt7086| 精品综合久久久久久97| 日韩精品极品在线观看播放免费视频| 九九热这里只有在线精品视| 亚洲成**性毛茸茸| 国产精品久久久亚洲| 久热99视频在线观看| 成人免费看片视频| 中文字幕亚洲专区| 欧美一级视频在线观看| 中文字幕亚洲无线码a| 久久久免费高清电视剧观看| 国产一区二区三区网站| 亚洲毛片在线免费观看| 九九久久久久久久久激情| 日韩欧美有码在线| 亚洲精品福利免费在线观看| 日本久久久久久久久久久| 亚洲视频精品在线| 欧美老肥婆性猛交视频| 亚洲精品久久久久| 日韩欧美成人精品| 欧美激情视频一区二区| 日韩精品在线视频美女| 欧美日韩亚洲系列| 福利精品视频在线| 久久久久免费精品国产| 亚洲色图综合网| 国产精品国产三级国产专播精品人| 国产亚洲日本欧美韩国| 亚洲精品视频网上网址在线观看| 亚洲a∨日韩av高清在线观看| 亚洲成av人乱码色午夜| 麻豆一区二区在线观看| 亚洲国产欧美一区二区三区同亚洲| 亚洲欧洲日产国码av系列天堂| 伊人青青综合网站| 久久亚洲精品毛片| 中文字幕一精品亚洲无线一区| 国产丝袜精品视频| 成人性生交大片免费看视频直播| 精品国产区一区二区三区在线观看| 国产精品视频男人的天堂| 久久久这里只有精品视频| 欧美电影在线观看完整版| 亚洲欧美999| 亚洲人成网站免费播放| 日本高清不卡的在线| 日韩美女在线观看| 久久久视频在线| 久久精品亚洲国产| 久久久999精品视频| 欧美激情精品久久久久| 亚洲欧美日韩爽爽影院| 中文字幕精品视频| 免费99精品国产自在在线| 精品中文字幕乱| 91成人在线观看国产| 色综合天天综合网国产成人网| 成人国产精品一区| 亚洲天堂网站在线观看视频| 欧美电影免费观看| 欧美香蕉大胸在线视频观看| 68精品久久久久久欧美| 日韩精品视频观看| 国产精品精品视频一区二区三区| 亚洲高清在线观看| 亚洲精品v天堂中文字幕| 久久国产精品99国产精| 国产精品久久久久久av| 国产精品日韩欧美大师| 日韩中文字幕视频在线| 日韩免费观看视频| 久久久久99精品久久久久| 亚洲第一区在线| 国产91色在线免费| 国语自产精品视频在线看一大j8| 亚洲精品中文字幕女同| 亚洲国产女人aaa毛片在线| 这里精品视频免费| 亚洲精品久久久久久久久| 精品欧美一区二区三区| 国产精品aaa| 欧美亚洲在线视频| 亚洲经典中文字幕| 久久久久北条麻妃免费看| 欧美一区二区三区四区在线| 国产精品欧美一区二区| 亚洲女人天堂色在线7777| 国产一区二区av| 国产91九色视频| 国产精品99久久久久久久久久久久| 久久亚洲私人国产精品va| 国产欧亚日韩视频| 亚洲视频在线观看网站| 国产日韩换脸av一区在线观看| 国产精品日韩一区| 中文字幕av一区二区| 欧美激情18p| 久久久免费精品| 日韩av电影院| 亚洲欧美在线免费| 精品国偷自产在线视频| 国产精品久久久久久久app| 亚洲国产精品久久精品怡红院| 亚洲一品av免费观看| 国产免费一区二区三区在线观看| 91sao在线观看国产| 韩国三级日本三级少妇99| 5566成人精品视频免费| www高清在线视频日韩欧美| 欧美理论在线观看| 91精品久久久久久久久久入口| 久久夜色精品国产欧美乱| 亚洲精品一区二区三区不| 在线性视频日韩欧美| 久久国产精品视频| 国产精品r级在线| 日本亚洲精品在线观看| 美女国内精品自产拍在线播放| 亚洲一区二区精品| 日韩在线资源网| 亚洲老头老太hd| 黑丝美女久久久| 亚洲国产婷婷香蕉久久久久久| 色偷偷91综合久久噜噜| 日本不卡高字幕在线2019| 国产在线视频2019最新视频| 久久免费成人精品视频| 美日韩精品免费观看视频| 亚洲成人动漫在线播放| 欧美在线视频一区| 国产一区二区美女视频| 中文字幕亚洲欧美日韩2019| 国产精品精品一区二区三区午夜版| 国产精品露脸自拍| 亚洲女在线观看| 久久国产一区二区三区| 国产精品高潮呻吟视频| 国产欧美日韩精品在线观看| 欧美日韩在线视频一区| 久久久久久久久亚洲| 久久精视频免费在线久久完整在线看| 欧美成人午夜激情| 北条麻妃一区二区三区中文字幕| 最新国产成人av网站网址麻豆| 91精品视频观看| 欧美一区二区三区……| 久久激情视频免费观看| 日韩精品极品在线观看播放免费视频| 久久视频这里只有精品| 国产精品青青在线观看爽香蕉| 久久这里只有精品99| 亚洲欧美综合v| 美女少妇精品视频| 国产精品青草久久久久福利99| 亚洲一区二区三区在线视频| 欧美孕妇毛茸茸xxxx| www.久久草.com| 91探花福利精品国产自产在线|