PHP - 回傳類型聲明

你好,有志於编程的夥伴們!今天,我們將踏上一段令人興奮的旅程,進入PHP的世界,並探索一個非常吸引人的概念——回傳類型聲明。別擔心你如果是編程新手;我會一步一步地引導你,就像這些年來我對我的學生所做的一樣。所以,來一杯咖啡,讓我們一起深入探究!

PHP - Return Type Declarations

回傳類型聲明是什麼?

在我們深入細節之前,讓我們先了解一下回傳類型聲明到底是什麼。簡單來說,這是一種告訴PHP函數將會回傳什麼類型數據的方法。這就像在一個盒子上貼標籤,上面寫著「這個盒子裡裝的是玩具」或「這個盒子裡裝的是書」。這有助於PHP(和其他編程者)知道在使用你的函數時該期待什麼。

它們為什麼重要?

  1. 清晰度:它讓你的代碼更易於理解。
  2. 錯誤預防:如果你試圖回傳錯誤的數據類型,PHP可以及早捕獲錯誤。
  3. 更好的文檔:這就像為未來的你(或其他開發者)留下一張紙條。

現在,讓我們看一些範例,實際看看這是怎麼運作的。

基本範例:回傳整數

讓我們從一個簡單的函數開始,這個函數用於將兩個數字相加:

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

$result = addNumbers(5, 3);
echo $result; // 輸出:8

在這個範例中,函數括號後面的 : int 是回傳類型聲明。它告訴PHP這個函數總是會回傳一個整數。

分析:

  1. function addNumbers(int $a, int $b): 這定義了一個接受兩個整數參數的函數。
  2. : int: 這是我們的回傳類型聲明,保證函數將會回傳一個整數。
  3. return $a + $b: 函數將兩個數字相加並回傳結果。

如果我們試圖回傳非整數類型的數據,PHP會拋出錯誤。這有助於及早發現錯誤!

範例:回傳字符串

讓我們再試一個範例,這次回傳一個字符串:

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

$greeting = greet("Alice");
echo $greeting; // 輸出:Hello, Alice!

在這裡,: string 告訴PHP我們的函數總是會回傳一個字符串。

範例:回傳數組

數組在PHP中非常有用。這是我們如何在數組中使用回傳類型聲明的:

function getFavoriteColors(): array
{
return ["blue", "green", "purple"];
}

$colors = getFavoriteColors();
print_r($colors);
// 輸出:
// Array
// (
//     [0] => blue
//     [1] => green
//     [2] => purple
// )

: array 聲明確保這個函數總是會回傳一個數組。

範例:回傳布爾值

布爾值對於檢查條件的函數來說非常好用。這是一個範例:

function isEven(int $number): bool
{
return $number % 2 === 0;
}

$checkEven = isEven(4);
var_dump($checkEven); // 輸出:bool(true)

$checkOdd = isEven(7);
var_dump($checkOdd); // 輸出:bool(false)

: bool 聲明告訴PHP這個函數總是會回傳 truefalse

範例:回傳物件

物件稍微複雜一些,但它們非常強大。這是一個簡單的範例:

class Person {
public $name;
public $age;

public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}

function createPerson(string $name, int $age): Person
{
return new Person($name, $age);
}

$alice = createPerson("Alice", 30);
echo $alice->name; // 輸出:Alice
echo $alice->age;  // 輸出:30

在這裡,: Person 告訴PHP這個函數總是會回傳一個 Person 類型的物件。

可空回傳類型

有時,函數可能不總是能夠回傳一個值。在這種情況下,我們可以使用可空回傳類型:

function findUser(int $id): ?string
{
$users = ["1" => "Alice", "2" => "Bob", "3" => "Charlie"];
return $users[$id] ?? null;
}

$user = findUser(2);
echo $user; // 輸出:Bob

$nonExistentUser = findUser(4);
var_dump($nonExistentUser); // 輸出:NULL

?string 回傳類型意味著這個函數會回傳一個字符串或 null

聯合類型(PHP 8.0+)

在PHP 8.0及之後的版本中,你可以指定多個可能的回傳類型:

function processInput(string $input): int|float
{
if (strpos($input, '.') !== false) {
return floatval($input);
}
return intval($input);
}

$intResult = processInput("42");
var_dump($intResult); // 輸出:int(42)

$floatResult = processInput("3.14");
var_dump($floatResult); // 輸出:float(3.14)

int|float 回傳類型意味著這個函數可以回傳一個整數或一個浮點數。

結論

回傳類型聲明就像在代碼中放置路標。它們引導你和其他人,讓你的意圖清晰,並幫助防止錯誤。隨著你繼續在PHP的旅程上前行,你會發現它們對於編寫更乾淨、更可靠的代碼非常有用。

記住,編程是一項通過練習而增長的技能。如果它立即沒有引起你的共鳴,不要氣餒。繼續編碼,繼續嘗試,最重要的是,繼續享受樂趣!

這裡是一個我們所涵蓋的回傳類型的快速參考表:

回傳類型 描述 範例
int 整數 : int
float 過渡數 : float
string 字符串 : string
bool 布爾值 : bool
array 數組 : array
object 物件(例如 : Person : ClassName
?type 可空類型 : ?string
type1|type2 聯合類型(PHP 8.0+) : int\|float

祝你好運,未來的PHP大師!快樂編程!

Credits: Image by storyset