PHP进化史— PHP 7.0
PHP 7.0
匿名类的支持
在下面两种情况下,匿名类可能会被使用在命名类中:
当该类没有必要被记录下来的时候
当该类在程序执行过程中只使用一次的时候
new class($i) { public function __construct($i) { $this->i = $i; } }
整除函数 — 安全的除法 (即使是被 0 整除)
该函数会返回第一个参数被第二个参数整除后结果的整数部分。当除数(也就是第二个参数)值为 0 时,该函数会抛出一个 E_WARNING 的错误并且返回 FALSE。
intdiv(int $numerator, int $divisor)
增加了新的空合并操作符
空合并操作符,也就是 “??”。
$x = NULL; $y = NULL; $z = 3; var_dump($x ?? $y ?? $z); // int(3) $x = ["c" => "meaningful_value"]; var_dump($x["a"] ?? $x["b"] ?? $x["c"]); // string(16) "meaningful_value"
添加新的操作符 — 飞船符
飞船符(太空船操作符)用于优化和简化比较操作。
// 使用 <=>(飞船符)前 function order_func($a, $b) { return ($a < $b) ? -1 : (($a > $b) ? 1 : 0); } // 使用 <=>(飞船符)之后 function order_func($a, $b) { return $a <=> $b; }
标量类型声明
标量类型声明实现更强类型编程语言特性的第一步。
function add(float $a, float $b): float { return $a + $b; } add(1, 2); // float(3)
返回类型声明
增加了返回包括继承在内的标量类之外的其他类型的特性。不知何故没有将其设置为可选特性 (将在 v7.1 中说明 )
interface A { static function make(): A; } class B implements A { static function make(): A { return new B(); } }
组使用声明
// 显式使用语法: use FooLibrary\Bar\Baz\ClassA; use FooLibrary\Bar\Baz\ClassB; use FooLibrary\Bar\Baz\ClassC; use FooLibrary\Bar\Baz\ClassD as Fizbo; // 分组使用语法: use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo };
生成器委托
生成器函数体中允许使用如下新的语法:
yield from <expr>