gisostallenberg/php-to-7-aid

此包已被弃用,不再维护。作者建议使用 sstalle/php7cc 包。

工具,用于在升级到或准备使用 PHP7 时查找并可能修复现有代码库中的向后不兼容的更改。

0.0.0 2015-06-30 15:51 UTC

This package is auto-updated.

Last update: 2022-02-01 12:48:57 UTC


README

工具,用于在升级到或准备使用 PHP7 时查找并可能修复现有代码库中的向后不兼容的更改。

关于

phpTo7aid 的目标是识别在 PHP7 中无法工作的 PHP 5 代码。它通过提供确切的解决方案或提供解决问题的提示,尽可能帮助您解决这些问题。

状态

请注意,此版本仍在开发中。请参阅以下版本或 SemVer:"主版本零(0.y.z)用于初始开发。任何内容都可能随时更改。公共 API 应不被视为稳定。"。

版本控制

phpTo7aid 使用 语义版本控制 2 作为新版本的指南。

许可证

phpTo7aid 使用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

作者

Giso Stallenberg

安装

使用 composer

composer require gisostallenberg/php-to-7-aid

直接运行

wget https://github.com/gisostallenberg/php-to-7-aid/raw/master/php-to-7-aid.phar -O php-to-7-aid.phar; php php-to-7-aid.phar run

PHP 7 中的向后不兼容的更改

请参阅 PHP 7 升级

已实现
将不会实现(包括原因)
尚未实现
  • 间接变量、属性和方法引用现在按从左到右的语义进行解释。
  • 全局关键字现在仅接受简单变量
  • 变量或函数调用周围的括号不再影响行为
  • 通过引用赋值自动创建的数组元素或对象属性现在将产生不同的顺序
  • list() 将不再按相反顺序赋值变量
  • 不再允许空 list() 赋值
  • list() 不再支持解包字符串
  • 使用 foreach() 迭代时不再对内部数组指针产生影响
  • 在按值迭代数组时,foreach 现在始终在数组的副本上操作,因此迭代期间对数组所做的更改不会影响迭代行为
  • 当通过引用迭代数组时,对数组的修改将继续影响迭代。
  • 对普通(非可遍历)对象按值或按引用迭代将类似于数组按引用迭代的行为。
  • 现在无法定义两个具有相同名称的函数参数。
  • func_get_arg() 和 func_get_args() 函数将不再返回传递给参数的原始值,而是提供当前值(可能已被修改)。
  • 异常回溯将不再显示传递给函数的原始值,而是显示修改后的值。
  • 无效的八进制文字(包含大于7的数字)现在会产生编译错误。
  • 负数位运算将现在引发警告并返回false。
  • 左位运算的位数超过整型位数宽度将始终结果为0。
  • 右位运算的位数超过整型位数宽度将始终结果为0或-1(取决于符号)。
  • 包含十六进制数字的字符串不再被视为数字,也不再获得特殊处理。
  • 由于双引号字符串和heredocs中添加了Unicode代码点转义语法,因此现在"\u{"后面跟一个无效序列将引发错误。
  • 现在有两个异常类:Exception 和 Error。这两个类都实现了一个新的接口 Throwable。
  • 一些致命错误和可恢复的致命错误现在会抛出 Error。
  • 解析错误现在会生成一个扩展 Error 的 ParseError。
  • 内部类的构造函数现在在失败时总是抛出异常。
  • 一些 E_STRICT 通知的错误级别已被更改。
  • 不再支持从不可兼容的 $this 上下文中调用静态方法。
  • 以下类、接口和特性名称(不区分大小写)现在无法使用:bool、int、float、string、null、false、true。
  • 以下类、接口和特性名称现在保留供将来使用,但使用时不会引发错误:resource、object、mixed、numeric。
  • yield 语言结构在表达式上下文中使用时不再需要括号。
  • 移除了 ASP (<%) 和脚本 (<script language=php>) 标签。
  • 移除了对 new 返回结果的按引用赋值的支持。
  • 移除了 ini 文件中的 #-style 注释支持。
  • $HTTP_RAW_POST_DATA 现在不可用。
  • call_user_method() 和 call_user_method_array() 现在不存在。
  • ob_start() 现在在输出缓冲处理程序中创建输出缓冲区时不再引发 E_ERROR,而是引发 E_RECOVERABLE_ERROR。
  • 改进了 zend_qsort(使用混合排序算法)以获得更好的性能,并将 zend_qsort 重命名为 zend_sort。
  • 添加了稳定的排序算法 zend_insert_sort。
  • 在 fpm-fcgi 上移除了 dl() 函数。
  • setcookie() 的空 cookie 名称现在会引发警告,并且不再发送空的 set-cookie 头行。
  • 移除了对禁用 CURLOPT_SAFE_UPLOAD 选项的支持。所有 cURL 文件上传都必须使用 cURL_file / CURLFile API。
  • 从 mktime() 和 gmmktime() 中移除了 $is_dst 参数。
  • 对于 inifile 处理程序,dba_delete() 现在如果未找到键也会返回 false。
  • GMP 现在需要版本 4.2 或更新的 libgmp。
  • gmp_setbit() 和 gmp_clrbit() 现在对于负索引返回 FALSE,使其与其他 GMP 函数保持一致。
  • 移除了过时的别名 datefmt_set_timezone_id() 和 IntlDateFormatter::setTimeZoneID()。
  • 添加了 LIBXML_BIGLINES 解析选项。
  • 移除了过时的别名 mcrypt_generic_end(),改用 mcrypt_generic_deinit()。
  • 移除了过时的 mcrypt_ecb()、mcrypt_cbc()、mcrypt_cfb() 和 mcrypt_ofb() 函数,改用带有 MCRYPT_MODE_* 标志的 mcrypt_encrypt() 和 mcrypt_decrypt()。
  • session_start() 接受所有 INI 设置作为数组。例如,['cache_limiter'=>'private'] 将 session.cache_limiter 设置为 private。它还支持 'read_and_close',这将在读取数据后立即关闭会话数据。
  • Save 处理器接受 validate_sid() 和 update_timestamp() 函数,用于验证会话 ID 的存在,并更新会话数据的时间戳。
  • 添加了 SessionUpdateTimestampHandlerInterface 接口。validateSid() 和 updateTimestamp() 在接口中定义。
  • session.lazy_write(默认为 On)INI 设置仅在有会话数据更新时写入会话数据。
  • 删除了 opcache.load_comments 配置指令。
  • 删除了 "rsa_key_size" SSL 上下文选项,转而根据协商的加密算法自动设置适当的大小。
  • 删除了 "CN_match" 和 "SNI_server_name" SSL 上下文选项。
  • 删除了对 /e (PREG_REPLACE_EVAL) 修饰符的支持。
  • 删除了 PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT 属性,转而使用 ATTR_EMULATE_PREPARES。
  • 删除了 setlocale() 中的字符串类别支持。
  • 删除了 set_magic_quotes_runtime() 和其别名 magic_quotes_runtime()。
  • 拒绝 json_decode 字符串中不兼容的数字格式(顶层(07,0xff,.1,- .1)和所有级别([1.],[1.e1]))符合 RFC 7159。
  • 当第一个参数等于空 PHP 字符串或转换为字符串后为空字符串(NULL,FALSE)时,调用 json_decode 会引发 JSON 语法错误。
  • 删除了 set_socket_blocking(),转而使用其别名 stream_set_blocking()。
  • 删除了 xsl.security_prefs INI 选项。请改用 XsltProcessor::setSecurityPrefs()。