2017-10-07 98 views
0

我有一個方法返回true或false,但是當我添加一個類型聲明isAdmin() : string它不會引發致命錯誤。strict_types包括時不工作

我有declare(strict_types=1);在第二個包含在課前的文件中。 實施例:

file1.php

<?php 
declare(strict_types=1); 

file2.php

<?php 
include "file1.php"; 

class Test 
{  
    public function user() : int 
    { 
     return true; 
    } 
} 

$test = new Test(); 
var_dump($test->user()); 

此代碼不會引發致命錯誤。相反,var_dump返回的布爾值爲int(1)。如果我將方法類型更改爲字符串,var_dump返回布爾值string(1) "1"

如何避免將declare(strict_types=1);放在每個模型文件中?

+0

這意味着你的函數返回一個字符串,你返回一個布爾值。 – 2017-10-07 14:34:31

+1

@headmax認爲他問爲什麼這個通過,如果他有'strict_types'啓用。這個例子__應該失敗,但顯然它的通過。 – Carey

+0

此外,你可以跳過if語句,只是'返回isset($ this-> type)&& $ this-> type == 3' – Carey

回答

2

目前無法在PHP中全局聲明嚴格的輸入。從manual

它可以在每個文件的基礎

而且

嚴格類型適用於功能從嚴格類型的文件中進行的呼叫啓用嚴格模式啓用,而不是在該文件中聲明的函數。如果沒有嚴格打字的文件通過嚴格打字來調用文件中定義的函數,則會優先考慮調用者的偏好(弱打字),並強制該值。

我的猜測是,部分原因是爲了保持軟件包之間的兼容性。如果您在全球範圍內啓用並且您使用的某些軟件包需要嚴格打字才能關閉,該怎麼辦?

在進一步注意之前,您必須在您要使用它的每個文件中聲明它。

+1

Upvoted,因爲技術部分是正確的。但僅供參考,這從來不涉及兼容性,它不僅僅是「現在」 - 這是你正在添加的意見。 – Narf

+0

你是對的。我不記得我在哪裏閱讀,但它不在手冊中。我會編輯它。 – ishegg

+0

謝謝!我想我現在不會使用它。 – pidari