PHP7.2 版本指南

阅读数:314 2019 年 9 月 20 日 18:41

PHP7.2 版本指南

1. 不向后兼容的变更

Core:

  • 对于封闭资源来说,gettype() 函数将返回 resource(closed),取代之前的 unknown type。

  • 对于 __PHP_Incomplete_Class 类对象来说,is_object() 函数将返回 true。

  • 移除对 Netware 操作系统的支持。

  • array 类型转换成 object 类型 ((object) 或者 settype()) 时,将把整型键转换成属性名,这修复了之前版本的数字键不能作为属性名的问题。

  • object 类型转换成 array 类型((array) 或者 settype())时,以及对象的属性映射到数组中(get_object_vars())时,会把整数属性转换成数字键,这修复了之前版本的整数属性不可访问的问题。

  • 对未定义常量的非限定性引用将导致一个 waring 级别的错误,取代之前的 notice 级别,之后的版本会是 error 级别的错误。

  • 支持的最低的 Windows 版本是 Windows 7 和 Windows Server 2008 R2。

  • 取消了原生 trait 属性值的兼容性检查行为。

  • object 将不能被用作类名。

BcMath

  • 和 fmod() 函数一样,bcmod() 函数取消了取模操作(%),也就是数值的小数部分截断变成整数。例如:bcmod(‘4’,‘3.5’) 将返回 0.5 而不是 1。

Hash

  • hash_hmac(),hash_hmac_file(),hash_pbkdf2() 以及 hash_init()(options 参数为 HASH_HMAC 时),这些函数将不再支持非加密的哈希函数。

JSON

  • 当 json_decode() 函数的第二个参数 assoc 是 null 时,options 支持选项中的 JSON_OBJECT_AS_ARRAY 将被启用,在之前的版本中这个参数是被我们一直忽略的。

Session

  • 移除了 register_globals 相关的代码,"!" 可以被用在 $_SESSION 的键名中。

  • session 被用来正确的管理会话状态,禁止无效操作,当代码有问题时将会触发该变化。如果你不幸遇到了这个问题,这表明你的代码是存在问题的。

    • sesseion_start(),session_status(),session_regenerate_id(),这些函数被用于设置或者返回正确的会话状态。

    • session_unset(),session_write_close()/session_commit(),session_abort(),session_reset(),这些函数返回从没有返回值变成返回布尔值。他们允许允许空的参数,并且会对这些空的检查进行检查。

    • session_start(),session_set_cookie_params(),session_name(), session_module_name(),session_set_save_handler(), session_regenerate_id(),session_cache_limiter(),session_cache_expire(),session_unset(), session_destroy(), session_write_close()/session_commit(),session_reset(),这些函数将禁止无效的会话状态和 http 头状态,返回正确的布尔值或者数值。

    • session.name ,session.save_path,session.cookie_lifetime,session.cookie_path,session.cookie_domain,session.cookie_httponly,session.cookie_secure,session.use_cookies,session.use_only_cookies,session.use_strict_mode,session.referer_check,session.cache_limiter,session.cache_expire,session.lazy_write,session.save_handler,session.serialize_handler,session.gc_probability,session.gc_divior,session.gc_maxlifetime,这些 ini 的值的设定需通过 ini_set() 函数的成功调用,无效的 ini 修改操作将不会成功。

    • 由于会话能够被正确管理(session_start()),部分 E_ERROR 级别的错误信息将转化成 E_WARNING 级别。

    • 会话将不再被无效的和无用的会话初始化

    • 当头部信息已经被发送,此时去设置新的 ini 值将无效(通过 session_name(),session_module_name(),session_save_path(),session_cache_limiter() 和 session_cache_expire() 这些函数)。

现在这些正确的行为会影响到 cli 命令行模式下管理会话的状态。使用输出缓冲,就像是在网页应用那样将解决在 cli 脚本下的问题。

Standard

自 7.1 版本以来,在 64 位机器上,同一个种子的 mt_rand() 和 rand() 产生的随机数顺序可能会不一样。

2. 新特性

Core

  • 当重写一个方法和接口时,其参数类型是可省略的。这遵从了里氏平衡原则的参数类型的逆变。

  • 允许继承后的抽象类来重写被继承的抽象类的抽象方法。

  • 允许分组命名空间的尾部逗号。

  • 对象类型的注释是允许的。

DBA

  • 实现了对 LMDB 后端的支持。

JSON

  • 在 json_encode() 和 json_decode() 增加了对 JSON_INVALID_IGNORE 和 JSON_INVALTD_UTF8_SUBSTITUTE 的支持,取代了之前的 utf-8 编码的无效类型。

OCI8

  • 增加了 Oracle 数据库的透明应用故障切换(TAF)的支持。

PCRE

  • 增加了内部选项(j)修改本地的 PCRE_DUPNAMES 选项。

Sodium

  • 新的加密扩展。

SQLite3

  • 实现了写入 BLOBs。

Standard

  • 当使用 libargon2 来编译 PHP 时,简化的哈希密码的 API 已更新,用来支持 Argon2。

  • windows 平台支持 proc_nice() 函数。

Zip

  • 读 / 写加密存档,依赖于 libzip 1.2.0, 新的方法: ZipArchive:: setEncryptionName(name method [,password];ZipArchive::setEncryptionIndex index,method[ password]); 新的常量: ZipArchive:: EM_NONE ZipArchive:: EM_AES_128 ZipArchive:: EM_AES_192 ZipArchive:: EM_AES_256

  • 从 zip 流上下文接受 " 密码 "。

  • ZipArchive 实现可计数,增加 ZipArchive::count() 方法。

3. SAPI 模块变更

4. 废弃的功能

下面是将要在 php8.0 版本中废弃的功能。

Core

  • 配置文件的磁道错误将被废弃。

  • __autoload() 将被废弃,使用 spl_autoload_register() 来替代。

  • (unset) 将被废弃,此项变化不会影响 unset($var) 的语言结构。

  • create_function() 函数将被废弃,使用匿名函数来替代。

  • each() 函数结构将被废弃,使用 foreach() 循环来替代。

Exif

  • read_exif_data() 将被废弃,使用 exif_read_data() 来替代。

GD

  • png2wbmp() 和 jpeg2wbmp() 将被废弃。

GMP

  • gmp_random() 将被废弃,使用 gmp_random_bits() 或者()来替代。

Intl

  • INTL_IDNA_VARIANT_2003 将被废弃,使用 INTL_IDNA_VARIANT_UTS46 来替代。

Mbstring

  • mbstring.func_overload 的配置文件将被废弃。

Standard

  • 不用参数来调用 parse_str() 将被废弃。

  • 用字符串参数来调用 assert() 将被废弃,使用常规表达式来替代。

5. 变更的函数

Standard

  • 当设置为 PASSWORD_ARGON2I 时,password_hash() 可以生成 Argon2 散列。

  • 当使用 PASSWORD_ARGON2I 时,下面这些选项可能默认被设置:memory_cost,time_cost。这些选项的默认值是 PASSWORD_ARGON2_DEFAULT_MEMORY_COST。如果没有设置,则默认是 PASSWORD_ARGON2_DEFAULT_TIME_COST 和 PASSWORD_ARGON2_DEFAULT_THREADS。

  • password_verify() 可以验证 Argon2 散列。

  • password_get_info() 和 password_needs_rehash() 可以接受 Argon2 哈希值。

  • mail()/mb_send_mail() 接受数组 extraheaderRFC2822phpextra_headers = [ ‘Header-Name’ => ‘Header value’, ‘Multiple’ => [‘One header’,‘Another header’], ‘Multiline’ = “FirstLine\r\n SecondLine”, ];

  • 当传递一个无效参数时,count() 函数将抛出 warning 警告。

  • 大端和小端的字节序下,pack() 和 unpack() 支持 float 和 double 类型。

  • number_format() 函数将确保零值不包含负号。

XML

  • utf8_encode() 和 utf8_decode() 函数已被作为字符串移至标准扩展。

6. 新增的函数

Core

增加 stream_istty()。

增加 sapi_windows_vt100_support()。

DOM

DomNodeList 实现了 Countable,增加了 DomNodeList::count()。

DOMNamedNodeMap 实现了 Countable,增加了 DOMNamedNodeMap :: count()。

FTP

增加了 ftp_append()。

GD

增加了 imagesetclip() 和 imagegetclip()。

增加了 imageopenpolygon()。

增加了 imageresolution()。

增加了 imagecreatefrombmp() 和 imagebmp()。

Hash

增加了 hash_hmac_algos()。

Mbstring

增加了 mb_chr() 和 mb_ord()。

增加了 mb_scrub。

OCI8

增加了 oci_register_taf_callback() 和 oci_unregister_taf_callback() 对 Oracle 数据库的透明应用故障切换 (TAF) 的支持。

Sockets

增加了 socket_addrinfo_lookup(),socket_addrinfo_connect(),socket_addrinfo_bind() 和 socket_addrinfo_explain()。

SPL

增加了 spl_object_id()。

7. 新增的类和接口

8. 移除的扩展和 SAPI

Mcypt

已废弃的 mcrypt 扩展已被移至 PECL。

libmcrypt 自 2007 年开始就没有维护,不推荐继续使用这个扩展。

9. 其他对扩展的变更

EXIF

  • 增加了对如下格式的 exif 标签支持:Samsung,DJI,Panasonic,Sony,Pentax,Minolta,Sigma/Foveon,AGFA,Kyocera,Ricoh & Epson。

  • exif_read_data() 和 exif_t humbnail() 支持第一个参数是传递流。

GD

  • 移除了–enable-gd-native-ttf 配置选项。

  • imagegd() 将 truecolor 图像存储为真彩色图像,替代了之前的转换为调色板。

  • 在使用系统 libgd 编译时,mageantialias() 也支持。

Mbstring

  • mb_check_encoding() 接受数组参数,递归检查其键和值。

  • mb_convert_encoding() 接受数组参数,其值的编码可以递归地转换。

PDO_OCI

  • –with-pdo-oci 的配置语法将不再 Oracle 客户端。

pdo_sqlite

  • 使用 sqlite3_prepare_v2() 和 sqlite3_close_v2() 来代替他们之前的函数。

10. 新增全局常量

Core

  • PHP_FLOAT_DIG

  • PHP_FLOAT_EPSILON

  • PHP_FLOAT_MIN

  • PHP_FLOAT_MAX

  • PHP_OS_FAMILY

Fileinfo

  • FILEINFO_EXTENSION

GD

  • IMG_EFFECT_MULTIPLY

  • IMG_BMP

PCRE

  • PREG_UNMATCHED_AS_NULL

Standard:

  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST

  • PASSWORD_ARGON2_DEFAULT_TIME_COST

  • PASSWORD_ARGON2_DEFAULT_THREADS

  • PASSWORD_ARGON2I

11. INI 文件处理的变更

sql.safe_mode

  • 该 INI 选项已被移除。

realpath_cache_size

  • 默认是 4096k。

opcache.fast_shutdown

  • 该 INI 选项已经被移除。 fast_shutdown 处理的一种变型已经被集成到 PHP 内核,在生产环境中将默认开启。

12. Windows 支持

  • 支持 VT100 控制台模式。

13. 其他变更

编译系统

  • autoconf 最低支持版本是 2.64。

本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。

原文链接:

https://mp.weixin.qq.com/s/60pohj2n7Pxba3G9vY92yg

评论

发布