在PHP 7中全局启用'strict_types'

Par*_*xis 37 php apache variable-types php-7

我目前正在将我的网站从PHP5迁移到PHP7,并且我已经开始使用添加的严格输入功能.但是,这需要我使用以下行开始所有文件:

<?php declare(strict_types=1);

// All other code here
// ...
Run Code Online (Sandbox Code Playgroud)

所以我想知道,是否有任何方法可以strict_types使用像php.iniapache配置文件那样全局启用,所以我不必每次都写这行,如果是这样,我怎么能启用它?

IMS*_*SoP 41

这是故意不可能的,因为在对标量类型提示的长时间讨论之后采用的实现是这样的:https://wiki.php.net/rfc/scalar_type_hints_v5

它明确地选择了如何向任何函数的调用者检查标量类型,而不是其作者,以便:

  • 如果你编写一个带有标量类型提示的库,你的函数就可以保证所请求的参数类型,即使是由不是以严格模式编写的代码调用(代替类型)
  • 如果你编写一个库并想要传统的弱类型,你仍然可以使用类型提示的库(因为它们不会强迫你执行严格的类型检查)
  • 相反,如果您编写一个库并希望严格键入您调用的函数,则不必要求库的用户也启用严格键入
  • 内置函数的工作方式与用户定义的函数相同,默认情况下现有代码的运行方式相同
  • 如果你打开严格打字,你需要改变你的代码,无论如何正确处理它

因此,你应该告诉PHP哪些文件已被编写为使用严格类型模式,哪些文件没有; 而这样做的方法是使用该declare语句.


Dan*_*tta 7

基本上没有。

因为如果您只需要使用严格模式的库,您将导致不必要的包分离。还要考虑严格/弱类型选项只是 PHP 中的一个额外选项。


jaw*_*ira 6

PHPStorm有一项检查可以帮助您解决这个问题:

在此处输入图片说明

  • 没有严格回答问题,但仍然有帮助,谢谢。(: (4认同)
  • @Scolopendre 我看到你在那里所做的双关语的类型。 (2认同)