我有一个返回true或false的方法,但是当我添加一个类型声明GC tried to mark invalid reference
时,它不会抛出致命的错误。
我在课前包含的第二个文件中有isAdmin() : string
。
例如:
file1.php
declare(strict_types=1);
file2.php
<?php
declare(strict_types=1);
此代码不会引发致命错误。相反,var_dump将bool返回为<?php
include "file1.php";
class Test
{
public function user() : int
{
return true;
}
}
$test = new Test();
var_dump($test->user());
。如果我将方法类型更改为字符串,则var_dump将bool返回为int(1)
。
如何避免在每个模型文件中放置string(1) "1"
?
答案 0 :(得分:3)
目前无法全局声明PHP中的严格输入。来自manual:
可以基于每个文件启用严格模式
和
严格键入适用于在启用严格类型的文件中进行的函数调用,而不适用于在该文件中声明的函数。如果未启用严格键入的文件调用在严格键入的文件中定义的函数,则将遵循调用者的首选项(弱类型),并且将强制该值。
我的猜测是,在某种程度上,这是为了保持软件包之间的兼容性。如果您启用全局和某些正在使用的软件包需要关闭严格的输入,该怎么办?
在进一步通知之前,您必须在每个要使用它的文件中声明它。