Rumah  >  Artikel  >  PHP7.2 版本性能介绍

PHP7.2 版本性能介绍

小云云
小云云asal
2018-05-14 13:49:5811928semak imbas

本文主要和大家详细介绍PHP7.2 版本性能,希望能帮助大家对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.namesession.save_pathsession.cookie_lifetime,session.cookie_pathsession.cookie_domainsession.cookie_httponlysession.cookie_securesession.use_cookiessession.use_only_cookiessession.use_strict_modesession.referer_checksession.cache_limitersession.cache_expiresession.lazy_writesession.save_handlersession.serialize_handlersession.gc_probabilitysession.gc_piorsession.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_IGNOREJSON_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_costtime_cost。这些选项的默认值是PASSWORD_ARGON2_DEFAULT_MEMORY_COST。如果没有设置,则默认是PASSWORD_ARGON2_DEFAULT_TIME_COSTPASSWORD_ARGON2_DEFAULT_THREADS

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

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

  • mail()/mb_send_mail()接受数组$extra_header。数组参数是针对RFC 2822进行检查的。 数组格式: php $extra_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。

相关推荐:

Win10下如何安装IIS、MySQ、nginx、php7.1.7?

PHP7中新特性简介

详解PHP7 性能翻倍的关键

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:如何学习php经验分享Artikel seterusnya:php常用开发编辑器(ide)