代码改变世界

PHP学习(四):PHP5.3版本的新特性

2011-11-22 15:27  薛凯凯圆滚滚  阅读(201)  评论(0编辑  收藏  举报
1、引入 __DIR__ magic常量 定位脚本的目录
<? 
    
echo __DIR__."|".dirname(__FILE__); 
?>
2、允许从2个值的or/and表达式快速的获取一个非空的值
<? 
    
echo (?: 0) ."|". ("" ?: 0)."|"var_export(array() ?: array(1), true); 
?>
3、类添加__callStatic方法,等价于 __call(),但它是为调用静态方法准备的。下面来看示例:
<? 
    
class xxx
        function 
__call($func$args){ 
            echo 
"function name:".$func
            echo 
"</br />"
            echo 
"args:".var_export($argstrue); 
        } 
        static function 
__callStatic($func$args){ 
            echo 
"static function name:".$func
            echo 
"</br />"
            echo 
"static args:".var_export($argstrue); 
        } 
    } 
    
$x = new xxx(); 
    
$x->testfunc("oo"); 
    echo 
"</br />"
    
xxx::teststatic("xx"); 
?>
4、动态的调用静态的方法
<? 
    
class xx
        static function 
test(){ 
            echo 
__METHOD__
        } 
    } 
    
$c "xx"
    
$m "test"
    
$c::$m(); 
?>
5、延迟静态绑定(静态处理从编译时延迟到执行时)
<? 
class A
    static function 
whoami(){ 
        echo 
__CLASS__
    } 

    static function 
say1(){ 
        
self::whoami(); 
    } 

    static function 
say2(){ 
        static::
whoami(); 
    } 


class 
extends A
    static function 
whoami(){ 
        echo 
__CLASS__
    } 


class 
extends A
    static function 
whoami(){ 
        echo 
__CLASS__
    } 


B::say1(); 
C::say2(); 
?>
6、MySQLInd (高速的专门为PHP设计的MySQL调用库接口)
7、INI Magic
8、扩展的 OpenSSL 函数
9、SPL(Standard PHP Library) 优化
10、时间处理进行扩展了和添加
<? 
    $date 
strtotime("11-05-17 00:00:00"); 
    echo 
date("Y-m-d"$date)."|"
     
    
$date date_create_from_format("y-m-d""11-05-17"); 
    echo 
$date->format("Y-m-d"); 
?>
11、垃圾回收器(为复杂和长时间运行脚本的执行结束周期释放内存的清理)
<? 
    gc_enable
(); // 允许垃圾回收 
    
var_dump(gc_enabled()); // true 
     
    
var_dump(gc_collect_cycles()); // 某个元素的清理 
     
    
gc_disable(); // 禁止垃圾回收 
?>
12、NOWDOC(不对HEREDOC进行转译)
<? 
    $fubar 
"xxx"
     
    
$xbar = <<<ONE 
        this is HEREDOC $fubar 
    ONE; 
     
    
$abar = <<<'TWO' 
        this is NOWDOC 
$fubar 
    TWO; 
    echo 
$xbar."|".$abar
?>
13、匿名函数体验
<? 
    $ofun 
create_function('$a, $b''return $a*$b;'); //不要忘了分号,传统方法 
    
echo $ofun(25); 
     
    
$nfun = function ($a$b){ 
        return 
$a*$b
    };
//不要忘了分号,现代方法 
     
    
echo $nfun(35); 
?>
14、闭包体验
<? 
    $arr 
= array(123567); 
    
$res array_filter($arr, function($v) { return $v >4; }); 
    
var_dump($res); 
     
    function 
countnum(){ 
        
$num 0
        
$testt = function() use(&$num){ 
            ++
$num
            echo 
$num
        }; 
        return 
$testt
    } 
     
    
$t countnum(); 
    
$t(); 
    
$t(); 
?>
15、命名空间
<? 
    
namespace xxx//第一个namespace需要在所有输出之前 
    
function t(){ 
        return 
__NAMESPACE__
    } 
     
    namespace 
xxx
     
    function 
t(){ 
        return 
__NAMESPACE__
    } 
     
    echo \
xx\t()."|"
    echo \
xxx\t(); 
?>