试玩 PHP 5.4 的新特性

1. 实例化时访问类成员

class Human
{
    function __construct($name)
    {
        $this->name = $name;
    }

    public function hello()
    {
        return "Hi " . $this->name;
    }
}

// old style
$human = new Human("Gonzalo");
echo $human->hello();

// new cool style
echo (new Human("Gonzalo"))->hello();

2. 短数组定义语法

$a = [1, 2, 3];
print_r($a);

3. 支持 Class::{expr}() 语法

foreach ([new Human("Gonzalo"), new Human("Peter")] as $human) {
    echo $human->{'hello'}();
}

4. 通过数组间接调用方法

$f = [new Human("Gonzalo"), 'hello'];
echo $f();

5. Callable typehint

function hi(callable $f) {
    $f();
}

hi([new Human("Gonzalo"), 'hello']);

6. Traits

trait FlyMutant {
    public function fly() {
        return 'I can fly!';
    }
}

class Mutant extends Human {
    use FlyMutant;
}

$mutant = new Mutant("Storm");
echo $mutant->fly();

7. 支持数组提领(Array dereferencing support)

function data() {
    return ['name' => 'Gonzalo', 'surname' => 'Ayuso'];
}

echo data()['name'];

 

另外,  Array derefencing也可以出现再赋值语句的左值中, 也就是理论上你可以这么写:

explode(",", "test1, test2")[3] = "phper";

 

目前多数 IDE 还不支持这些特性,因此可能会报语法错误。

更多 PHP 5.4 新特性的一些代码演示请看这里

 

转自:http://www.oschina.net/question/54100_33123

posted @ 2012-03-02 11:15  kazaff  阅读(218)  评论(0)    收藏  举报