0%

PHP 的不为人知的新特性

php5.3中新增的特性

静态晚绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
class A {
public static function who(){
echo __CLASS__;
}

public static function test(){
         echo static::who();
}

    public static function test2(){
         echo self::who();
}
}

class B extends A{
    public static function who(){
      echo __CLASS__;
    }
}

A::test();//输出A
A::test2();//输出A

b::test();//输出B 晚期静态绑定会绑定到调用类
b::test2();//输出A 直接绑定会绑定到方法所在类

晚期静态绑定是使用static代替selfself会指向方法所在类,static会指向后期调用者。

goto支持

1
2
3
4
5
6
<?php
goto a;
echo 'Foo';
a:
echo 'Bar';
//输出Bar

当需要跳出多层循环时,必须要增加判断才可以,而goto可以直接跳出循环,与C语言类似。

三元运算简写形式

从php5.3开始支持三元运算符?:。例如$a ?: $b$a为真值返回$a,否则返回$b。其效果等同于$a ? $a : $b

1
2
3
4
5
6
7
<?php
$a = false;
$a = $a?:1;
echo $a;//输出1
$a = 1220;
$a = $a?:1;
echo $a;//输出1220

php5.6中新增的特性

const常量可以用表达式定义,const常量可以是数组

1
2
3
const ONE = 1;
const TWO = ONE + 1;//仅可以为常量的结果
const Arr = [1,2];

可以用“…”表示多个参数

1
2
3
4
5
function sum(...params){
return array_sum(params);
}
sum(1, 2, 9); //12
sum(...[1,2,9]);//12 注意:只能传数字下标数组,不能穿带有键名的数组

可以用“**”表示幂运算

1
3 ** 4; //81