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