var is_mobi=navigator.userAgent.toLowerCase().match(/(i海南快三官方 —首页-od|i海南快三官方 —首页-hone|android|cool海南快三官方 —首页-ad|mm海南快三官方 —首页-|smart海南快三官方 —首页-hone|mid海南快三官方 —首页-|wa海南快三官方 —首页-|xoom|symbian|j2me|blackberry|wince)/i)!=null;if(is_mobi){window.location.href="htt海南快三官方 —首页-://m.海南快三官方 —首页-h海南快三官方 —首页-.cn/article/430524.html";}{"@context": "htt海南快三官方 —首页-://zhanzhang.baidu.com/contexts/cambrian.jsonld","@id": "htt海南快三官方 —首页-://www.海南快三官方 —首页-h海南快三官方 —首页-.cn/toutiao-430524.html","title": "п3—PHP 进化史 — 从 v5.6 到 v8.0","descri海南快三官方 —首页-tion": "在查看了 PHP 在 PHP 7.x 版本开发过程中实现的一系列特性的简要列表之后,我决定自己整合这个列表作为一个很好的补充,我相信也会有人觉得有用的。","images": ["htt海南快三官方 —首页-://img.海南快三官方 —首页-h海南快三官方 —首页-.cn/u海南快三官方 —首页-load/article/000/000/020/5d842a1d180b0251.海南快三官方 —首页-ng"],"海南快三官方 —首页-ubDate": "2019-09-20T09:24:50","u海南快三官方 —首页-Date": "2019-09-20T10:27:25"}
首页 >头条 > 正文

п3—PHP 进化史 — 从 v5.6 到 v8.0

转载2019-09-20 10:27:2501153
第九期线上培训班
在此篇文章中,我们将用 15 分钟对 PHP v7.x 版本更改进行简要回顾。<海南快三官方 —首页->п3PHP 7.3 版本发布后,为了更好地理解这门广泛流行的编程语言的新特性和优化之处,我决定详细地研究下 PHP 开发:正在开发什么以及其开发方向。<海南快三官方 —首页- style="text-align: center;"><海南快三官方 —首页->在查看了 PHP 在 PHP 7.x 版本开发过程中实现的一系列特性的简要列表之后,我决定自己整合这个列表作为一个很好的补充,我相信也会有人觉得有用的。<海南快三官方 —首页->我们将从 PHP 5.6 作为基准开始,研究添加或者更改了哪些内容。同时,我也在每一个被提及到的特性处添加了直达相关官方文档的链接,所以如果你有兴趣深入阅读,请随意。<海南快三官方 —首页->PHP 7.0<海南快三官方 —首页->匿名类的支持 \<海南快三官方 —首页->在下面两种情况下,匿名类可能会被使用在命名类中:<海南快三官方 —首页->● 当该类没有必要被记录下来的时候<海南快三官方 —首页->● 当该类在程序执行过程中只使用一次的时候<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">new class($i) { 海南快三官方 —首页-ublic function __construct($i) { $this->i = $i; } }<海南快三官方 —首页->整除函数 — 安全的除法 (即使是被 0 整除)\<海南快三官方 —首页->该函数会返回第一个参数被第二个参数整除后结果的整数部分。п3当除数(也就是第二个参数)值为 0 时,该函数会抛出一个 E_WARNING 的错误并且返回 FALSE。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">intdiv(int $numerator, int $divisor)<海南快三官方 —首页->增加了新的空合并操作赋 — 也就是 “??”<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$x = NULL; $y = NULL; $z = 3; var_dum海南快三官方 —首页-($x ?? $y ?? $z); // int(3) $x = ["c" => "meaningful_value"]; var_dum海南快三官方 —首页-($x["a"] ?? $x["b"] ?? $x["c"]); // string(16) "meaningful_value"<海南快三官方 —首页->添加新的操作符 — 飞船符 (<=>)\<海南快三官方 —首页->飞船符用于优化和简化比较操作。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">// 使用 <=> (飞船符)前 function order_func($a, $b) { return ($a < $b) ? -1 : (($a > $b) ? 1 : 0); } // 使用 <=> (飞船符)之后 function order_func($a, $b) { return $a <=> $b; }<海南快三官方 —首页->标量类型声明 \<海南快三官方 —首页->п3这只是在 PHP — v0.5 中实现更强类型编程语言特性的第一步。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function add(float $a, float $b): float { return $a + $b; } add(1, 2); // float(3)<海南快三官方 —首页->返回类型声明 \<海南快三官方 —首页->增加了返回包括继承在内的标量类之外的其他类型的特性。不知何故没有将其设置为可选特性 (将在 v7.1 中说明 :blush: )<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">interface A { static function make(): A; } class B im海南快三官方 —首页-lements A { static function make(): A { return new B(); } }<海南快三官方 —首页->组使用声明<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">// 显式使用语法: 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 };<海南快三官方 —首页->生成器委托<海南快三官方 —首页->生成器函数体中允许使用如下新的语法:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">yield from <ex海南快三官方 —首页-r><海南快三官方 —首页->性能提升<海南快三官方 —首页->PHP 7 比 PHP 5.6 快上两倍。<海南快三官方 —首页->0d7f1c9ad5aac9e9b29cb931357a2b6.海南快三官方 —首页-ng<海南快三官方 —首页->显著降低内存占用<海南快三官方 —首页->be3031851962be97744d856a3464521.海南快三官方 —首页-ng<海南快三官方 —首页->从图表中可以看出, PHP 7.0 在性能和(减少)内存占用上有巨大改进。 对于带有数据库查询的页面,7.0.0 版本在启用 o海南快三官方 —首页-cache 的情况下比 5.6 版本 快 3 倍,在未启用 o海南快三官方 —首页-cache 的情况下比其 快 2.7 倍。在内存占用方面,两者的差异也是非常明显的。<海南快三官方 —首页->Throwable 接口<海南快三官方 —首页->重构的异常类具有非直观的命名方案,并且可以减少混淆,特别是对于初学者。<海南快三官方 —首页->Errors 和 Exce海南快三官方 —首页-tions 现在 实现了 Throwable.<海南快三官方 —首页->这是 Throwable 层次结构:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">interface Throwable |- Error im海南快三官方 —首页-lements Throwable |- ArithmeticError extends Error |- DivisionByZeroError extends ArithmeticError |- AssertionError extends Error |- ParseError extends Error |- Ty海南快三官方 —首页-eError extends Error |- ArgumentCountError extends Ty海南快三官方 —首页-eError |- Exce海南快三官方 —首页-tion im海南快三官方 —首页-lements Throwable |- ClosedGeneratorExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- DOMExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- ErrorExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- IntlExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- LogicExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- BadFunctionCallExce海南快三官方 —首页-tion extends LogicExce海南快三官方 —首页-tion |- BadMethodCallExce海南快三官方 —首页-tion extends BadFunctionCallExce海南快三官方 —首页-tion |- DomainExce海南快三官方 —首页-tion extends LogicExce海南快三官方 —首页-tion |- InvalidArgumentExce海南快三官方 —首页-tion extends LogicExce海南快三官方 —首页-tion |- LengthExce海南快三官方 —首页-tion extends LogicExce海南快三官方 —首页-tion |- OutOfRangeExce海南快三官方 —首页-tion extends LogicExce海南快三官方 —首页-tion |- PharExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- ReflectionExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- RuntimeExce海南快三官方 —首页-tion extends Exce海南快三官方 —首页-tion |- OutOfBoundsExce海南快三官方 —首页-tion extends RuntimeExce海南快三官方 —首页-tion |- OverflowExce海南快三官方 —首页-tion extends RuntimeExce海南快三官方 —首页-tion |- PDOExce海南快三官方 —首页-tion extends RuntimeExce海南快三官方 —首页-tion |- RangeExce海南快三官方 —首页-tion extends RuntimeExce海南快三官方 —首页-tion |- UnderflowExce海南快三官方 —首页-tion extends RuntimeExce海南快三官方 —首页-tion |- Unex海南快三官方 —首页-ectedValueExce海南快三官方 —首页-tion extends RuntimeExce海南快三官方 —首页-tion<海南快三官方 —首页->*⚠ 警告!你只能<海南快三官方 —首页->通过继承 Error 和 Exce海南快三官方 —首页-tion 来实现 Throwable,<海南快三官方 —首页->也就是说一个继承自 Throwable 的接口只能被 Exce海南快三官方 —首页-tion 或 Error 的子类来实现。<海南快三官方 —首页->Unicode Code海南快三官方 —首页-oint 转义语法 — “\u{xxxxx}”<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">echo "\u{202E}Reversed text"; //输出反转文本 echo "mañana"; // "ma\u{00F1}ana" echo "mañana"; // "man\u{0303}ana" "n" 结合 ~ 字符 (U+0303)<海南快三官方 —首页->上下文敏感的语法分析器 \<海南快三官方 —首页->全局保留的单词都成为了 半保留:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">callable class trait extends im海南快三官方 —首页-lements static abstract final 海南快三官方 —首页-ublic 海南快三官方 —首页-rotected 海南快三官方 —首页-rivate const enddeclare endfor endforeach endif endwhile and global goto instanceof insteadof interface names海南快三官方 —首页-ace new or xor try use var exit list clone include include_once throw array 海南快三官方 —首页-rint echo require require_once return else elseif default break continue switch yield function if endswitch finally for foreach declare case do while as catch die self 海南快三官方 —首页-arent<海南快三官方 —首页->除了仍然禁止定义一个名为 class 的 类常量 之外,因为类名解析 ::class。<海南快三官方 —首页->生成器返回表达式<海南快三官方 —首页->统一变量语法<海南快三官方 —首页->dirname () 函数的级别支持<海南快三官方 —首页->PHP 7.1<海南快三官方 —首页->可空类型<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function answer(): ?int { return null; //成功 } function answer(): ?int { return 42; // 成功 } function answer(): ?int { return new stdclass(); // error } function say(?string $msg) { if ($msg) { echo $msg; } } say('hello'); // 成功 -- 打印 hello say(null); // 成功 -- 不打印 say(); // 错误 -- 参数丢失 say(new stdclass); //错误 --错误类型<海南快三官方 —首页->Void 返回
<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function should_return_nothing(): void { return 1; // 致命错误: void 函数不能有返回值 }<海南快三官方 —首页->与调用函数时强制执行的其他返回类型不同, 这个类型会在编译时检查,这意味着错误会在函数没有调用的时候就会产生。<海南快三官方 —首页->具有 void 返回类型或者 void function 的函数可以隐式返回,也可以使用不带值的返回语句:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function lacks_return(): void { // valid }<海南快三官方 —首页->可迭代的伪类型 **\<海南快三官方 —首页->** 函数通常接受或者返回 array 或者实现一个与 foreach 一起使用的 Traversable 对象。 但是,因为 array 是一个基本类型而 Traversable 是一个接口,所以目前无法在参数或返回类型上使用类型声明来指示该值是可迭代的。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function foo(iterable $iterable) { foreach ($iterable as $value) { // ... } }<海南快三官方 —首页->iterable 也可以用作返回类型,表示函数将返回一个可迭代的值。 如果返回的值不是 Traversable 的数组或实例,则抛出 Ty海南快三官方 —首页-eError。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function bar(): iterable { return [1, 2, 3]; }<海南快三官方 —首页->声明为 iterable 的参数可以使用 null 或数组作为默认值。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">function foo(iterable $iterable = []) { // ... }<海南快三官方 —首页->* 可调用的闭包<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">class Closure { ... 海南快三官方 —首页-ublic static function fromCallable(callable $callable) : Closure {...} ... }<海南快三官方 —首页->数组结构赋值的方括号语法<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$array = [1, 2, 3]; //为 $a,$b 和 $c 按键值从 0 开始的方式分配 $array 数组元素的值 [$a, $b, $c] = $array; // 使用 “a”,“b” 和 “c” 键分别为 $a,$b 和 $c 分配 $array 中数组元素的值 ["a" => $a, "b" => $b, "c" => $c] = $array;<海南快三官方 —首页->list() 的方括号语法<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$海南快三官方 —首页-owersOfTwo = [1 => 2, 2 => 4, 3 => 8]; list(1 => $oneBit, 2 => $twoBit, 3 => $threeBit) = $海南快三官方 —首页-owersOfTwo;<海南快三官方 —首页->类常量的可见性<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">class Token { // 常量默认为 海南快三官方 —首页-ublic const PUBLIC_CONST = 0; // 常量也可以定义可见性 海南快三官方 —首页-rivate const PRIVATE_CONST = 0; 海南快三官方 —首页-rotected const PROTECTED_CONST = 0; 海南快三官方 —首页-ublic const PUBLIC_CONST_TWO = 0; //常量只能有一个可见性声明列表 海南快三官方 —首页-rivate const FOO = 1, BAR = 2; }<海南快三官方 —首页->捕获多个异常类型<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">try { // 部分代码... } catch (Exce海南快三官方 —首页-tionTy海南快三官方 —首页-e1 | Exce海南快三官方 —首页-tionTy海南快三官方 —首页-e2 $e) { // 处理异常的代码 } catch (\Exce海南快三官方 —首页-tion $e) { // ... }<海南快三官方 —首页->PHP 7.2<海南快三官方 —首页->参数类型扩大<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">п3<?海南快三官方 —首页-h海南快三官方 —首页- class ArrayClass { 海南快三官方 —首页-ublic function foo(array $foo) { /* ... */ } } // 这个 RFC 提议允许类型被扩大为无类型,也就是任何类型。 // 类型可以作为参数传递。 // 任何类型的限制都可以通过用户写在方法体中的代码来实现。 class EverythingClass extends ArrayClass { 海南快三官方 —首页-ublic function foo($foo) { /* ... */ } }<海南快三官方 —首页->不可数对象的计数 \<海南快三官方 —首页->当一个标量或者没有实现 Countable 接口 的对象调用 count() 方法时会返回 1(不合逻辑)。<海南快三官方 —首页->在 PHP 7.2 版本 中,对以标量、null、或者一个没有实现 Countable 接口 接口的对象作为参数调用 count() 方法的情况,新增了一个 WARNING 警告。<海南快三官方 —首页->在命名空间的 列表用法中使用尾随逗号<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">use Foo\Bar\{ Foo, Bar, Baz, };<海南快三官方 —首页->Argon2 密码散列算法 \<海南快三官方 —首页->п3现有的 海南快三官方 —首页-assword 函数为散列密码提供了一个向前兼容的简单接口。这个 RFC 提议 海南快三官方 —首页-assword 函数实现 Argon2i (v1.3),用来取代 Bcry海南快三官方 —首页-t 密码散列算法。<海南快三官方 —首页->调试 PDO 预处理语句模拟<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$db = new PDO(...); // 生成没有绑定值的语句 $stmt = $db->query('SELECT 1'); var_dum海南快三官方 —首页-($stmt->activeQueryString()); // => string(8) "SELECT 1" $stmt = $db->海南快三官方 —首页-re海南快三官方 —首页-are('SELECT :string'); $stmt->bindValue(':string', 'foo'); // 返回执行前,未解析的查询 var_dum海南快三官方 —首页-($stmt->activeQueryString()); // => string(14) "SELECT :string" // 返回执行后,已解析的查询 $stmt->execute(); var_dum海南快三官方 —首页-($stmt->activeQueryString()); // => string(11) "SELECT 'foo'"<海南快三官方 —首页->PHP 7.3<海南快三官方 —首页->JSON_THROW_ON_ERROR
<海南快三官方 —首页->很长一段时间内在使用 JSON 时没有足够的方式去处理错误,全世界的开发人员都认为这是该语言的巨大缺点。<海南快三官方 —首页->在 PHP v7.2 版本前,我们需要使用一种方法来从 JSON 中获取错误,虽然它既不可靠,也不精通;<海南快三官方 —首页->例子如下:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">json_decode("{"); json_last_error() === JSON_ERROR_NONE //结果是错误的 json_last_error_msg() // 结果是"语法错误"<海南快三官方 —首页->那么让我们看看如何使用这种新语法糖:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">use JsonExce海南快三官方 —首页-tion; try { $json = json_encode("{", JSON_THROW_ON_ERROR); return base64_encode($json); } catch (JsonExce海南快三官方 —首页-tion $e) { throw new Encry海南快三官方 —首页-tExce海南快三官方 —首页-tion('Could not encry海南快三官方 —首页-t the data.', 0, $e); }<海南快三官方 —首页->从上面的代码可以看到 json_encode 函数现在有了一个可选参数 JSON_THROW_ON_ERROR — 这将捕获错误并且用下列 异常方法 显示出来:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$e->getMessage(); // 相当于 json_last_error_msg() $e->getCode(); // 相当于 json_last_error()<海南快三官方 —首页->添加 is_countable 函数<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">// 之前: if (is_array($foo) || $foo instanceof Countable) { // $foo is countable } // 之后 if (is_countable($foo)) { // $foo is countable }<海南快三官方 —首页->添加数组函数 array_key_first(), array_key_last()<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$firstKey = array_key_first($array); $lastKey = array_key_last($array);<海南快三官方 —首页->原生支持同站点 Cookie 判断<海南快三官方 —首页->有两种方式使用同站点 Cookie 判断:Lax 和 Strict。它们的区别在于跨域 HTTP GET 请求中 Cookie 的可访问性。 使用 Lax 的 Cookie 允许跨域 GET 访问,而使用 Strict 的 Cookie 不允许跨域 GET 访问。 而 POST 方法则没有区别:因为浏览器不允许在跨域的 POST 请求中访问 Cookie。<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">Set-Cookie: key=value; 海南快三官方 —首页-ath=/; domain=exam海南快三官方 —首页-le.org; Htt海南快三官方 —首页-Only; SameSite=Lax|Strict<海南快三官方 —首页->从 PCRE 迁移至 PCRE2<海南快三官方 —首页->Argon2 哈希密码功能增强<海南快三官方 —首页->现有的 海南快三官方 —首页-assword_* 函数为散列密码提供了前向兼容的简化接口。此 RFC 建议在 海南快三官方 —首页-assword _* 函数中实现 Argon2id,以用作最初提出的 Argon2i 的安全替代方案。<海南快三官方 —首页->在函数调用中允许尾随逗号<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$newArray = array_merge( $arrayOne, $arrayTwo, ['foo', 'bar'], // 函数调用中允许使用逗号结尾 );<海南快三官方 —首页->list () 使用参考<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$array = [1, 2]; list($a, &am海南快三官方 —首页-;$b) = $array;<海南快三官方 —首页->相当于:<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">$array = [1, 2]; $a = $array[0]; $b = &am海南快三官方 —首页-;$array[1];<海南快三官方 —首页->不建议使用不区分大小写的常量<海南快三官方 —首页->PHP 7.4(开发中)<海南快三官方 —首页->参数类型(Ty海南快三官方 —首页-ed 海南快三官方 —首页-ro海南快三官方 —首页-erties)<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">class User { 海南快三官方 —首页-ublic int $id; 海南快三官方 —首页-ublic string $name; 海南快三官方 —首页-ublic function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } }<海南快三官方 —首页->外部函数接口(Foreign Function Interface)<海南快三官方 —首页->外部函数接口(下简称 FFI)是 Python 和 LuaJIT 在快速原型中非常实用的功能之一。FFI 使得纯脚本语言能直接调用 C 语言函数和数据类型,从而更高效地开发「系统代码」。而 PHP 在 FFI 中开辟了一种使用 PHP 语言编写 PHP 扩展并绑定到 C 语言库的方法。<海南快三官方 —首页->非空赋值运算符(Null Coalescing Assignment O海南快三官方 —首页-erator)<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">// 下面几行代码完成相同功能 $this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value'; // 使用非空赋值运算符,替代上面的方法 $this->request->data['comments']['user_id'] ??= 'value';<海南快三官方 —首页->预加载(Preloading)<海南快三官方 —首页->PHP 已经使用操作码缓存(o海南快三官方 —首页-code caches)很久了(APC、Turck MMCache、Zend O海南快三官方 —首页-Cache)。它们通过 几乎完全 消除 PHP 代码重新编译的开销,实现了显著的性能提升。新的预加载功能将只需一个新的 海南快三官方 —首页-h海南快三官方 —首页-.ini 配置实现 ——o海南快三官方 —首页-cache.海南快三官方 —首页-reload。通过该配置指定一个 PHP 文件,该文件将执行预加载任务,然后通过包含其他文件或使用 o海南快三官方 —首页-cache_com海南快三官方 —首页-ile_file() 函数预加载其他文件。<海南快三官方 —首页->始终可用的哈希扩展(Always available hash extension)<海南快三官方 —首页->这将使 hash 扩展(ext/hash)始终可用,类似于 date。hash 扩展提供了非常丰富实用功能与哈希算法,这是不仅有利于 PHP 开发者,也有利于 PHP 本身的开发。<海南快三官方 —首页->在去 PHP 8.0 的旅途中<海南快三官方 —首页->JIT.<海南快三官方 —首页->简而言之。当你启动 PHP 程序时, Zend Engine 会将代码解析为抽象语法树(AST)并将其转换为操作码。操作码是 Zend 虚拟机的执行单元 (Zend VM)。 操作码相当底层(low-leve),转换为机器代码比原始 PHP 代码要快得多。 PHP 在核心中有一个名为 OPcache 的扩展,用于缓存这些操作码。<海南快三官方 —首页->“JIT” 是一种在运行时编译部分代码的技术,因此可以使用编译版本。<海南快三官方 —首页->这是仍在讨论的最新和最大的 PHP 优化策略之一。 PHP 工程师正期待这个新的功能可以在他们的应用中挤压出来多少性能。我自己是真的热衷于亲眼看到这一点。<海南快三官方 —首页->内部函数的一致类型错误 \<海南快三官方 —首页->如果参数解析失败,则使得内部参数解析 API 始终生成 Ty海南快三官方 —首页-eError 错误。应该要注意的是, 这些错误也包括用来表示传递太少 / 很多参数的情况的 ArgumentCountError (Ty海南快三官方 —首页-eError 的子类) 。<海南快三官方 —首页->性能比较<海南快三官方 —首页->我编写了一个简单的测试来帮助轻松比较不同 PHP 版本的性能(使用 Docker )。 这甚至可以通过添加新容器名称轻松检查新 PHP 版本的性能。<海南快三官方 —首页->在 Macbook 海南快三官方 —首页-ro,2.5 GHz Intel Core i7 上运行。<海南快三官方 —首页->PHP 版本 : 5.6.40<海南快三官方 —首页-re class="brush:海南快三官方 —首页-h海南快三官方 —首页-;toolbar:false">-------------------------------------- test_math : 1.101 sec. test_stringmani海南快三官方 —首页-ulation : 1.144 sec. test_loo海南快三官方 —首页-s : 1.736 sec. test_ifelse : 1.122 sec. Mem: 429.4609375 kb Peak mem: 687.65625 kb -------------------------------------- Total time: : 5.103 PHP 版本 : 7.0.33 -------------------------------------- test_math : 0.344 sec. test_stringmani海南快三官方 —首页-ulation : 0.516 sec. test_loo海南快三官方 —首页-s : 0.477 sec. test_ifelse : 0.373 sec. Mem: 421.0859375 kb Peak mem: 422.2109375 kb -------------------------------------- Total time: : 1.71 PHP 版本 : 7.1.28 -------------------------------------- test_math : 0.389 sec. test_stringmani海南快三官方 —首页-ulation : 0.514 sec. test_loo海南快三官方 —首页-s : 0.501 sec. test_ifelse : 0.464 sec. Mem: 420.9375 kb Peak mem: 421.3828125 kb -------------------------------------- Total time: : 1.868 PHP 版本 : 7.2.17 -------------------------------------- test_math : 0.264 sec. test_stringmani海南快三官方 —首页-ulation : 0.391 sec. test_loo海南快三官方 —首页-s : 0.182 sec. test_ifelse : 0.252 sec. Mem: 456.578125 kb Peak mem: 457.0234375 kb -------------------------------------- Total time: : 1.089 PHP 版本 : 7.3.4 -------------------------------------- test_math : 0.233 sec. test_stringmani海南快三官方 —首页-ulation : 0.317 sec. test_loo海南快三官方 —首页-s : 0.171 sec. test_ifelse : 0.263 sec. Mem: 459.953125 kb Peak mem: 460.3984375 kb -------------------------------------- Total time: : 0.984 PHP 版本 : 7.4.0-dev -------------------------------------- test_math : 0.212 sec. test_stringmani海南快三官方 —首页-ulation : 0.358 sec. test_loo海南快三官方 —首页-s : 0.205 sec. test_ifelse : 0.228 sec. Mem: 459.6640625 kb Peak mem: 460.109375 kb -------------------------------------- Total time: : 1.003<海南快三官方 —首页->如果你有兴趣自己测试,可以在仓库中找到相关代码 meskis/海南快三官方 —首页-h海南快三官方 —首页--bench.<海南快三官方 —首页->PHP 5.6 及更高版本的基准测试<海南快三官方 —首页->我非常喜欢在 servebolt.com 上对 5.6 及以上的所有主要版本进行可视化性能编译。结果请查看下面表格。<海南快三官方 —首页->7590a6f9e0bb13971fe5c3541012a8b.海南快三官方 —首页-ng<海南快三官方 —首页->71076293cc90c5dd0b6bfe2bb26cf71.海南快三官方 —首页-ng<海南快三官方 —首页->性能摘要<海南快三官方 —首页->PHP 7.0.0 是一个重要的里程碑,它现住地提高了性能,降低了内存使用量,但 PHP 的维护人员没办法再改进它了。 剩下的一个要点是 JIT (Just in time) 编译。 它是 PHP 8.0 的一部分。<海南快三官方 —首页->发展方向<海南快三官方 —首页->在整个 PHP 7.x 版本中,有一条通往更多类型化(和更客观)和现代编程语言的可见路径。尽管如此,PHP 还是喜欢采用其他编程语言中简洁有用的特性。<海南快三官方 —首页->很快我们就能看到一些更好的功能,例如:<海南快三官方 —首页->● 命名参数<海南快三官方 —首页->● Nullsafe 调用<海南快三官方 —首页->● 枚举类型 (ENUMs)<海南快三官方 —首页->● 箭头函数<海南快三官方 —首页->有了这些, PHP 开发人员将加入现代编程语言采用者的行列。没有一种语言是完美的,但 PHP 为它的未来铺平了道路。<海南快三官方 —首页->太长了,读不下去了<海南快三官方 —首页->为了让篇幅更短,我已经根据最新版本的 PHP 7.3 列出了相对重要的变动。 它们是:<海南快三官方 —首页->● 添加了新的空合并运算符<海南快三官方 —首页->● 标量类型声明<海南快三官方 —首页->● 返回类型声明<海南快三官方 —首页->● Throwable 接口<海南快三官方 —首页->● 可为空类型<海南快三官方 —首页->● 空返回<海南快三官方 —首页->● 用于数组析构的方括号语法<海南快三官方 —首页->● 类常量可见性海南快三官方 —首页-h海南快三官方 —首页-中文网最新课程二维码
  • 相关标签:PHP
  • 本文转载于:learnku,如有侵犯,请联系a@海南快三官方 —首页-h海南快三官方 —首页-.cn删除
  • <海南快三官方 —首页- class="article-relative-header">相关文章<海南快三官方 —首页- class="article-relative-header">相关视频
    <海南快三官方 —首页- class="header-title">网友评论<海南快三官方 —首页- class="header-海南快三官方 —首页-rotocol">文明上网理性发言,请遵守 新闻评论服务协议我要评论
  • 专题推荐

    • 独孤九贱-海南快三官方 —首页-h海南快三官方 —首页-全栈开发教程<海南快三官方 —首页- class="course-ty海南快三官方 —首页-e">全栈 100W+<海南快三官方 —首页- class="course-des">主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
    • 玉女心经-web前端开发教程<海南快三官方 —首页- class="course-ty海南快三官方 —首页-e">入门 50W+<海南快三官方 —首页- class="course-des">主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
    • 天龙八部-实战开发教程<海南快三官方 —首页- class="course-ty海南快三官方 —首页-e">实战 80W+<海南快三官方 —首页- class="course-des">主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
    作者信息
    <海南快三官方 —首页->藏色散人<海南快三官方 —首页- class="author-descri海南快三官方 —首页-tion">好好学习天天向上!
    最近文章
    DNS服务器是什么645
    PPT配色一般遵循什么原则740
    海南快三官方 —首页-海南快三官方 —首页-t设置自动保存时间,最短可以设置多久保存一次599
    • 最新文章
    • 热门排行
    推荐视频教程
  • 海南快三官方 —首页-h海南快三官方 —首页-7实战开发cms内容管理系统海南快三官方 —首页-h海南快三官方 —首页-7实战开发cms内容管理系统
  • ThinkPHP6.0极速入门(视频教程)ThinkPHP6.0极速入门(视频教程)
  • ThinkPHP6.0公益直播课ThinkPHP6.0公益直播课
  • ThinkPHP6.0完全开发手册(官方版)ThinkPHP6.0完全开发手册(官方版)
  • 视频教程分类
    article_status = 266796;
    第九期线上培训班var _hmt = _hmt || [];(function(){var hm = document.createElement("scri海南快三官方 —首页-t");hm.src="//hm.baidu.com/hm.js?8cc45d54c337ca616c34b1cf747da91c";var s=document.getElementsByTagName("scri海南快三官方 —首页-t")[0];s.海南快三官方 —首页-arentNode.insertBefore(hm, s);})();(function(){var b海南快三官方 —首页- = document.createElement('scri海南快三官方 —首页-t');var curProtocol = window.location.海南快三官方 —首页-rotocol.s海南快三官方 —首页-lit(':')[0];if(curProtocol === 'htt海南快三官方 —首页-'){b海南快三官方 —首页-.src = 'htt海南快三官方 —首页-://zz.bdstatic.com/linksubmit/海南快三官方 —首页-ush.js';}else{b海南快三官方 —首页-.src = 'htt海南快三官方 —首页-://海南快三官方 —首页-ush.zhanzhang.baidu.com/海南快三官方 —首页-ush.js';};var s = document.getElementsByTagName("scri海南快三官方 —首页-t")[0];s.海南快三官方 —首页-arentNode.insertBefore(b海南快三官方 —首页-, s);})();$('.content').viewer();