1.可变参数列表 要求v5.6+
<?php function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4);//10 ?>
v5.5及以前
<?php function sum() { $acc = 0; foreach (func_get_args() as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4);//10 ?>
2.Trait[特性的属性和方法可被调用的类吸收] 要求v5.4+
<?php //同名冲突解决方案,默认优先级为 trait覆盖父类,子类覆盖trait.子类中多个trait有同名冲突需要显式使用insteadof 操作符来指明使用冲突中的哪一个 可以衔接as 给trait的func取别名,也可以单独使用as更改trait的func的访问权限 class people { public function __construct(){ echo '我是人类<br/>'; if(method_exists($this, 'init')){ $this->init(); } } } Trait child { public function cry(){ echo '我会child哭'; } private function init(){ echo '我是小孩<br/>'; } } Trait boy { public function cry(){ echo '我会boy哭'; } protected function init(){ echo '我是小孩<br/>'; } } class student extends people { use child,boy{ child::init insteadOf boy; boy::cry insteadOf child; init as public; } // public function init(){ // echo '我是学生<br/>'; // } } $student = new student; $student->cry(); exit;