性能提升
php5.3的总体性能提升了5-15%
md5()快了10-15%
Betterstackimplementationintheengine
Constants移到read-only内存里
exception处理过程改进(简化
,opcodes更少)
(require/include)_once改进
,去掉重复open
Smallerbinarysize&startupsizewithgcc4
新语言特性
__DIR__
在5.3以前,为了获得当前脚本的目录,需要一次函数调用
CODE:
echodirname(__FILE__);//<
PHP5.3
在5.3,只需要一个魔术常量__DIR__就解决了
。 CODE:
echo__DIR__;//>=
PHP5.3
?:操作符
便捷的?:操作符,可以从两个值/表达式中快速取得非空值
。 CODE:
$a=true?:false;//true
$a=false?:true;//true
$a=""?:1;//1
$a=0?:2;//2
$a=array()?:array(1);//array(1);
$a=strlen("")?:strlen("a");//1
__callStatic()
新增了魔术方法__callStatic,功能和__call类似,但是仅对static方法有效。
CODE:
classhelper{
staticfunction__callStatic($name,$args){
echo$name.'('.implode(',',$args).')';
}
}
helper::test("foo","bar");//test(foo,bar)
动态调用static方法
动态的调用静态方法?动静结合。
CODE:
classhelper{
staticfunctionfoo(){echo__METHOD__;}
}
$a="helper";
$b="foo";
$a::$b();//helper::foo
LateStaticBinding
不知道怎么译,可能留个原文更容易理解。静态方法的事件处理时机有变化,以前是在编译期处理,现在是执行期间处理。
在php5.3之前,下面的代码会输出一个A,但是这不是咱们要的,whoami方法已经在classB中重新定义,它本该输出B才符合咱们想当然的思维。
CODE:
classA{
publicstaticfunctionwhoami(){
echo__CLASS__;
}
publicstaticfunctionidentity(){
self::whoami();
}
}
classBextendsA{
publicstaticfunctionwhoami(){
echo__CLASS__;
}
}
B::identity();//A<--PHP<5.3
下面代码中使用了static::whoami()来调用静态方法。php5.3之后,由于__CLASS__是在执行期被处理,那么这个例子中能顺利抓到classB。
CODE:
classA{
publicstaticfunctionwhoami(){
echo__CLASS__;
}
publicstaticfunctionidentity(){
static::whoami();
}
}
classBextendsA{
publicstaticfunctionwhoami(){
echo__CLASS__;
}
}
B::identity();//B<-->=PHP5.3
mysqlnd
mysqlnd成为php5.3中的默认mysql驱动,它有如下优点:
mysqlnd更容易编译:因为它是php源码树的一个组成部分
mysqlnd和php内部机制结合更紧密,是
优化过的mysql驱动
mysqlnd更节省内存,从测试结果来看,比传统的mysql扩展节省40%的内存
mysqlnd更快
mysqlnd提供了丰富的性能统计功能
mysqlnd使用了PHPlicense以避免不必要的版权纠纷
这个改动应同时对mysql和pdo_mysql扩展生效。
mysqlnd是什么
mysqlnd是mysql原装的php驱动
但是PDO_My
SQL暂时还不支持mysqlnd,目前只有mysql(i)扩展可以用到