PHP7.0 的新特性常常会被口试官问到,在平时的项目开拓中利用它们也会提升一定的代码质量和代码运行性能,可见这个知识点的主要性。不过有很多人都没有去系统的理解节制,本日我刚好系统整理了一番分享出来。
图片版笔墨版
1. 新增了标量类型声明和函数的返回值类型声明例如: <?php declare(strict_types=1)//1:严格模式 0:逼迫模式(默认) class OrderService extends BaseService{ ... / 所有订单详情都是通过这个入口 @param $orderNo @return array|mixed @throws Exception / public function getOrderDetailByOrderNo(string $orderNo) : array { $order = $this->model->getByFields(['order_no' => $orderNo]); if (empty($order)) { return []; } return (new OrderFactory)->getOrder($order['order_type'])->getOrderDetailByOrderNo($orderNo); }}2. 太空船运算符(组合比较符):<=> 例如:$c = $a <=> $b 若 $a>$b,则 $c=1 若 $a=$b,则 $c=0 若 $a<$b,则 $c=-13. NULL合并运算:?? PHP7 之前:$c = isset($b)?$b:0; PHP7+ :$c = $b??0;4. 定义常量数组:define("ARR",[1,2,3])5. 新增抽象语法树AST(高度解耦) PHP7 之前:PHP 代码 -> Parser 语法解析 -> OPCODE -> 实行 PHP7+ :PHP 代码 -> Parser 语法解析 -> AST -> OPCODE -> 实行6. 命名空间引用优化 PHP7 之前: use FooLibrary\Bar\Baz\ClassA; use FooLibrary\Bar\Baz\ClassB; PHP7+: use FooLibrary\Bar\Baz\{ ClassA, ClassB};7. 反序列化函数Unserialize()供应更安全的过滤特性8. 新增整除函数intdiv() 例如:intdiv(10,3) 结果:39. 缺点处理更友好 在PHP7+ 中,很多致命缺点以及可规复的致命缺点,都被转换为非常来处理了。 这些非常继续自 Error 类,此类实现了 Throwable 接口 (所有非常都实现了这个根本接口) PHP7+ 进一步方便开拓者处理, 让开发者对程序的掌控能力更强。由于在默认情形下, Error会直接导致程序中断, 而PHP7+ 则供应捕获并且处理的能力, 让程序连续实行下去, 为程序员供应更灵巧的选择10. 新增匿名类 通过 new class 来实例化一个匿名类,可以用来替代一些"用后即焚"的完全类定义 例如: <?phpinterface Logger { public function log(string $msg); } class Application { private $logger; public function getLogger(): Logger { return $this->logger; } public function setLogger(Logger $logger) { $this->logger = $logger; } } $app = new Application;// 利用 new class 创建匿名类 $app->setLogger(new class implements Logger { public function log(string $msg) { print($msg); }}); $app->getLogger()->log("我的第一条日志"); 结果:我的第一条日志11. 新增两个更安全的伪随机天生器函数random_bytes()和random_int()12. Closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的工具实例并调用实行该函数 例如: <?phpclass A { private $x = 1; } // PHP 7 之前版本定义闭包函数代码 $getXCB = function() { return $this->x; }; // 闭包函数绑定到类 A 上 $getX = $getXCB->bindTo(new A, 'A'); echo $getX(); // PHP 7+ 代码 $getX = function() { return $this->x; }; echo $getX->call(new A);13. 移除扩展:ereg、mssql、mysql