PHP7:同时使用严格类型提示和非严格类型提示?
PHP 7: use both strict and non-strict type hinting?
因此 PHP 7 现在具有标量类型提示 (w00t!),您可以根据 PHP 中的设置将类型提示设为严格或非严格。 Laracasts 使用 define, IIRC 来设置它。
有没有一种方法可以在一个文件(如数学库)中对标量进行严格类型提示,同时在其他地方使用非严格类型提示,而无需随意更改代码中的设置?
我想通过不摆弄语言设置来避免引入错误,但我喜欢这个主意。
的确,您可以随心所欲地混合搭配,事实上,该功能就是专门为这种方式设计的。
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");
Return 打字的方式相同。 declare(strict_types=1);
适用于函数 calls(不是声明)和文件中的 return
语句。如果您没有 declare(strict_types=1);
语句,则该文件使用 "weak typing" 模式。
因此 PHP 7 现在具有标量类型提示 (w00t!),您可以根据 PHP 中的设置将类型提示设为严格或非严格。 Laracasts 使用 define, IIRC 来设置它。
有没有一种方法可以在一个文件(如数学库)中对标量进行严格类型提示,同时在其他地方使用非严格类型提示,而无需随意更改代码中的设置?
我想通过不摆弄语言设置来避免引入错误,但我喜欢这个主意。
的确,您可以随心所欲地混合搭配,事实上,该功能就是专门为这种方式设计的。
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");
Return 打字的方式相同。 declare(strict_types=1);
适用于函数 calls(不是声明)和文件中的 return
语句。如果您没有 declare(strict_types=1);
语句,则该文件使用 "weak typing" 模式。