關鍵要點
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
作為參數的默認值,它也將被允許。以下是一個示例,這次使用數組:
<?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 直到 7.0 版本才支持標量類型提示(int、float、string 和 bool)。從 PHP 7.0 開始,你可以對所有數據類型使用類型提示。
如果傳遞的參數的數據類型與函數聲明中的類型提示不匹配,PHP 將拋出“致命錯誤”。此錯誤將停止腳本的執行,防止任何進一步的處理。這就是為什麼必須確保將正確的數據類型傳遞給函數的原因。
在 PHP 中,類型提示可以與類繼承一起使用。如果函數期望某個特定類類型的參數,它也將接受該類的子類的實例。這是因為子類是其父類的特定類型,因此滿足類型提示。
不可以,PHP 中的類型提示只能用於用戶定義的函數。 PHP 的內置函數不支持類型提示。但是,這些函數通常具有處理不同數據類型的內部機制。
PHP 類型提示中的嚴格模式是 PHP 7.0 中引入的一個特性。啟用嚴格模式後,PHP 將根據類型提示強制執行數據類型的精確匹配。如果傳遞的參數的數據類型與類型提示不完全匹配,即使該參數可以強制轉換為正確的類型,PHP 也會拋出“致命錯誤”。
要在 PHP 中啟用嚴格模式,你需要在 PHP 文件的頂部聲明 declare(strict_types=1);
。此聲明必須是腳本中的第一個語句。
PHP 類型提示中弱模式和嚴格模式的區別在於 PHP 如何處理類型不匹配。在弱模式下,如果可能,PHP 將嘗試將傳遞的參數強制轉換為正確的數據類型。相反,在嚴格模式下,PHP 將不會嘗試強制轉換值,如果數據類型不完全匹配,則會拋出“致命錯誤”。
是的,從 PHP 7.0 開始,你可以對函數返回值使用類型提示。此特性允許你指定函數返回值的預期數據類型,從而增強代碼的可靠性和可讀性。
可空類型提示是 PHP 7.1 中引入的一個特性。它允許你指定函數參數或返回值可以是指定類型或 null。要使類型提示可為空,請在類型名稱前加上問號 (?)。例如,“?string”表示該值可以是字符串或 null。
以上是鍵入PHP中的暗示的詳細內容。更多資訊請關注PHP中文網其他相關文章!