php5.0到5.6的新特性,开发时应注意版本的兼容性

php5.0

使用了Zend 2 引擎。

增加完善的面向对象模型

增加了新关键字,包括this,try,catch,public,private,protected等

改变strrpos() 和 strripos()使用整个字符串作为 needle。

改变array_merge() 只接受数组

改变非法使用字符串偏移量会导致 E_ERROR 而不是 E_WARNING

改变get_class(),get_parent_class()和get_class_methods() 返回的类/方法名和定义时的名字一致(区分大小写)

改变ip2long() 在传递入一个非法 IP 作为参数时返回 FALSE,不再是 -1。

改变函数定义在包含文件中,则这些函数可以在主文件中使用而与是否在 return 指令之前还是之后无关

改变include_once 和 require_once 在 Windows 下路径规格化,因此包含 A.php 和 a.php 只会把文件包含一次。

php 5.1

重写了数据处理部分的代码

PDO扩展默认启动

性能优化

超过30个新函数

超过400个bug修复

php5.2

CLI SAPI不再从php.ini和php-cli.ini中获取当前目录信息。这是从安全角度考虑的。

增加json支持

对0取模的时候会提示Warning信息。

对象可以通过__toString()函数被当做字符串调用。

禁止设置抽象类的静态方法

增加RFC(data:stream)的支持。

php5.3

不再支持ISAPI

增加了命名空间的支持.

增加了延迟静态绑定支持.

增加了闭包及匿名函数支持。

增加了循环引用的垃圾回收器并且默认是开启的.

增加允许动态访问静态方法。

增加了 Nowdoc 语法支持, 类似于 Heredoc 语法, 但是包含单引号.就是

增加了两个魔术方法, __callStatic 和 __invoke.

增加魔法常量 DIR 来解决路径问题

改变__toString 魔术方法不再接受参数

改变魔术方法 get, set, isset, unset, and __call 应该总是公共的(public)且不能是静态的(static). 方法签名是必须的.

改变__call 魔术方法在访问私有的(private)和被保护的(protected)方法时被调用.

改变realpath() 现在是完全与平台无关的. 结果是非法的相对路径比如 FILE . "/../x" 将不会工作.

call_user_func() 系列函数即使被调用者是一个父类也使用 $this.

改变数组函数 natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), 和 array_unique() 将不再接受对象作为参数

改变include(require)_once 解决重复打开的问题,整体性能提高了 5%-15%

改变md5() 大概提高了 10%-15% 的性能,更好的内存处理机制,提高软件性能的访问。

改变函数内 include 或者 require 一个文件时,文件内 将不能使用 func_get_arg(), func_get_args() 和 func_num_args() 函数

改变HTTP 流包裹器将从 200 到 399 全部的状态码都视为成功

改变异常可以被内嵌

改变三元操作符简写echo a ? a : "No Value"==$a ?: "No Value";

改变使用双引号声明 Heredoc, 补充了 Nowdoc 语法.

改变可在类外部使用 const 关键词声明 常量.

php5.4

不再支持 安全模式 。任何依赖安全模式的应用在安全方面都需要进行调整。

增加支持 traits 。

增加短数组语法,比如 a=[1,2,3,4];或a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 。

增加支持对函数返回数组的成员访问解析,例如 foo()[0] 。

增加 闭包 支持 $this 。

增加不管是否设置 short_open_tag php.ini 选项,

增加在实例化时访问类成员,例如: (new Foo)->bar() 。

增加支持 Class::{expr}() 语法。

增加二进制直接量,例如:0b001001101

增加内置用于开发的 CLI 模式的 web server 。

增加SESSION 扩展现在能追踪文件的 上传进度

改变移除魔术引号 。为避免出现安全问题,依赖此特性的应用可能需要升级。

改变get_magic_quotes_gpc() 和 get_magic_quotes_runtime() 现在总是返回 FALSE 。

改变php.ini 指令register_globals 和 register_long_arrays 被移除。

改变调用时的引用传递 被移除。就是不能有f(&$a)这样的形式

改变break 和 continue 语句不再接受可变参数

改变在日期与时间扩展 中,不再支持时区使用 TZ(TimeZone)环境变量设置,必须使用 date.timezone php.ini 配置选项或 date_default_timezone_set()

改变数组转换成字符串将产生一条 E_NOTICE 级别的错误

改变NULL 、FALSE 、或 一个空字符串被添加成一个对象的属性时将发出一条 E_WARNING 级别的错误

改变参数名使用全局变量将会导致一个致命错误

改变Salsa10 和 Salsa20 哈希算法 被移除

改变当使用两个空数组作为参数时,array_combine() 现在返回 array() 而不是 FALSE

改变htmlentities() 将像 htmlspecialchars() 一样处理亚洲字符集

改变不要再使用 eregi() ,此特性在最新版本中被移除

改变非数字的字符串偏移量,比如 a[′foo′]此处a 是一个字符串,现在使用 isset() 时返回 false,使用 empty() 时返回 true,

改变解析错误信息和不兼容参数的警告

php5.5

已放弃对 Windows XP 和 2003 的支持。需要 Windows Vista 或更新的系统。

增加 Generators,包括yield关键字

增加 finally 关键字

增加了代码的opcache缓存

改变pack() 和 unpack()函数

改变移除 PHP logo GUIDs

改变foreach 现在支持 list()

改变empty() 支持传入一个任意表达式,而不仅是一个变量

改变非变量array和string也能支持下标获取了

改变类名通过::class可以获取

php5.6

增加可变参数函数的支持,不再依赖func_get_args()函数,现在可以通过新增的操作符(...)可以把数组或者可遍历对象解包到参数列表

增加一个交互式调试器phpdbg

改变const 允许使用包含数字、字符串字面值和常量的标量表达式

改变GMP 对象支持操作符重载和转换为标量

改变采用CryptoPro S-box tables实现了 gost-crypto 哈希算法

改变OpenSSL扩展新增证书指纹的提取和验证功能,

改变use 操作符开始支持函数和常量的导入 use function 和 use const

改变php://input 开始支持多次打开和读取,这给处理POST数据的模块的内存占用带来了极大的改善。

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5