上一篇跟大家介紹邏輯判斷與運算子後,接下來就繼續完成下篇運算子的部分。
運算子
PHP 運算子用於執行變數與數值的運算,主要分為算術、賦值、比較、邏輯、字串及遞增/遞減等類型。
數學運算子
加 : +
減 : -
乘 : *
除 : /
取餘數 : %
次方 : **
正數 : +$variable
負數 : -$variable
<?php
$a = 10;
$b = 2;
$sum = $a + $b; // 加法,結果為 12
$difference = $a - $b; // 減法,結果為 8
$product = $a * $b; // 乘法,結果為 20
$quotient = $a / $b; // 除法,結果為 5
$remainder = $a % $b; // 取餘,結果為 0
$power = $a ** $b; // 指數,結果為 100
echo "加法: $sum\n";
echo "減法: $difference\n";
echo "乘法: $product\n";
echo "除法: $quotient\n";
echo "取餘: $remainder\n";
echo "指數: $power\n";
echo "正數: ".+$a;
echo "負數: ".-$a;
?>
遞增、遞減運算子
先遞增 : ++$variable
先遞減 : --$variable
後遞增 : $variable++
後遞減 : $variable--
<?php
$a = 10;
$b = 5;
$c = 4;
$d = 3;
$a++;
echo $a; //輸出11
$b--;
echo $b; //輸出4
echo(++$c);//輸出5
echo(--$d);//輸出2
?>
指派運算子
賦值 : =
累加 : +=
累減 : -=
累乘 : *=
累除 : /=
累取餘數 : %=
連接 : .=
Ternary Operator(三元運算子) : ? :
類似 if...else ,當$condition為真時,執行statement1,否則執行statement2。
($condition) ? ($statement1) : ($statement2)
Null Coalescing Operator(空合併運算子) : ??
三元運算子的進階版,傳回第一個非空值,意思是如果第一個值是空值就回傳第二個值。
($variable1)??($variable2)
<?php
$a = 10;
$b = 5;
$c = null;
$d = false;
echo ($a+=$b);//$a =$a + $b 輸出15
echo ($a-=$b);//$a =$a - $b 輸出5
echo ($a*=$b);//$a =$a * $b 輸出50
echo ($a/=$b);//$a =$a / $b 輸出2
echo ($a%=$b);//$a =$a % $b 輸出0
echo ($a.=$b);//$a =$a . $b 輸出105
echo ($d?$a:$b);//$d為假 輸出5
echo ($a ?? $c); // 輸出10
?>
邏輯判斷運算子
數位邏輯中的及閘(and)、或閘(or)、反閘(not)和互斥或閘(xor)。
否(not) : !
為相反,1變0、0變1
與(and) : &&
都為1才為1
或(or) : ||
有1就為1
與(and) : and
都為1才為1
或(or) : or
有1就為1
互斥(xor) : xor
一樣為0,反之為1
<?php
$a = true;
$b = false;
var_dump($a&&$b); //輸出 bool(false)
var_dump($a||$b); //輸出 bool(true)
var_dump(!$b); //輸出 bool(true)
var_dump($a and $b); //輸出 bool(false)
var_dump($a or $b); //輸出 bool(true)
var_dump($a xor $b); //輸出 bool(true)
?>
運算符優先級
當同一個條件中有多個運算子時,這時運算子的優先級就很重要了,這裡僅介紹邏輯判斷的部分,詳情可參考官方文檔:
https://www.php.net/manual/zh/language.operators.precedence.php
! >> &&、|| >> and、or >> xor
練習題:
<?php
$a = true;
$b = false;
$c = true;
var_dump($a xor $c&&$b||$b);
?>
在這邊休息一下,試試看能不能找出答案是甚麼~
位元運算子
用來對整數中的位元進行2進位操作,在進行底層數據處理、權限設定或高效能計算時非常有用。
與(and) : &
都為1才為1
或(or) : |
有1就為1
互斥(xor) : ^
一樣為0,反之為1
否(not) : ~
跟反閘一樣變0,0變1,也就是1補數,不過目前電腦儲存整數的方式幾乎都使用2補數,所以反轉時如果是首個位元是1(也就是負)時,就會做2補數,突然複習了一下機概😂
左移 : <<
向左位移指定位數,相當於乘以2
右移 : >>
向右位移指定位數,相當於除以2
<?php
$a = 5;//0101
$b = 6;//0110
echo ($a & $b); //輸出 0100
echo ($a | $b); //輸出 0111
echo ($a ^ $b); //輸出 0011
echo (~$a); //輸出 -6
echo ($a << 1); //輸出 1010
echo ($a >> 1 ); //輸出 0010
?>
字串運算子
連接字串和變數、常數或函數用 : .
<?php
$a = 10;
echo "正數: ".-$a;
?>
比較運算子
相等(值相等) : ==
全等(值與資料型態都相等) : ===
不相等 : !=、<> 不全等 : !==
大於 : >
小於 : <
大於等於 : >=
小於等於 : <=
比較 : <=>
左邊比右邊大回傳1
左邊比右邊小回傳-1
左邊與右邊一樣大回傳0
<?php
$a = 5;
$b = "5";
$c = 6;
var_dump ($a==$b); //輸出bool(true)
var_dump($a===$b); //輸出bool(false)
var_dump ($a != $c); //輸出bool(true)
var_dump ($a <> $c); //輸出bool(true)
var_dump ($a !== $b);//輸出bool(true)
var_dump ($a > $c); //輸出bool(false)
var_dump ($a < $c); //輸出bool(true)
var_dump ($a >= $c); //輸出bool(false)
var_dump ($a <= $c); //輸出bool(true)
var_dump ($a <=> $c);//輸出int(-1)
?>
錯誤控制運算子
在php程式執行發生錯誤時,可以抑制錯誤訊息產生,避免在網頁上顯示PHP的錯誤訊息,並繼續執行程式碼。使用方式只要將 @ 符號加在常發生錯誤的指令前面。
<?php
$a = @($b*255);
echo ("測試我會不會被執行到");//輸出 測試我會不會被執行到
?>
可搭配內建函數 die() 自訂顯示錯誤訊息,當指令回傳false時便會執行 die()。
<?php
$a = @($b*255) or die("program error");//因為$b沒有事先進行宣告,輸出program error
echo ("測試我會不會被執行到");
?>
不過有利必有弊,使用錯誤控制運算子可能會增加偵錯的困難,只是暫時的,php還是有提供其他錯誤處理機制,像是 try-catch,在發生錯誤時能執行相對應的處理機制。
執行運算子
執行指令運算子能讓 PHP 程式執行作業系統中的 shell 指令。使用時只要將執行指令前後用 `符號包含即可。
<?php
$out = `dir`;//windows顯示檔案清單以列出目錄中的檔案及子目錄
$result = `ls`;//linux顯示檔案清單以列出目錄中的檔案及子目錄
echo $out;
echo $result;
?>
指令詳細參數使用方法可以參考各作業系統指令介紹~
本篇文章到這裡就結束了,大家會希望繼續探索PHP更深層的內容還是想要穿插一些HTML+CSS的內容呢🫡,歡迎在下方討論討論。
如果喜歡我的文章或覺得有用的話,歡迎動動手指點擊愛心,你/妳的支持是我最大的動力,我們下篇文章見🙌。


