PHP7-可以信任类型提示吗?

PHP7-可以信任类型提示吗?,php,php-7,scalar,Php,Php 7,Scalar,我最近开始研究PHP7中引入的新类型暗示,发现它是添加到我的一些应用程序中的一个非常好和有用的补充,因此我已经这样做了,但是我有一个关于参数和返回类型暗示的问题 假设我有一个基本函数,它对两个参数执行数学运算,并返回一个整数 function addTwo(int $a, int $b): int { return $a + $b; } 期望的参数应该是整数,我们应该希望从函数中收到一个整数值,但是这总是有保证的,还是应该在函数中执行进一步的验证,例如is_int,以确保两个参数都是整数

我最近开始研究PHP7中引入的新类型暗示,发现它是添加到我的一些应用程序中的一个非常好和有用的补充,因此我已经这样做了,但是我有一个关于参数和返回类型暗示的问题

假设我有一个基本函数,它对两个参数执行数学运算,并返回一个整数

function addTwo(int $a, int $b): int {
   return $a + $b;
}

期望的参数应该是整数,我们应该希望从函数中收到一个整数值,但是这总是有保证的,还是应该在函数中执行进一步的验证,例如is_int,以确保两个参数都是整数?

这取决于条件。例如,在您的示例中,传输线将不会成功,但是传递浮点-没问题,它将被静默地转换为int

必须编写declare(strict_types=1)

strict_types=1只能应用于在第一行直接声明它的文件,而不能绕过这一点

严格类型也会影响返回类型声明。在 默认弱模式下,返回的值将强制为正确的类型 如果它们不是该类型的。在强模式下,返回 值的类型必须正确,否则将显示TypeError 扔


为什么不试试看呢?我已经做了一些测试,但是我想知道它是否总是有保证的,或者是否存在一些不同的用例,可能会返回无效的结果如果您提供给函数的不是整数,它将返回一个可捕获的错误,因此,可能会出现错误,也可能会返回int。如果将参数注释为int,则会得到int。在PHP7中,这是严格执行的(而在PHP5中,如果确实需要,可以通过一些方法绕过类型检查)。我想提醒您,您的函数有点危险,因为在PHP中添加两个整数可能会返回一个浮点数(在溢出的情况下),这将导致返回类型异常。这可能是您想要的,也可能不是您想要的;防止此问题,并仅将类型限制为int,这样就不可能返回浮点,或者我必须在函数中执行进一步的验证?因此,请澄清,如果我在文件中声明strict_类型为true,我的函数在一个无效参数调用时立即失败,这意味着它不会执行任何实际函数?我对此特别感兴趣的主要原因是,当函数可能已经使用无效数据类型执行了某些任务时,我更希望函数在开始时失败并抛出类型错误,而不是中途抛出类型错误。如果在处理参数时出现类型错误,则不会执行函数体。