PHP 7 帶來革命性效能提升(約 2 倍)與語言層面重大改進。以下深度解析五大核心新特性,附代碼實例與最佳實踐。

??簡化「判斷變數是否存在且非 null,否則給預設值」的邏輯。
// PHP 7 新寫法
$a = $_GET['a'] ?? 1;
// 等同於 PHP 5 的冗長寫法
$a = isset($_GET['a']) ? $_GET['a'] : 1;
// 差異:三元運算符 ?: 要求變數已定義,?? 不要求
// $a ?: 1 // 若 $a 未定義會觸發 Notice
// $a ?? 1 // 安全,無 Notice
可鏈式使用:$a = $b ?? $c ?? $d ?? 'default';
在函數簽名後添加 : type 指定返回類型,支援 int、float、string、bool、array、callable、類別/介面名。
function arraysSum(array ...$arrays): array {
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
declare(strict_types=1);float 1.0 → int 1)。TypeError 致命錯誤,杜絕隱式轉換導致的邏輯 Bug。// 弱模式(預設)
function foo($a): int { return $a; }
foo(1.0); // 正常返回 int 1
// 嚴格模式
declare(strict_types=1);
function foo($a): int { return $a; }
foo(1.0); // Fatal error: Return value must be of type integer, float returned
參數現在可聲明 int、float、string、bool,同樣受 strict_types 控制。
// 弱模式
function sumOfInts(int ...$ints) {
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1)); // int(9) 自動轉型
// 嚴格模式
declare(strict_types=1);
sumOfInts(2, '3', 4.1); // TypeError: Argument 2 must be int, string given
use 批量導入同一命名空間下的類別、函數、常數可用大括號一次導入,代碼更乾淨。
use Some\Namespace\{ClassA, ClassB, ClassC as C};
use function Some\Namespace\{fn_a, fn_b, fn_c};
use const Some\Namespace\{ConstA, ConstB, ConstC};
配合 Composer PSR-4 自動載入,無副作用。
new class implements Interface { ... } 即時建立一次性物件。define() 定義常數陣列:define('ALLOWED', ['GET', 'POST'])。call() 方法:$closure->call($object, $args) 動態綁定 $this。return 最終返回值、yield from 委派子生成器。<=>:比較兩值,返回 -1/0/1,適合排序回調。**:2 ** 3 === 8。\u{xxxx}:echo "\u{4f60}\u{65b0}"; // 你好。
升級 PHP 7 不僅享受效能紅利,更能用現代語法寫出更健壯、可維護的代碼。建議全面啟用 declare(strict_types=1); 拥抱強類型風格。