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数据的模块的内存占用带来了极大的改善。

相关推荐
残月只会敲键盘2 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88882 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88882 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
yanwushu3 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer
事业运财运爆棚3 小时前
php 如何将数组转成对象数组
php
天下皆白_唯我独黑4 小时前
php 使用qrcode制作二维码图片
开发语言·php
残月只会敲键盘11 小时前
php代码审计--常见函数整理
开发语言·php
ac-er888812 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
YUJIANYUE15 小时前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
龙哥·三年风水1 天前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统