首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 算術運算符完整速查表:優先級、類型轉換與實戰陷阱

     編輯:PHP 相關知識

PHP 算術運算符完整速查表:優先級、類型轉換與實戰陷阱

算術運算符是 PHP 程序進行數學計算的基礎。本文整理完整運算符表格,重點解析優先級規則、類型自動轉換行為及常見陷阱,助你寫出無 Bug 的計算邏輯。

運算符完整列表

運算符名稱說明示例結果
+加法兩數相加2 + 35
-減法兩數相減5 - 23
*乘法兩數相乘5 * 210
/除法兩數相除,**永遠返回浮點數**15 / 53.0
%取模(餘數)除法餘數,結果符號與被除數一致5 % 2
10 % 8
10 % 2
1
2
0
**冪運算次方(PHP 5.6+)2 ** 38
-取負一元運算符,取反數值-$a-10 (若 $a=10)
.字符串連接非算術,但優先級高於加減"Hi" . "Ha""HiHa"

優先級與結合性(高 → 低)

  1. **(右結合)
  2. + - ~(一元,右結合)
  3. * / %(左結合)
  4. + -(二元,左結合)
  5. .(左結合)
<?php
echo 2 + 3 * 4;      // 14 (* 優先於 +)
echo (2 + 3) * 4;    // 20 (括號提升優先級)
echo 2 ** 3 ** 2;    // 512 (右結合:2 ** (3 ** 2) = 2 ** 9)
echo -2 ** 2;        // -4 (** 優先於一元 -:-(2**2))
echo (-2) ** 2;      // 4
?>

類型自動轉換規則(關鍵!)

PHP 算術運算會自動將操作數轉換為數值類型:

原始值轉換為數值說明
true1布爾值
false0
"123"123純數字字符串
"10.5"10.5浮點字符串
"abc"0非數字開頭 → 0 並觸發 E_NOTICE
"5abc"5數字開頭 → 取前導數字部分
[]0空陣列 → 0
[1,2]1非空陣列 → 1 並觸發 E_NOTICE
null0

實戰陷阱與避坑指南

1. 除法永遠返回浮點數

$a = 10 / 4; // 2.5 (float), 不是 2
// 需整數除法用 intdiv() (PHP 7+) 或 (int)($a/$b)
echo intdiv(10, 4); // 2

2. 取模與負數

echo -5 % 3;  // -1 (結果符號跟隨被除數)
echo 5 % -3;  //  1

3. 字符串連接優先級陷阱

echo "結果:" . 2 + 3; // 輸出 3 (!) 
// 解析為 ("結果:" . 2) + 3 → "結果:2" 轉數值 0 + 3 = 3
// 正確寫法:
echo "結果:" . (2 + 3); // "結果:5"

4. 浮點數精度問題

echo 0.1 + 0.7; // 0.7999999999999999
// 金額計算請用 BCMath 或整數分單位
echo bcadd('0.1', '0.7', 2); // "0.80"

代碼示例:綜合演示

<?php
$x = 10; $y = 6;
echo "加法: " . ($x + $y) . "\n";    // 16
echo "減法: " . ($x - $y) . "\n";    // 4
echo "乘法: " . ($x * $y) . "\n";    // 60
echo "除法: " . ($x / $y) . "\n";    // 1.666...
echo "取模: " . ($x % $y) . "\n";    // 4
echo "冪運算: " . ($x ** $y) . "\n"; // 1000000
?>

最佳實踐:涉及金額、精度敏感計算務必使用 BCMath 擴展或整數(分)運算;複雜表達式加括號明確優先級;關鍵計算邏輯編寫單元測試覆蓋邊界值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved