搜尋
首頁後端開發php教程鍵入PHP中的暗示

Type Hinting in PHP

關鍵要點

  • PHP 的類型提示允許開發者在函數聲明中指定參數的預期數據類型,從而增強代碼的健壯性和可讀性。但是,PHP 的類型提示不支持標量數據類型,例如字符串或整數。
  • PHP 是一種弱類型語言,這意味著它不要求你聲明數據類型。在 PHP 5.4 中添加標量 PHP 類型提示一直存在爭議,反對者認為這違背了 PHP 的基本設計。儘管最初得到支持,但由於社區的回應,此功能並未進入 PHP 5.4 版本。
  • 儘管 PHP 的類型提示有限制,但當參數不是標量類型時,你可以執行基本驗證來達到此目的。在這種情況下,可以使用 is_string()is_int() 等函數來引發錯誤或拋出異常。

從 PHP 5 開始,你可以使用類型提示來指定函數聲明中參數的預期數據類型。調用函數時,PHP 將檢查參數是否為指定的類型。如果不是,運行時將引發錯誤並停止執行。有效的類型包括接收對象的類名和接收數組的 array。以下是一個示例:

<?php
function enroll(Student $student, School $school) {
    echo "Enrolling " . $student->name . " in " . $school->name;
}
?>

通過告訴 PHP enroll() 方法期望接收什麼類型的對象,你可以確保學生被註冊到學校而不是修道院或 401K 計劃中。同樣,你知道不會有任何頑固的厚皮動物出現在三年級的第一天。如果我試圖將自己註冊到醫療保險會發生什麼?

<?php
$me = new Student("Amanda");
$medicare = new Program("Medicare");
$enroll = enroll($me, $medicare);
?>

雖然我是一名學生,但會發生以下錯誤:

<code>Catchable fatal error: Argument 2 passed to enroll() must be an instance of School, instance of Program given, called in typehint.php on line 32 and defined in typehint.php on line 6</code>

如果使用 <cod>null</cod> 作為參數的默認值,它也將被允許。以下是一個示例,這次使用數組:

<?php
function startParty(array $guests, array $food = null) {
    // party stuff...
}
$guests = array("Susan Foreman", "Sarah Jane Smith", "Rose Tyler", "Donna Noble");
startParty($guests, null);
?>

只要有客人,無論有沒有食物,都會有派對。

類型提示的局限性

任何已定義的類都可以是有效的類型提示,儘管 PHP 不支持泛型對象的類型提示。其他情況呢?這是一個關於 PHP 類型提示局限性的特殊示例:

<?php
function stringTest(string $string) {
    echo $string;
}
stringTest("definitely a string");
?>
<code>Catchable fatal error: Argument 1 passed to stringTest() must be an instance of string, string given, called in typehint.php on line 42 and defined in typehint.php on line 39</code>

你不是第一個想到“這是什麼瘋狂?我給了你一個字符串實例,你卻抱怨它必須是一個字符串實例!”沒關係。這是常有的事。事實上,乍一看,這可能是一個相當令人困惑的錯誤消息。 stringTest() 並不是在尋找字符串,而是在尋找字符串類的實例。 PHP 的類型提示不支持標量數據類型,例如字符串或整數值。但是沒關係!如果你需要在參數不是標量類型(例如字符串或整數)時引發錯誤或拋出異常,可以使用 is_string()is_int() 等函數執行基本驗證來達到此目的。

標量戰爭

關於在 PHP 5.4 中添加標量 PHP 類型提示,存在一些爭議。反對更改的人認為,這種支持會違背 PHP 的基本設計。 PHP 被認為是一種弱類型語言。本質上,這意味著 PHP 不要求你聲明數據類型。變量仍然與它們關聯的數據類型相關聯,但你可以做一些激進的事情,例如將字符串添加到整數而不會導致錯誤。 2010 年 5 月,對標量類型提示的支持被添加到 PHP 主幹中。但由於社區的回應,此功能不會進入 5.4 版本。

總結

類型提示是引入 PHP 用於面向對象編程的技術(特別是用於識別捕獲異常的類型)。我鼓勵你閱讀更多關於在此處使用對象的信息。 圖片來自 Carlos E. Santa Maria / Shutterstock

PHP 類型提示常見問題解答 (FAQ)

PHP 類型提示的重要性是什麼?

PHP 中的類型提示是一個重要特性,允許開發者在函數聲明中指定參數的預期數據類型。它通過確保函數接收正確類型的數值來增強代碼的健壯性。這導致代碼中的錯誤和漏洞更少,使其更可靠且更容易調試。它還提高了代碼的可讀性,使其他開發者更容易理解代碼的功能。

我可以在 PHP 中對所有數據類型使用類型提示嗎?

PHP 支持對多種數據類型進行類型提示,包括對象、數組、接口、可調用和可迭代。但是,需要注意的是,PHP 直到 7.0 版本才支持標量類型提示(int、float、string 和 bool)。從 PHP 7.0 開始,你可以對所有數據類型使用類型提示。

如果傳遞的參數的數據類型與類型提示不匹配會發生什麼?

如果傳遞的參數的數據類型與函數聲明中的類型提示不匹配,PHP 將拋出“致命錯誤”。此錯誤將停止腳本的執行,防止任何進一步的處理。這就是為什麼必須確保將正確的數據類型傳遞給函數的原因。

PHP 類型提示如何與類繼承一起工作?

在 PHP 中,類型提示可以與類繼承一起使用。如果函數期望某個特定類類型的參數,它也將接受該類的子類的實例。這是因為子類是其父類的特定類型,因此滿足類型提示。

我可以在 PHP 的內置函數中使用類型提示嗎?

不可以,PHP 中的類型提示只能用於用戶定義的函數。 PHP 的內置函數不支持類型提示。但是,這些函數通常具有處理不同數據類型的內部機制。

PHP 類型提示中的嚴格模式是什麼?

PHP 類型提示中的嚴格模式是 PHP 7.0 中引入的一個特性。啟用嚴格模式後,PHP 將根據類型提示強制執行數據類型的精確匹配。如果傳遞的參數的數據類型與類型提示不完全匹配,即使該參數可以強制轉換為正確的類型,PHP 也會拋出“致命錯誤”。

如何在 PHP 中啟用嚴格模式?

要在 PHP 中啟用嚴格模式,你需要在 PHP 文件的頂部聲明 declare(strict_types=1);。此聲明必須是腳本中的第一個語句。

PHP 類型提示中弱模式和嚴格模式的區別是什麼?

PHP 類型提示中弱模式和嚴格模式的區別在於 PHP 如何處理類型不匹配。在弱模式下,如果可能,PHP 將嘗試將傳遞的參數強制轉換為正確的數據類型。相反,在嚴格模式下,PHP 將不會嘗試強制轉換值,如果數據類型不完全匹配,則會拋出“致命錯誤”。

我可以對函數返回值使用類型提示嗎?

是的,從 PHP 7.0 開始,你可以對函數返回值使用類型提示。此特性允許你指定函數返回值的預期數據類型,從而增強代碼的可靠性和可讀性。

PHP 中的可空類型提示是什麼?

可空類型提示是 PHP 7.1 中引入的一個特性。它允許你指定函數參數或返回值可以是指定類型或 null。要使類型提示可為空,請在類型名稱前加上問號 (?)。例如,“?string”表示該值可以是字符串或 null。

以上是鍵入PHP中的暗示的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
11個最佳PHP URL縮短腳本(免費和高級)11個最佳PHP URL縮短腳本(免費和高級)Mar 03, 2025 am 10:49 AM

長URL(通常用關鍵字和跟踪參數都混亂)可以阻止訪問者。 URL縮短腳本提供了解決方案,創建了簡潔的鏈接,非常適合社交媒體和其他平台。 這些腳本對於單個網站很有價值

Instagram API簡介Instagram API簡介Mar 02, 2025 am 09:32 AM

在Facebook在2012年通過Facebook備受矚目的收購之後,Instagram採用了兩套API供第三方使用。這些是Instagram Graph API和Instagram Basic Display API。作為開發人員建立一個需要信息的應用程序

在Laravel中使用Flash會話數據在Laravel中使用Flash會話數據Mar 12, 2025 pm 05:08 PM

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

構建具有Laravel後端的React應用程序:第2部分,React構建具有Laravel後端的React應用程序:第2部分,ReactMar 04, 2025 am 09:33 AM

這是有關用Laravel後端構建React應用程序的系列的第二個也是最後一部分。在該系列的第一部分中,我們使用Laravel為基本的產品上市應用程序創建了一個RESTFUL API。在本教程中,我們將成為開發人員

簡化的HTTP響應在Laravel測試中模擬了簡化的HTTP響應在Laravel測試中模擬了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的捲曲:如何在REST API中使用PHP捲曲擴展php中的捲曲:如何在REST API中使用PHP捲曲擴展Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

在Codecanyon上的12個最佳PHP聊天腳本在Codecanyon上的12個最佳PHP聊天腳本Mar 13, 2025 pm 12:08 PM

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

宣布 2025 年 PHP 形勢調查宣布 2025 年 PHP 形勢調查Mar 03, 2025 pm 04:20 PM

2025年的PHP景觀調查調查了當前的PHP發展趨勢。 它探討了框架用法,部署方法和挑戰,旨在為開發人員和企業提供見解。 該調查預計現代PHP Versio的增長

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境