新语言特性 __DIR__
在5.3以前,为了获得当前脚本的目录,需要一次函数调用
PLAIN TEXT
CODE:
echodirname(__FILE__);//<PHP5.3
在5.3,只需要一个魔术常量__DIR__就解决了。
PLAIN TEXT
CODE:
echo__DIR__;//>=PHP5.3
?:操作符
便捷的?:操作符,可以从两个值/表达式中快速取得非空值。
PLAIN TEXT
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方法有效。
PLAIN TEXT
CODE:
classhelper{
staticfunction__callStatic($name,$args){
echo$name.'('.implode(',',$args).')';
}
}
helper::test("foo","bar");//test(foo,bar)
动态调用static方法
动态的调用静态方法?动静结合。
PLAIN TEXT
CODE:
classhelper{
staticfunctionfoo(){echo__METHOD__;}
}
$a="helper";
$b="foo";
$a::$b();//helper::foo
Late Static Binding
不知道怎么译,可能留个原文更容易理解。静态方法的事件处理时机有变化,以前是在编译期处理,现在是执行期间处理。
在php 5.3之前,下面的代码会输出一个A,但是这不是咱们要的,whoami方法已经在class B中重新定义,它本该输出B才符合咱们想当然的思维。
PLAIN TEXT
CODE:
classA{
publicstaticfunctionwhoami(){
echo__CLASS__;
}
publicstaticfunctionidentity(){
self::whoami();
}
}
classBextendsA{
publicstaticfunctionwhoami(){
echo__CLASS__;
}
}
B::identity();//A <-- PHP <5.3
下面代码中使用了static::whoami()来调用静态方法。php 5.3之后,由于__CLASS__是在执行期被处理,那么这个例子中能顺利抓到class B。
PLAIN TEXT
CODE: