目录PHP 8之所以具有出色的性能,是由于它引入了JIT编译器、优化了函数调用和数组操作、引入了新的数据布局和算法,并修复和优化了一些内部实现细节。这些改进使得PHP 8在执行速率和内存管理方面都有了显著的提拔,使得开发人员能够更高效地开发和摆设Web应用步伐。
PHP5到PHP8之间的升级并不容易。由于新版本PHP引入了许多新的语法和语言功能,以及更严格的范例检查,须要举行一些代码修改和调整。对于使用PHP5开发的项目,升级到PHP8可能须要泯灭一些时间和精神。此外,由于PHP对一些旧有函数和方法举行了废弃和删除,可能还须要举行一些代码重构。因此,在举行升级之前,开发人员须要过细评估自己的项目,并订定相应的升级操持。
版本特性
php5.2以前(2006前)
autoload的使用;当在代码中使用一个未定义的类的时候,该函数就会被调用 如今已经不再使用了,由于一个项目中只能有一个__autoload();如今使用spl_autoload_register(); PDO和MiSQLi的使用 范例束缚。 通过范例束缚可以限制参数的范例,不外这个机制不完善。
php5.2(2006-2011)
(2006-2011) JSON的支持 增加了json_encode(),json_decode()等函数
php5.3(2009-2012)
PHP5.3 算是一个非常大的更新,新增了大量新特性,同时也做了一些不向下兼容的修改
1.弃用的功能
以下几个功能被弃用,若在设置文件中启用,则 PHP 会在运行时发出警告。 Register Globals Magic Quotes Safe Mode
2.匿名函数
3.新增了把戏方法 __invoke(),__callStatic()
4.命名空间,但不完善,只支持类
5.后期静态绑定
6.Heredoc 和 Nowdoc
对 Heredoc 以及 Nowdoc 举行了一些改进,它们都用于在 PHP 代码中嵌入大段字符串。
7.用 const 定义常量
PHP5.3 起同时支持在全局命名空间和类中使用 const 定义常量。
8.三元运算符简写形式
9.Phar
PHP5.4(2012-2013)
1.Short Open Tag
在 PHP5.3 起被默认开启,在 PHP5.4 起总是可用。 使用这种简写形式在 HTML 中嵌入 PHP 变量将会非常方便。 对于纯 PHP 文件(如类实现文件), PHP 官方建议顶格写起始标志,同时 省略 结束标志。 这样可以确保整个 PHP 文件都是 PHP 代码,没有任何输出,否则当你包含该文件后,设置 Header 和 Cookie 时会碰到一些麻烦! 注:Header 和 Cookie 必须在输出任何内容之前被发送。
2.数组简写形式
3.Traits
所谓Traits就是“构件”,是用来替代继承的一种机制。PHP中无法举行多重继承,但一个类可以包含多个Traits.
4.内置 Web 服务器
PHP从5.4开始内置一个轻量级的Web服务器,不支持并发,定位是用于开发和调试环境。
5.细节修改
PHP5.4 新增了动态访问静态方法的方式:
PHP5.5(2013起)
1.yield 生成器可以用于大文件处置处罚
2.list() 用于 foreach
3.细节修改
不推荐使用 mysql 函数,推荐使用 PDO 或 MySQLi。 不再支持Windows XP. 可用 MyClass::class 取到一个类的完备限定名(包括命名空间)。 empty() 支持表达式作为参数。 try-catch 布局新增 finally 块。
PHP 5.5.x->PHP 5.6.x
新增
使用表达式定义常量。 使用...运算符定义变长参数函数。 使用右连接运算符**来举行幂运算。 支持大于2GB的文件上传。 使用hash_equals()函数,以恒定的时间消耗来举行字符串比力,以制止根据准确丈量执行时间反推出密码的时序攻击。 __debugInfo(),当使用var_dump()输出对象时,可以用来控制要输出的属性和值。 对SSL/TLS的支持举行大幅度提拔,包括默认启用端点验证选项来支持证书指纹比对,以制止TLS重新协商攻击。 pgsql拓展支持以异步方式连接数据库和执行查询,即可以使用非阻塞的方式与PostgreSQL数据库举行交互。
修改
只有设置CURLOPT_SAFE_UPLOAD为false的情况下,才能使用@file语法上传文件,因此最好接纳CURLFile代替。 使用数组标识符为类定义数组范例的属性时,数组的键不会被覆盖。可以理解为数组里显式键和隐式序列键雷同时,数组的键不会相互覆盖。 对于JSON字面量true,false和null,必须接纳字母全部小写的形式。 一些Mcrypt函数须要设置有用长度的密钥和初始向量,不再接受无效长度的密钥和初始向量。
废除
废止从不兼容的上下文调用方法。 废弃了iconv和mbstring设置选项中和编码相干的选项,建议使用default_charset。
PHP 5.6.x->PHP 7.0.x
新增
对于标量范例声明,岂论是逼迫(默认)模式还是严格模式,都可以使用浮点数、字符串、布尔值、整数 范例的参数范例。 对返回范例声明的支持,返回范例声明( : )指明白函数返回值的范例。 null合并运算符(??),作用相称于简化三元表达式。假如变量存在并且值不为null,则返回自身值,否则就返回它的第二个操作数。 组合比力符<=>,用于比力两个表达式。第一个表达式的值大于、即是、小于第二个表达式的值时,对应的返回值依次是1、0、-1。 通过define()可定义数组范例的常量。 支持通过new class来实例化一个匿名类,可用来替代一些“用后即消除”的完备类定义。 Closure::call()可以简便地暂时绑定一个方法到对象上闭包并调用它。 为unserialize()提供过滤,可通过白名单的方式来防止恶意代码的注入,以更安全的方式解包不可靠的数据。 IntlChar类旨在公开出更多的ICU(开源项目)功能,这个类自身定义了许多静态方法用来操作Unicode字符集。若使用此类,须要先安装Intl拓展。 从同一个namespace引入的类、常量和函数如今可以用单个use语句一次性导入。 生成器可以返回表达式,可通过调用Generator::getReturn()来获取生成器返回值。 在最外层生成中使用yield from 就可以把一个生成器自动委派给别的的生成器,Traversable(遍历)对象或者array。 intdiv()函数用于整数的除法运算。 session_start()可以接受一个数组作为参数,覆盖php.ini里的会话设置选项。 通过preg_replace_callback_array()函数,可以使用一个关联数组对每个正则表达式注册回调函数。 random_bytes()和random_int()用来产生高安全级别的随机字符串和随机整数。
修改
dirname()增加了可选的第二个参数 depth,用于获取当前目录向上depth级的父目录名称。 xml_parser_free()不再足以释放解析器资源,假如它引用了一个对象,而这个对象引用了一个解析器资源,在这种情况下,须要额外地设置取消解析器。 在PHP7中,许多运行错误都转为异常来处置处罚了,这些异常继承自Error类,此类实现了Throwable接口(全部异常都实现了这个基础接口)。这也就意味着,当步伐运行发生错误时,以前的代码里假如没有捕获Error类异常,那么一些关于错误处置处罚的代码将触发不了,这会导致步伐运行很严肃的错误。 对变量、属性和方法的调用将严格服从从左到右的解析顺序,假如须要兼容旧的步伐,须要使用大括号。 list()不支持空的赋值,且在赋值时按照变量被定义的顺序来赋值,而非反过来的顺序。 list()不能解开字符串变量,可以用str_split函数来代替。 foreach不改变内部数组指针。 foreach通过引用遍历时,有更好的迭代特性。例如在迭代中添加一个迭代值到数组中。 一个八进制字符里假如含有无效数字(如8),这样的八进制字符将产生解析错误,而不是静默删节。 以负数形式举行的位移运算符将抛出异常,而不是返回0。 除以0将返回一个由IEEE754指定的浮点数:+INF、-INF或者NAN,而不是抛出一个警告错误并返回false。 十六进制字符串不被视为数字,可以用filter_var()函数检查一个字符串是否包含十六进制数字,并将此中的十六进制数字字符串转换为整数。 yield变更为右联接运算符。 在函数定义中,不可以包含两个或多个同名参数。 当在函数代码中使用func_get_arg()或者func_get_args()方法查看函数参数值,或者用debug_backtrace()方法查看回溯跟踪,以及在异常回溯中所看到的函数参数值是当前值,而非传入函数时的原始值。 在ini文件里,不支持#表现注释,须要用;来表现注释。 JSON拓展已被JSOND拓展取代,对于数值处置处罚要注意数值不能以点号.结束,科学计数法e前面一位字符不可以是点号.,如3.e3应该改写为3.0e3或者3e3。另外,空字符串不被看成有用的JSON字符串。 在数值溢出时,内部函数会失败。例如将数值很大的浮点数转换为整数,无法以整数表达时,将会报错并返回null,而不是自动将整数截断不报错误。 由于内部排序算法举行了提拔,会导致对比时视为相称元素的排序顺序不稳定。 declare(ticks)指示符不再泄漏到不同的编译单元里。 listen端口同时监听IPV4地点和IPV6地点。
废除
preg_replace()不再支持\e(可以把匹配来的字符串看成正则表达式来用),须要用preg_replace_callback函数来替代 全部的ereg系列函数被移除,PCRE作为其替代品。 一些废弃的mcrypt_开头的函数被移除。 全部ext/mysql函数被移除。 移除了类似ASP的标签和Script PHP标签。例如<% %>、<%= %>、<script language=”php”>。 PHP4风格的构造函数(方法名和类名一样)将被弃用。 废弃了静态调用未声明成static的方法。 废弃了password_hash()函数里的盐值选项,制止开发者生成自己的盐值(通常更不安全),该函数将自行生成密码学安全的盐值。 废弃了capture_session_meta内的SSL上下文选项,可以通过stream_get_meta_data()来获取SSL元数据(metadata)。
PHP 7.0.x->PHP 7.1.x
新增
可为空(Nullable)范例。参数及返回值的范例可以在其范例前加上一个?表现可空,当启用这个特性时,传入的参数或者函数返回的效果要么是指定范例,要么是null。 新的返回值范例void。返回值生命为void范例的函数须要省去返回值(去掉return或者return;), 注意这里返回null也不允许,但是假如计划获取一个返回值范例为void的函数返回值时,会得到一个null,并且不会因此产生警告。 短数组语法([])作为list()语法的一个备选项,可用于将数组的值赋给一些变量(包括在foreach中)。list()和[]已支持在其内部指定键名,这意味着可以将任意范例的数组赋值给一些变量。 支持设置类常量的可见性。 引入了iterable伪类(与callable类似)。它可以被用在参数或者返回值范例中,代表接受一个数组或者实现了遍历接口的对象。至于子类,当iterable伪类用作父类的参数范例时,子类可以收紧父类的iterable参数范例为数组范例或者实现了遍历接口的对象范例。另外,子类可以将返回值由父类返回值的数组范例或者实现了遍历接口的对象范例,拓展为iterable伪类范例。 多异常捕获处置处罚。一个catch语句块可以通过管道字符|来实现多个异常的捕获,这在须要同时处置处罚来自不同类的不同异常时很有用。 ext/openssl 支持了AEAD(模式GCM和CCM)。方式是给openssl_encrypt()和openssl_decrypt() 添加额外的参数。 Closure::fromCallable()静态方法可把callables转为闭包。 异步信号处置处罚。pcntl_async_signals()被引入,用于启用无需ticks(开销大)的异步信号处置处罚。 对服务器推送的支持已经加入到了CURL拓展中,这个可以通过curl_multi_setopt()函数与新的常量CURLMOPT_PUSHFUNCTION来调治。添加进来的CURL_PUSH_OK和CURL_PUSH_DENY两常量可用来允许或拒绝服务器推送回调的执行。 支持为负的字符串偏移量。 //代码示例 var_dump("abcdef"[-2]); //string(1) “e” var_dump(strpos("aabbcc", "b", -3)); //int(3) var_dump("abcdef"[-60]); //string(0) “” var_dump(strpos("aabbcc", "b", -5)); //int(2)
修改
当参数传递不敷时将抛出错误,这仅对用户定义的函数见效,内置函数不见效。 在不完备的对象上不调用析构方法(类的对象被销毁时自动被调用的方法__destruct)。 parse_url()提供了更加严格的限制,例如对RFC3986的支持。 file_get_contents()接受负数作为搜索偏移量,条件是流上下文必须是可搜索的。 tempnam()会在退回使用体系暂时目录的时候,产生警告。 json_encode()增加了新的选项:JSON_UNESCAPED_LINE_TERMINATORS,这个选项可以在指定值为JSON_UNESCAPED_UNICODE的时候对于U+2028和U+2029这两个字符不举行转义。 PDO::LastInsertId()在用于PostgreSQL数据库时,假如当前会话(连接到PostgreSQL的数据库连接)尚未调用过nextval,那么此方法会触发一个错误。 Session ID不在生成时举行哈希。
废除
mcrypt拓展被废弃,并被OpenSSL所取代。
PHP 7.1.x->PHP 7.2.x
新增
新的对象范例,object,引进了可用于逆变(contravariant)参数输入和协变(convariant)返回任何对象范例。 拓展文件不须要通过文件加载举行指定,可以在php.ini设置文件里举行启用,也可以使用dl()函数(运行时载入一个php拓展)举行启用。 允许重写抽象方法。当一个抽象类继承另一个抽象类时,继承后的抽象类可以重写被继承的抽象类里的抽象方法。 PDO的字符串范例已经拓展为支持国际化的字符集。 为ext/PDO新增额外的模拟调试信息。PDOStatement::debugDumpParams()方法已更新,当发送sql到数据库时,在同等性、行查询(包括替换绑定占位符)将会显示调试信息。这一特性已经加入到模拟调试中(模拟调试打开时可用)。 ext/LDAP(轻量目录访问协议)拓展新增了EXOP(extended operation,拓展操作)支持。 ext/sockets拓展 具备了查找地点信息的能力,且可以连接到地点,举行绑定息争析。 拓展了参数范例。重写方法和接口实现的范例如今可以省略了,不外这仍旧符合LSP(里氏替换原则),由于如今这种参数范例是逆变的。 命名空间可以使用尾随逗号举行分组引入。
修改
制止了number_format()返回负零。 将数组转换为对象,或者将对象转换为数组时,数字键得到了更好的处置处罚。 get_class()函数不接受null参数。 计算非可数(non-countable)范例时,发出警告。 ext/hash从资源变成对象。要注意旧版本里相应的is_resource()检查改成is_object()检查。 SSL/TSL的默认选项的改进。 gettype()对闭包资源的返回值会是“resource (closed)”,而非字符串“unknown type”。 object变更为逼迫保留字,克制在任何接口和类的名称里使用它。 使用默认参数的array_unique()会将不重复的原数组元素添加到一个新数组里,这可能改变原数组元素的键值。 parse_str()第二个参数已改为必填项,由于安全隐患标题(不加第二个参数会导致查询字符串参数导入当前符号表)。更改后查询字符串转为了Array。 utf8_encode()和utf8_decode()已作为字符串处置处罚函数移到尺度拓展中,不再须要去启用XML拓展后才能使用。 imagegd()以真彩色存储真彩色图像,而不是转化为调色板图像。 传递给session_module_name()函数的模块名不允许为“user”,会抛出一个异常错误。
废除
sql.safe_mode ini设置项已被移除。 GD拓展库里的png2wbmp()和jpeg2wbmp()已被废弃。 __autoload()方法已废弃,由于和spl_autoload_register()方法相比功能较差(由于无法链式处置处罚多个__autoloader),而且也无法在两种autoloading样式中配合使用。 track_errors ini设置和$php_errormsg变量已废弃,由于提供了更好的方式:error_get_last()。 create_function()函数(有安全隐患标题,它是eval()的瘦封装器)已被废弃,更好的选择是匿名函数。 mbstring.func_overload ini设置已废弃,由于这个设置会影响环境中的字符串系列函数,带来相互操作中的标题。 (unset)范例逼迫转化已废弃,效果总是null。 gmp_random()函数已废弃,可使用更好方式产生随机数:GMP拓展中的gmp_random_bits()和gmp_random_range()。 each()函数被废弃,使用此函数遍历时,比平凡的foreach()更慢,而且给新语法的变化带来实现标题。 assert()字符串参数要求它能被eval()执行,思量到可能被执行远程代码,所以废弃了assert()参数的字符串范例声明,最好提供bool数据范例的参数。 错误处置处罚器里的$errcontent参数被废弃。代替做法:调试器应该自己取回错误站点里的当地变量。 MCrypt拓展从内核移到了PECL,由于mcrypt库自2007年来未见任何更新,所以不建议使用mcrypt库。代替品可以用OpenSSL,也可以用Sodium。
PHP 7.2.x->PHP 7.3.x
新增
更灵活的HereDoc和NowDoc语法,支持闭合标志符的缩进,且不逼迫闭合标志符的换行。但要注意闭合标志符不要与正文中的字符串同名,制止出现语法错误息争析错误。 数组解构(布局化赋值)如今支持使用语法举行引用赋值。这对list()也同样支持。 instanceof接受笔墨作为第一个操作数,但这种情况下效果总是返回false。 允许在函数和方法调用后面使用逗号。 FastCGI历程管理器添加了log_limit、log_buffering等新选项以自定义FPM日记记载。 对LDAP控件的完全支持已添加到LDAP查询功能和ldap_parse_result()。 多字节字符串函数已可以精确处置处罚大于2GB的字符串。 多字节字符串拓展的性能已得到全面显著提高,尤其是大小写转换功能。 Arrayaccess(使对象像数组一样被访问)整数字符串键值得到严格解释,整数字符串笔墨将不导致隐式转换为整数,例如$obj[“123”]将调用$obj->offsetGet(“123”);而非$obj->offsetGet(123);
修改
getimagesize()和相干函数已将BMP图像的mime范例陈诉为image/bmp,而不是image/x-ms-bmp,由于前者已在IANA(互联网数字分配机构)注册。 默认情况下禁用rsh/ssh登录,假如要启用它们,须要使用imap.enable_insecure_rsh。注意IMAP库在将邮箱名称传给rsh/ssh命令之前不会对其举行过滤,因此在启用rsh/ssh的情况下将不受信托的数据传递给此函数是不安全的。 出于安全方面缘故原由,传入cookie的名称不举行url解码。 FTP默认传输模式已更改为二进制传输模式,而不是ASCII传输方式。 setcookie和setrowcookie函数接受$option数组参数。 getallheaders(获取全部HTTP哀求头信息)函数已可用。 垃圾采取机制有所改进,带来很大的性能提拔。 涉及SimpleXML对象的数学运算已将文本看成int或float,以更合适的方式处置处罚,而非无条件地看成整数处置处罚。
废除
大小写不敏感的常量声明已废弃。 废弃在命名空间里使用assert命名函数,由于assert()函数属于引擎特殊处置处罚的情况。 image2wbmp()函数已废弃。 已废弃:将一个非字符串内容传递给字符串搜索函数。替代为全部待搜索的内容都会被看成是字符串,而不是ASCII编码值。假如须要依赖这个已被废弃的特性,须要将传入的非字符串内容先显式转换为字符串范例,或者显式地调用chr()。
PHP 7.3.x->PHP 7.4.x
新增
类的属性支持添加指定的范例声明。 支持完备的协变和逆变。协变使子类能比父类的返回范例更具体,逆变使子类能比父类接受的参数范例更宽泛。 合并空运算符赋值,??=后面可以接函数名。 数组展开操作中。可以用...接数组名作为另一个数组的数组项。 数字笔墨可以在数字之间包含下划线。 弱引用允许保留对对象的引用,但不会制止对象被销毁。弱引用是通过变量来创建的,指向的是原始对象的符号表,可以让垃圾采取器正常的采取,可以制止循环引用带来的内存泄漏标题,能让引用表现为类似C语言里的指针操作。 允许__tostring()方法抛出异常,而非制止步伐继承运行的错误。 假如拓展是针对libcurl>=7.56.0创建的,那么CURLFile不但支持文件名的处置处罚,也支持流封装器的处置处罚。 FFI拓展。该拓展提供了一种调用当地函数,访问当地变量,及创建和访问C库中定义的数据布局的简单方法。 添加了IMG_FILTER_SCATTER图像过滤器以将散列过滤器应用于图像。 mb_str_split()函数。str_split()用于将字符串分隔到数组中,但它仅可以分割字母和数字,新增的mb_str_split()函数是对其的补充,可以用来分割任何指定编码的字符串。 缓存预加载特性。注意性能和内存之间的最佳衡量可能因应用步伐而异,“预装统统”可能是最简单的战略,但不肯定是最佳战略。 可以在sql查询中转义问号以制止其被看成参数占位符,写作??允许向数据库发送一个问号,例如PostgreSQL JSON键缓存里存在问号时。 PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)允许检查语句是否为只读,即它是否不修改数据库。 strip_tags第二个参数(允许通过的标署名单)已可以传入一个数组。 添加了自定义对象序列化的新机制,它使用了两个新的把戏方法:__serialize()和__unserialize()。新的序列化机制取代了Serializable接口。 为array_key_exists添加了一个专门的VM opcache优化,假如该函数可以被静态解析,则可以提高该函数的性能。假如在项目中使用命名空间,可能须要使用\array_key_exists()来显式导入该函数。 箭头函数提供了更简便的定义函数的方法。
修改
get_declared_classes()函数在匿名类未实例化时,不返回匿名类的名称。 fn成了保留关键字,不可以作为函数名和类名,但是仍旧可以作为方法名和类的常量名。 fread()和fwrite()在操作失败时将返回false,而非空字符串或0。 token_get_all()为不测字符发出T_BAD_CHARACTER警告,而不是在令牌流中留下弊端。 不推荐使用$this来解绑非静态闭包里的$this。 imagescale()已支持将-1作为$new_width传递来使图像缩放到指定高度时保持纵横比。 哈希拓展已不能被禁用,它已成为PHP里很紧张的构成因素,就像是日期拓展一样。
废除
MySQLi嵌入式服务器功能已被删除。未记载的mysqli::$stat属性已被删除,以支持mysqli::stat()。 导入范例库的大小写不敏感的常量注册已被废弃。 捆绑的libzip库已被删除。须要一个体系libzip>=0.11来构建zip拓展。
PHP 7.4.x->PHP 8.0.x
新增
命名参数。命名参数允许根据参数名而不是参数位置向函数传参,这使得参数的寄义自成体系。命名参数通过在参数名前加冒号来传递,允许使用保留关键字作为参数名,参数与顺序无关,并允许任意跳过默认值。参数名必须是一个标识符,不允许动态指定。 注解功能。注解的功能使得代码中的声明部门都可以添加布局化、呆板可读的元数据。注解的目标可以是类、类常量、属性、方法、函数、参数。通过反射API可在运行时获取注解中所定义的元数据。因此注解可以成为直接嵌入代码的设置式语言。注解使用的一个简单例子是:将接口(interface)里的可选方法改用注解实现。 构造器属性提拔。构造器里的参数可以相应提拔为类的属性,注意对象属性的范例不可以为callable,制止为引擎带来肴杂,因此提拔的参数也不能是callable。 联合范例。联合范例接受多个不同的范例作为参数,声明联合范例的语法是T1|T2|...。?T语法将看成是联合范例T|null的简写。注意null范例允许在联合范例里使用,但是不能作为一个独立的范例使用。 match表达式。match表达式与switch表达式相似,但是match表达式里是严格比力(===),一个match分支只能有一个表达式,每个分支都会有一个返回值,match的匹配表达式里可以用逗号来分割多个表达式。对于match表达式,传入的参数必须存在与表达式匹配的条件或default要处置处罚的条件,否则会报异常。match末尾的大括号后面要用分号;结束。 Nullsafe操作符(?->)。类属性和方法可以通过nullsafe操作符访问。对象引用解析为null时不抛出异常,而是返回null,假如是链式调用中的一部门,则剩余链条会直接跳过。此操作的效果类似于在每次访问前用is_null()函数判定一下属性和方法是否存在,但代码更加简便。注意仅当null是属性或者方法可能返回的预期值的情况下,才推荐用Nullsafe操作符。假如业务中须要明确指出错误,那么还是用抛出异常的方案来处置处罚更好。 WeakMap类。WeakMap类接受对象作为键的映射(或字典),WeakMap键中的对象不影响对象的引用计数。它的重要用途是构建源自对象的数据缓存,这些数据不须要比对象存在更长的时间。WeakMap类实现了ArrayAccess(数组式访问)、Iterator(迭代器)和Countable(可计数),所以在大多数情况下,它可以以与关联数组雷同的方式使用。 static(如“后期静态绑定”)可以用作返回范例。 可以通过$object::class来获取类名,与get_class($object)返回效果同等。 HashContext对象已可以序列化。 new,instanceof(判定一个对象是否是某个类的实例,或者实现了某个接口)可用于任何表达式。用法为 new (expression) (...$args)和$obj instanceof (expression)。 支持mixed(值可为任何范例)范例。 对加密消息语法(CMS)的支持。由用于加密、解密、署名、验证和读取的函数构成。 可选的压缩、加密功能已列入phpinfo中。 opcache拓展新增了即时编译(JIT)的支持。 PhpToken向标志器添加了一个基于对象的接口,它提供了更同一和符合功效学的表现,具备更高的内存服从和更快的速率。
修改
数字与非数字范例的字符串非严格比力(==)时,将把数字转换为字符串,然后比力两个字符串。数字与数字范例的字符串非严格比力(==)时,则可理解为是把数字范例的字符串转为数字,然后比力两个数字。例如0==”” 将返回false,而不是true。 断言(Assertion)失败已默认抛出异常,假如须要改回之前的行为,须要在ini里设置assert.exception=0。 与类名雷同的方法名不被看成构造方法,类的构造方法需用__construct()。 不允许通过静态调用的方式调用非静态方法。因此is_callable()在检查具有类名的非静态方法时会失败(必须检查对象实例)。 已删除对对象使用array_key_exists()函数的能力。可以使用isset()或者property_exists()函数替代。 在没有父级的类中使用父级声明会造成严肃的编译时错误。 @运算符不消除严肃错误(E_ERROR\E_CORE_ERROR\E_COMPILE_ERROR\E_USER_ERROR\E_RECOVERABLE_ERROR\E_PARSE)。使用@时期望error_reporting为0,错误处置处罚函数应调整为使用隐式检查。注意在生产环境中不要显示出错误信息,由于这可能导致信息泄漏,需确保display_errors=Off与错误记载一同使用。 #[不被解释为注释的开始,由于此语法已用于属性。 data://流封装器不支持写入。 连接运算符.的优先级相对于位移、加法、减法的优先级发生了变化。
废除
过滤器string.strip_tags(此过滤器等同于用strip_tags处置处罚全部的流数据)已废弃。 read_exif_data()已被废除;应该改用exif_read_data()。exif_read_data()函数的作用是从一个图片文件里读取EXIF头信息,这样就可以读取数码相机产生的元数据。
总结
到此这篇关于PHP5.2.x至PHP8.0.x版本升级新增特性的文章就先容到这了,更多相干PHP5.2至PHP8版本特性内容请搜索脚本之家以前的文章或继承欣赏下面的相干文章盼望大家以后多多支持脚本之家! 来源:https://www.jb51.net/program/316278byg.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |