我在PHP 7.0.11,其中跨一个非常有趣的错误来declare(strict_types=1);启用不作array_map()也不array_walk()知道严格typehinting的.我在某处读到,通过启用严格类型,PHP在核心函数中也使用了严格的类型,但事实并非如此.看看这个示例代码,它应该抛出TypeError异常:
declare(strict_types=1);
$myArray = [12, 'string value', 'another string value', 5];
array_map('validateMyArrayValues', $myArray);
function validateMyArrayValues(string $item)
{
var_dump($item);
}
Run Code Online (Sandbox Code Playgroud)
该var_dump结果是:
test.php:13:
string(2) "12"
test.php:13:
string(12) "string value"
test.php:13:
string(20) "another string value"
test.php:13:
string(1) "5"
Run Code Online (Sandbox Code Playgroud)
所有整数值都被拼接成字符串,这显然是一个问题.这引出了一个问题,我应该declare(strict_types=1);放在一起并使用is_*函数并抛出异常吗?