php5.3新特性

1、引入 __DIR__ magic常量 定位脚本的目录
<?
   
echo __DIR__."|".dirname(__FILE__);
?>

9 l* C/ F/ {4 W, t7 G$ Z
2、允许从2个值的or/and表达式快速的获取一个非空的值 <? 0 l) R6 S. y) |0 f
   
echo (1 ?: 0) ."|". ("" ?: 0)."|". var_export(array() ?: array(1), true);
?>
4 {+ {. C" m; e* J$ [) d9 b

3、类添加__callStatic方法,等价于 __call(),但它是为调用静态方法准备的。下面来看示例: <?
   
class xxx{
        function
__call($func, $args){
            echo
"function name:".$func; ( t! x7 g. X- E
            echo
"</br />"; - n1 g1 [7 ^4 q5 @
            echo
"args:".var_export($args, true); 6 R, i% K& F, {" o6 e( e$ s3 C
        } 0 h. ]0 q! i8 J1 V" e1 Y' B
        static function
__callStatic($func, $args){
            echo
"static function name:".$func;
            echo
"</br />"; , t2 S4 z# c0 r
            echo
"static args:".var_export($args, true); 8 N" D  U; l* H3 C* k2 N
        } % i; F: P" ^/ b
    }
   
$x = new xxx();
   
$x->testfunc("oo");
    echo
"</br />";
   
xxx::teststatic("xx"); / Y! ]; d1 v1 ?9 U9 L
?>

: V  i5 {- W1 F( o# U3 F; ?$ e6 N. D2 f
4、动态的调用静态的方法 <?
   
class xx{
        static function
test(){
            echo
__METHOD__;   U4 B8 a4 t; G  o" z2 e3 Z1 q
        } 7 Z2 h& U- s: x& Q
    } ( `' Z9 B. b4 |6 |+ J, e
   
$c = "xx"; ! {4 h1 b. |, y' P+ k
   
$m = "test"; ; T. z3 G( e- o
   
$c::$m();
?>

6 s- U" E4 O$ c8 L2 U6 b
5、延迟静态绑定(静态处理从编译时延迟到执行时) <? ! g- I' c' h1 }& |, s
class A{ & o3 u4 l! k+ y2 E4 p7 ^
    static function
whoami(){ 8 ^3 R8 |% \5 s, R4 F
        echo
__CLASS__; 2 k# l( N; T. V# x' y5 D; ^
    } ' }- F* m: R. Q4 X. r! p9 T
/ @% x; y) H+ D2 {
    static function
say1(){
        
self::whoami();
    }
4 i3 u5 ~$ \0 o: q
    static function
say2(){
        static::
whoami();
    } ) ~5 ?; I& M2 Y! n  e
}
/ }3 H" p, A! e& r) Z/ Z! a& ?
class
B extends A{ : V+ g4 K4 k) l1 [3 b. W1 N
    static function
whoami(){ " j$ ~) z! D2 ?' i7 M0 P4 U9 z/ G
        echo
__CLASS__; # L; }0 W7 ?- I) ~( D8 N$ @+ [
    } 5 H9 p1 q7 q2 M* j& [- E
}
; V: c% @* ^5 O/ T& Z5 l
class
C extends A{ : k7 |. g- N, `+ L5 {0 f1 Y( `
    static function
whoami(){
        echo
__CLASS__; 9 b0 W( d9 s# c7 q2 \
    } , B0 A3 F2 o# Y
} " o- Q8 c% a: ~8 }

B::say1();
C::say2();   j8 [) A! m2 }- {! N0 m+ S
?>
  P7 o: s8 b, }7 |& o

6、MySQLInd (高速的专门为PHP设计的MySQL调用库接口)
7、INI Magic 2 s+ S, D: J# T& T2 \8 J2 e
8、扩展的 OpenSSL 函数 # b6 V( \) N7 d3 L7 E2 l
9、SPL(Standard PHP Library) 优化
10、时间处理进行扩展了和添加 <? # @$ a2 v5 T, a9 n$ T5 s
    $date
= strtotime("11-05-17 00:00:00");
    echo
date("Y-m-d", $date)."|"; + y! h$ \- B; r
     - ~4 P$ B; _5 Y. e' ]& i
   
$date = date_create_from_format("y-m-d", "11-05-17");
    echo
$date->format("Y-m-d"); + Y  {( {: ~8 ]0 X5 l$ Q9 v
?>
2 Q. j+ W9 u: a, k7 P1 a
2 d& S4 i" `) W# Z8 X; R
11、垃圾回收器(为复杂和长时间运行脚本的执行结束周期释放内存的清理) <? % F# m8 B4 P# ?
    gc_enable
(); // 允许垃圾回收 6 O5 f$ {/ J" R2 [; x/ L: ?0 P
   
var_dump(gc_enabled()); // true
     
   
var_dump(gc_collect_cycles()); // 某个元素的清理 ; J  Q$ M$ e' v) A# {
     3 A) a6 W/ Q8 y. V1 P
   
gc_disable(); // 禁止垃圾回收
?>

7 o) u6 Z, }! V4 j
12、NOWDOC(不对HEREDOC进行转译) <?
    $fubar
= "xxx"; : R- b: Z9 [+ E' p" z
     2 `# S; {) _$ C9 q! [' N: H2 u
   
$xbar = <<<ONE 3 E- l2 c7 m% u9 T
        this is HEREDOC $fubar 1 Z( ~" H% N. _' Z8 C+ w  C, @
    ONE;
     , L5 d7 \8 z1 r' C2 |5 k, d
   
$abar = <<<'TWO'
        this is NOWDOC
$fubar
    TWO;
    echo
$xbar."|".$abar; ; E- W' U  F6 X( ?
?>

* l: N6 s" ]; F: j
13、匿名函数体验 <?
    $ofun
= create_function('$a, $b', 'return $a*$b;'); //不要忘了分号,传统方法
   
echo $ofun(2, 5); ' b5 n. e# l& x  J5 A
     
   
$nfun = function ($a, $b){
        return
$a*$b; 8 G+ ]# l9 J+ k+ j# u
    };
//不要忘了分号,现代方法 & j7 r( r( f2 ?# ^$ u
     
   
echo $nfun(3, 5); 9 q" ]: o8 F! K" g; ~3 q# @! B
?>

) G, Q6 K+ R( K5 x, [
14、闭包体验 <?
    $arr
= array(1, 2, 3, 5, 6, 7);
   
$res = array_filter($arr, function($v) { return $v >4; });
   
var_dump($res);
     
    function
countnum(){ * t! N3 b% k5 Y4 H3 k
        
$num = 0;
        
$testt = function() use(&$num){
            ++
$num; 3 e2 r/ q+ Q+ K# q1 G7 N# k* l
            echo
$num; ! _1 Z  ^+ v% @1 @0 G
        };
        return
$testt; " a2 s8 V- D* R6 n" u+ P3 y
    } 5 t0 L  A3 C* p
     
   
$t = countnum(); - }) q/ k) p& m! s
   
$t(); : Q6 o+ N- r/ w5 m- a+ d* K
   
$t(); , F1 C8 H1 w, w& L, M) ?2 l
?>
' o! A4 S* w7 m* {  e# j7 |

15、命名空间 <?
   
namespace xxx; //第一个namespace需要在所有输出之前
   
function t(){ / x, S! I" }" \) T7 h& }2 W
        return
__NAMESPACE__; + Y5 w# m4 U, F% A# _- E( N, Q
    } 9 z. J+ z5 R$ D( ~
     
    namespace
xxx;
     9 j. L8 l* P# H- v5 r
    function
t(){ , Q2 ]2 f" B7 @# C
        return
__NAMESPACE__; 5 y& A* w% `) t# j
    }
     
    echo \
xx\t()."|"; 1 @, |6 a0 V7 f6 j& I- Z
    echo \
xxx\t();
?>
6 c1 \) x/ ]9 n3 c# |# i& I

你可能感兴趣的:(php5.3新特性)