2015-12-08 90 views
1

因此,PHP 7的標量類型現在已經提示(w00t!),您可以根據PHP中的設置將類型提示設置爲嚴格或非嚴格。 Laracasts使用define,IIRC來設置它。PHP 7:同時使用嚴格和非嚴格類型提示?

有沒有一種方法可以在一個文件(比如數學庫)中對標量進行嚴格類型提示,同時在其他地方使用非嚴格的代碼而不需要在代碼中隨意更改設置?

我想避免通過不習慣使用語言設置來引入錯誤,但我喜歡這個想法。

+0

PS - 我不允許任何人更改可移植性的語言設置,並且在執行過程中更改它們會被處以流放處罰。 –

回答

4

事實上,你可以混合和匹配你心中的內容,實際上這個功能是專門設計用來這樣工作的。

declare(strict_types=1);不是語言設置或配置選項,它是一個特殊的每個文件聲明,有點像namespace ...;。它只適用於你使用它的文件,它不會影響其他文件。

因此,舉例來說:

<?php // math.php 

declare(strict_types=1); // strict typing 

function add(float $a, float $b): float { 
    return $a + $b; 
} 

// this file uses strict typing, so this won't work: 
add("1", "2"); 

<?php // some_other_file.php 

// note the absence of a strict typing declaration 

require_once "math.php"; 

// this file uses weak typing, so this _does_ work: 
add("1", "2"); 

返回打字的工作方式相同。 declare(strict_types=1);適用於函數在文件中調用(NOT declarations)和return語句。如果您沒有declare(strict_types=1);語句,則該文件使用「弱類型」模式。

+1

我很失望,當人們在我的庫中調用方法時,我無法執行嚴格的打字。也許是7.1的一個功能? :) –

+0

@DerrekBertrand如果你真的想,你可以做一些像'<?php declare(strict_types = 1);函數myPublicFunc(... $ args){return _myPublicFunc(... $ args); }函數_myPublicFunc(int $ foo,string $ bar){/ *實際函數在這裏* /}' – Andrea

+0

我更加難過,要想讓你的調用堆棧變得更加骯髒或者使用這樣的黑魔法,這是無法完成的。甜蜜的伎倆! –