PHP - 數值類型聲明

你好,有抱負的程式設計師們!今天,我們將踏上一段令人興奮的旅程,進入PHP的領域,特別聚焦於數值類型聲明。別擔心,如果這些詞語現在對你來說像是外星語言——到了這個教學的結尾,你將會像一個有經驗的開發者一樣,輕鬆使用這些術語!

PHP - Scalar Type Declarations

數值類型聲明是什麼?

在我們深入之前,讓我們先解釋一下“數值類型聲明”到底意味著什麼。在程式設計中,“數值”是指單一值,比如數字或文本字符串。而“類型聲明”是一種花哨的說法,我們告訴PHP我們期望一個函數接收或返回什麼類型的數據。

想像你正在經營一個檸檬水攤。當你請求檸檬時,你不會希望有人給你一個籃球,對吧?類型聲明的作用基本上就是這樣——確保你的代碼得到正確類型的數據來工作。

PHP 7中的數值類型聲明

PHP 7引入了一個遊戲規則改變者:為函數參數和返回值聲明數值類型的能力。這是一件大事,因為它幫助及早發現錯誤,並使代碼更可靠。

讓我們看一個簡單的例子:

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

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

在這段代碼中:

  • int $a, int $b:我們在說明 $a$b 都應該是整數。
  • : int:函數之後的部分聲明該函數將返回一個整數。

現在,讓我們試試一些壞事:

echo addNumbers("5", "10");

意外!這仍然可以工作並輸出15。但是為什麼呢?歡迎來到……

强制模式

默認情況下,PHP 7運行在所謂的“強制模式”下。這就像有一個非常理解你的朋友,即使你表達得不是很清楚,他也會試圖理解你的意思。

在強制模式下,PHP會試圖將值轉換(或“強制”)為聲明的類型,如果可能的话。所以當我們傳遞字符串"5"和"10"時,PHP會認為,“我明白你要做什麼”,並將它們轉換為整數。

以下是一些常見的強制轉換表:

輸入 聲明類型 結果
"42" int 42
"3.14" float 3.14
1 string "1"
true int 1

但如果我們想要PHP更嚴格怎麼辦?那就來看看……

嚴格模式

嚴格模式就像有一個堅持精確答案的老師。要啟用嚴格模式,在PHP文件的頂部添加這行代碼:

declare(strict_types=1);

現在,讓我們再試一次我們的壞例子:

declare(strict_types=1);

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

echo addNumbers("5", "10");

砰!這將會抛出一個TypeError。PHP在說,“我要求整數,你給了我字符串。我對此很不開心。”

為什麼使用數值類型聲明?

  1. 更清晰的代碼:這就像給未來的你(或其他開發者)留下一張便條。“嘿,這個函數期望數字!”

  2. 及早發現錯誤:而不是得到奇怪的結果,你會得到直接指向問題的錯誤。

  3. 更好的性能:當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();

echo $calc->add(5.5, 4.5);      // 輸出:10
echo $calc->subtract(10, 3);    // 輸出:7
echo $calc->multiply(3, 4);     // 輸出:12
echo $calc->divide(10, 2);      // 輸出:5

// 這將在嚴格模式下抛出錯誤
// echo $calc->add("5", "10");

在這個例子中,我們創建了一個Calculator類,其所有方法都使用浮點數類型聲明。這確保了我們所有的計算都是在數字上進行的,防止了任何意外的字符串連接或其他類型相關的失誤。

結論

PHP中的數值類型聲明就像山路上的護欄。它們幫助你的代碼保持在正確的軌道上,並使發現問題變得更容易。雖然它們起初可能看起來有些麻煩,但相信我——未來的你會為這種清晰度和安全性感到感激。

記住,編程是關於清晰的溝通——不僅僅與計算機,還有其他開發者(包括未來的你!)。類型聲明是你工具箱中的另一個工具,用於编写更清晰、更安全、更高效的代碼。

現在去聲明那些類型吧!你的代碼會感謝你,你的開發者夥伴也會這樣。快樂編程!

Credits: Image by storyset