我剛剛遇到一個問題,我無法解釋為什么會這樣。
我有一個只接受字串型別引數的函式。
示例類
class A {
public function __construct() {
$data = new \Illuminate\Support\Collection();
// getType($data) => object
$this->make($data);
}
private function make(string $str): string {
// getType($str) => string
...
}
}
問題:為什么我可以傳遞一個集合,即使只允許字串?
uj5u.com熱心網友回復:
根據檔案,php 將嘗試轉換它:
默認情況下,如果可能,PHP 會將錯誤型別的值強制轉換為預期的標量型別宣告。例如,為期望字串的引數提供 int 的函式將獲得字串型別的變數。
但是如果你用 重新運行你的代碼declare(strict_types=1);,你會得到TypeError訊息。
uj5u.com熱心網友回復:
為了避免這種行為,您可以在 PHP 類的頂部添加:declare(strict_types=1);
uj5u.com熱心網友回復:
根據定義,空集合是一個空陣列。然后,由于 PHP 的Type Juggling ,它會通過您的方法。這意味著在比較不同型別的變數時,PHP 會首先將它們轉換為通用的、可比較的型別,在這種情況下會將陣列轉換為字串。
這也可以通過型別轉換變數來避免。
您可以在 PHP 檔案 https://www.php.net/manual/en/language.types.type-juggling.php中找到更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/465754.html
標籤:拉拉维尔
