gpt4 book ai didi

php - 在 PHP 7 中全局启用 'strict_types'

转载 作者:IT王子 更新时间:2023-10-29 01:04:17 25 4
gpt4 key购买 nike

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

<?php declare(strict_types=1);

// All other code here
// ...

所以我想知道,有没有办法使用 php.ini 或 apache 配置文件之类的东西全局启用 strict_types ,所以我不必写这个每次都排队,如果是这样,我该如何启用它?

最佳答案

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

它为标量类型参数引入了两种模式,它们都保证函数接收参数得到它在其签名中需要的类型。但是,它提供了两种模式来调用代码如何实现这一点:

  • 在模式 0 下,它会自动验证并强制转换某些标量类型(例如 int 参数会将 '123' 转换为 123,但会报错在 'hello')
  • 在模式 1 中,它要求调用者事先进行验证和强制转换,并拒绝任何类型不正确的参数(例如 '123''hello' int 参数而被拒绝)

模式的选择是针对每个文件的,并且基于函数的调用者,因为:

  • 设置需要影响内置函数以及用户定义的函数
  • 调用函数的所有代码都需要检查或更新以在模式 1 下正常工作,但大多数旧代码在模式 0 下可以正常运行
  • 使用全局设置,您只能使用已在两种模式下测试过的库,或者您喜欢的相同模式
  • 未声明其首选模式的文件需要继续以类似于 PHP 5.x 的方式工作,以允许现有代码运行;只有在默认模式为 0 时才有可能

从编写可重用库的人的角度来看:

  • 无论设置如何,都保证您的函数接收请求的参数类型
  • 如果您想在调用错误类型的函数时收到错误,您可以使用模式 1 而不会强制其他应用程序和库使用相同的设置
  • 如果您想要模式 0 的自动检查和强制转换,您可以这样做,但仍与在模式 1 下运行的其他库和应用程序交互
  • 在 PHP 7.0 之前编写的旧库(或在发布时需要同时支持两者)将继续大致像以前一样工作,因为默认模式 0 类似于内置函数的现有行为

因此,您可以告诉 PHP 哪些文件已写入使用严格类型模式,哪些没有;这样做的方法是使用 declare 语句。

关于php - 在 PHP 7 中全局启用 'strict_types',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37111470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com