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 styleecho (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 新特性的一些代码演示请看。
转自: