欢迎来到科站长!

PHP编程

当前位置: 主页 > 网络编程 > PHP编程

PHP5.2.x至PHP8.0.x版本升级新增特性

时间:2024-02-24 17:31:37|栏目:PHP编程|点击:

目录

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标签。例如<% %>、<%= %>、

广告投放 | 联系我们 | 版权申明

申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:257218569 | 邮箱:257218569@qq.com

Copyright © 2018-2025 科站长 版权所有冀ICP备14023439号