'strict_types=1' 似乎在函数中不起作用
'strict_types=1' does not seem to work in a function
<?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)
会打印错误,但它没有打印错误消息。
如您所见,我将一个字符串($c
)添加到一个整数($a+$b
),并声明了strict_types=1
。
为什么我收不到错误信息?
"Strict types" 模式只检查代码中特定点的类型;它不会跟踪变量发生的所有事情。
具体来说,它检查:
- 如果签名中包含类型提示,则提供给函数的参数;在这里你给了一个需要两个
int
s 的函数两个 int
s,所以没有错误
- 函数的return值,如果签名中包含return类型提示;这里你没有类型提示,但是如果你有
: 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
或 return 提示:
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
的事实,而是我们 returned[=38= 的事实] 那个字符串,但我们的承诺是 return 一个整数。下面会不报错:
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'
<?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)
会打印错误,但它没有打印错误消息。
如您所见,我将一个字符串($c
)添加到一个整数($a+$b
),并声明了strict_types=1
。
为什么我收不到错误信息?
"Strict types" 模式只检查代码中特定点的类型;它不会跟踪变量发生的所有事情。
具体来说,它检查:
- 如果签名中包含类型提示,则提供给函数的参数;在这里你给了一个需要两个
int
s 的函数两个int
s,所以没有错误 - 函数的return值,如果签名中包含return类型提示;这里你没有类型提示,但是如果你有
: 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
或 return 提示:
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
的事实,而是我们 returned[=38= 的事实] 那个字符串,但我们的承诺是 return 一个整数。下面会不报错:
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'