strict_types在包含时不起作用

时间:2017-10-07 14:31:55

标签: php

我有一个返回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"

1 个答案:

答案 0 :(得分:3)

目前无法全局声明PHP中的严格输入。来自manual

  

可以基于每个文件启用严格模式

  

严格键入适用于在启用严格类型的文件中进行的函数调用,而不适用于在该文件中声明的函数。如果未启用严格键入的文件调用在严格键入的文件中定义的函数,则将遵循调用者的首选项(弱类型),并且将强制该值。

我的猜测是,在某种程度上,这是为了保持软件包之间的兼容性。如果您启用全局和某些正在使用的软件包需要关闭严格的输入,该怎么办?

在进一步通知之前,您必须在每个要使用它的文件中声明它。