PHP - 严谨型別:初學者指南

你好,未來的PHP法師!我很興奮能帶你進入PHP严谨型別的迷人世界。作為一個教學PHP多年的老師,我可以告訴你,理解這個概念會讓你成為一名更好的編程師。那麼,我們來一起深入探討吧!

PHP - Strict Typing

什麼是严谨型別?

在我們深入細節之前,讓我們先了解一下什麼是严谨型別。想像一下你正在烤蛋糕。你會用鹽來代替糖嗎?當然不會,因為配方對食材的使用是非常严格的。同樣地,PHP中的严谨型別就是關於在我們的代碼中使用數據類型的精確性。

严谨型別的重要性

你可能會想,"為什麼我要關心严谨型別呢?" 亲爱的學徒,严谨型別能夠幫助我們預防錯誤,使代碼更可靠,甚至可以提高性能。這就像是為你的代碼請來了一個警覺的守衛!

示例:鬆散型別的危險

讓我們從一個簡單的例子開始,來展示為什麼严谨型別可以救命:

function addNumbers($a, $b) {
return $a + $b;
}

echo addNumbers(5, "10");  // 輸出:15
echo addNumbers("5", "10");  // 輸出:15

在這個例子中,PHP會自動將字符串"10"轉換為整數。這種行為,稱為類型遊戲,有時會導致意外的結果。如果有人不小心傳遞了一個無法轉換為數字的字符串,會怎麼樣?混亂將會發生!

類型提示的出現

類型提示就像是你函數參數的名稱標籤。它告訴PHP,"嘿,我只想要這個特定的數據類型!"

讓我們升級我們之前的例子:

function addNumbers(int $a, int $b) {
return $a + $b;
}

echo addNumbers(5, 10);  // 輸出:15
echo addNumbers("5", "10");  // 抛出TypeError

現在,如果有人試圖傳遞字符串而不是整數,PHP會發火(技術上,是TypeError)。這就像是在俱樂部門口有個保鏢檢查身份證!

可用的類型提示

PHP提供了各種類型提示。這裡有一個最常見類型提示的便捷表格:

類型提示 描述
int 整數
float 浮點數
string 字符串
bool 布爾值(true/false)
array 数组
object 任何对象
callable 可以調用的函數或方法
iterable 实现了Traversable的数组或对象
self 使用它的同一個類
?type 可空型別(可以是指定型別或null)

严谨型別的強大之處

現在,讓我們用strict_types來提升一個層次。這就像是為PHP打開"超級严谨模式"。

要啟用严谨型別,將以下這行代碼添加到你的PHP文件的頂部:

<?php
declare(strict_types=1);

function divideNumbers(int $a, int $b): float {
return $a / $b;
}

echo divideNumbers(10, 3);  // 輸出:3.3333333333333
echo divideNumbers(10, "3");  // 抛出TypeError

啟用strict_types後,PHP會對類型變得更加挑剔。它甚至不會嘗試將"3"轉換為整數。這就像是有一個堅持精確計算的數學老師!

返回類型

你注意到函數參數之後的: float了嗎?那是返回類型聲明。它告訴PHP,這個函數必須返回一個浮點數。

function greet(string $name): string {
return "Hello, $name!";
}

echo greet("Alice");  // 輸出:Hello, Alice!
echo greet(123);  // 抛出TypeError

實際示例:一個簡單的计算器

讓我們把所有知識綜合起來,創建一個更實際的例子:

<?php
declare(strict_types=1);

class Calculator {
public function add(float $a, float $b): float {
return $a + $b;
}

public function subtract(float $a, float $b): float {
return $a - $b;
}

public function multiply(float $a, float $b): float {
return $a * $b;
}

public function divide(float $a, float $b): float {
if ($b == 0) {
throw new Exception("除以零是不允許的");
}
return $a / $b;
}
}

$calc = new Calculator();

try {
echo $calc->add(5.5, 3.2) . "\n";  // 輸出:8.7
echo $calc->subtract(10, 4) . "\n";  // 輸出:6
echo $calc->multiply(2.5, 3) . "\n";  // 輸出:7.5
echo $calc->divide(15, 3) . "\n";  // 輸出:5
echo $calc->divide(10, 0);  // 抛出Exception
} catch (TypeError $e) {
echo "類型錯誤:" . $e->getMessage();
} catch (Exception $e) {
echo "錯誤:" . $e->getMessage();
}

在這個例子中,我們創建了一個Calculator類,其方法使用了严谨型別。注意我們是如何使用float來處理所有數字,以應對整數和小數。

結論

恭喜你!你剛剛踏出了進入PHP严谨型別世界的第一步。記住,严谨型別就像是在編碼時繫上安全帶——起初可能會感覺有些限制,但它是為了保護你免受惡劣錯誤和崩溃的侵害。

在你繼續你的PHP旅程時,請繼續練習使用严谨型別。它會讓你成為一名更有紀律且可靠的編程師。誰知道呢?有一天,你可能會成為教導他人關於PHP严谨型別奇妙之處的人!

開心編程,願你的類型總是严谨,錯誤少之又少!

Credits: Image by storyset