<?php
declare(strict_types=1);
$a = 1;
$b = 2;
function FunctionName(int $a, int $b)
{
$c = '10'; //string
return $a + $b + $c;
}
echo FunctionName($a, $b);
?>
我预计FunctionName($a, $b)
会打印错误,但不会输出错误消息。
如您所见,我在int($c
)中添加了一个字符串($a+$b
),并声明为strict_types=1
。
为什么我不能收到错误消息?
答案 0 :(得分:2)
“严格类型”模式仅检查代码中特定点的类型;它不会跟踪变量发生的所有事情。
具体来说,它检查:
int
一个函数,期望两个int
s,所以没有错误: int
的提示,则仍然没有错误,因为$a + $b + $c
的结果确实是int
。以下是做提供错误的一些示例:
declare(strict_types=1);
$a = '1';
$b = '2';
function FunctionName(int $a, int $b)
{
return $a + $b;
}
echo FunctionName($a, $b);
// TypeError: Argument 1 passed to FunctionName() must be of the type integer, string given
或者返回提示:
declare(strict_types=1);
$a = 1;
$b = 2;
function FunctionName(int $a, int $b): int
{
return $a . ' and ' . $b;
}
echo FunctionName($a, $b);
// TypeError: Return value of FunctionName() must be of the type integer, string returned
请注意,在第二个示例中,我们计算的$a . ' and ' . $b
不会引发错误,这是我们返回该字符串的事实,但我们的承诺是返回整数。以下不会出错:
declare(strict_types=1);
$a = 1;
$b = 2;
function FunctionName(int $a, int $b): int
{
return strlen( $a . ' and ' . $b );
}
echo FunctionName($a, $b);
// Outputs '7'