这次停更博真是太久太久太久了,手上的事情太多了,无论是生活、工作上的。我向来喜欢追新版本,而php7.0正式版也将要与本月12号正式发布。之前,有人问过我为毛喜欢追求新版本,其实,在保证系统稳定的情况下,新版本肯定能带来性能上的提升,尤其,是新开发的产品,我的开发环境本来就是最新的。但是,也很遗憾,当再追问我,php5.6相较php5.5有什么样的更新时,我心里却是未必那么的清楚。所以,做个总结,在保证系统稳定的情况下,能够做出最正确的选择。
介个,就不总结了。php4及以前也真是太老了,面向对象的支持也是乱七八糟的,反正也不会用。。。
二、php5.2以前
__autoload函数,如果定义了该函数,当在代码中使用一个未定义类时,该函数会被调用。该函数已经不被建议使用,因为一个项目中仅能有一个这样的__autoload函数,php不允许函数重名。当使用一些类库的时候,难免会出现多个__ autoload,于是spl_autoload_register取而代之:
spl_autoload_register(function($classname)){
require_once(“{$classname}.php”);
}
spl_autoload_register会将一个函数注册到autoload函数列表中,当出现未定义类的时候,spl会按照注册的倒序逐个调用被注册的autoload函数,可以注册多个autoload函数。(ps spl,standard php library,标准php库,被设计用来解决一些经典问题)。
pdo和mysqli,pdo是官方推荐的,更为通用的数据库访问方式,若需要使用mysql所特有的高级功能,则应该使用mysqli
类型约束,通过类型约束可以限制参数的类型,目前仅适用于类和callable(可执行类型)以及array,不适用于int和string
三、php5.2
json支持,注:json_decode默认返回一个对象而非array,如需数组,第二个参数需置为true(多嘴一句,貌似在知乎上看到一个批评php语法的,这就是被吐槽的一个例子)
四、php5.3
这个版本算是个非常大的更新,新增大量特性,也做了一些不向下兼容的修改
被弃用的功能(若在php.ini中启用,则php运行时发出警告):
register globals,开启后会将所有表单变量post和get注册为全局变量(php5.4被移除)
magic quotes,会将所有用户输入进行转义(php5.4被移除)
safe mode
新增、改进:
匿名函数,也叫必包(closures),经常被用来临时性地创建一个无名函数,用于回调函数等用途。$func = function($arg){print $arg;}; $func(“hello world”);匿名函数还可以用use关键字来捕捉外部变量
魔术方法, __invoke()和__callStatic(),php面向对象提系统,提供若干魔术方法,用于实现类似其他语言中的重载。invoke在把一个对象作为函数时被调用。$a=new A();$a(‘hello world’)。callStatic会在调用一个不存在的静态方法时被调用。
命名空间
heredoc和nowdoc,heredoc以三个左尖括号开始,后面跟标识符,直到同一个顶格的标识符(不能缩紧)结束。就像双引号一样,可以嵌入变量。nowdoc像一个但引号字符串,不能再其中嵌入变量。和heredoc唯一的区别是,三个尖括号后标识符要以单引号括起来。
使用const定义常量
三元运算符简写形式,$a?:’no value’
phar,即php archive,起初只是pear中的一个库而已,后来在php5.3被重新编译成c扩展并内置到php中。phar用来将多个php脚本打包(也可以打包其他文件)成一个.phar的演说文件,母的在于模仿java的jar。phar文件可以像php文件一样被php引擎解析执行。同时还可以使用require(‘phar://x.phar/dir/ox.php’);
五、php5.4
short open tag,自php5.4默认开启。<? …?> ,<?=$a;?>。对于纯php文件,php官方建议顶格写起始标记,同时省略结束标记。这样可以确保整个php文件都是php代码,没有任何输出,否则当包含该文件后,设置header和cookie会遇到一些麻烦
[],数组简写形式
traits,所谓traits就是构件,是用来替代继承的一种机制。php中无法进行多重继承,但一个类可以包含多个traits
/traits不能被单独实例化,只能被类所包含 trait SayWorld{ public function sayHello(){ echo 'world'; } } class MyHelloWorld{ use SayWorld;//将sayworld中的成员包含进来 } $a = new MyHelloWorld(); $a->sayHello();
traits还有很多神奇的功能,比如包含多个traits,解决冲突,修改访问权限,为函数设置别名等。traits中也同样可以包含traits
内置web服务器,php -S localhost:8000,就可以通过localhost:8000 来访问。很多应用中都会进行url重写,所以php提供了一个设置路由脚本的功能php -S localhost:8000 index.php则所有的请求都会由index.php来处理
新增动态访问静态方法的方式 $func = ‘sss';A::{$func}();,新增在实例化时访问类成员的特征(new ClassA)->xxoo();新增支持对函数返回数组成员访问的解析print func()[0]
六、php5.5
yield关键字用于当函数需要返回一个迭代器的时候,逐个返回值
list()可以用于foreach中解析嵌套的数组$array=[[1,2,3],[4,5,6]];foreach( $array as list($a,$b,$c) ){echo {$a}{$b}{$c}.”\n”}
不推荐使用mysql函数,推荐使用pdo和mysqli,不再支持winxp,可以用myclass:class取到一个类的完整限定名(包括命名空间),empty支持表达式作为参数,try-catch结构新增finally块
七、php5.6
更好的常量。const A=1;const B = A=1;
更好的可变函数参数。用于代替func_get_args(),
function add(...$args){ foreach($args as $ars){ ... } }
命名空间,支持常量和函数
转载请注明:飞嗨 » php5各个版本的新功能和新特性总结