{"id":311761,"date":"2020-10-20T15:01:07","date_gmt":"2020-10-20T15:01:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=311761"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=311761","title":{"rendered":"\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f PHP \u2014 \u043e\u0442 5.6 \u0434\u043e 8.0 (\u0427\u0430\u0441\u0442\u044c 1)"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524270\/\">\n<p><strong><em>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430&nbsp;<\/em><\/strong><a href=\"https:\/\/otus.pw\/u2XK\/\"><strong><em>\u00abBackend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb<\/em><\/strong><\/a><strong><em>.<\/em><\/strong><\/p>\n<h2>\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430 \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c \u0432 PHP v7.x<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d92\/289\/e72\/d92289e7295878246a1a0baeb789b9ad\" alt=\"PHP_v8.0\" title=\"PHP_v8.0\" width=\"1024\" height=\"538\"><figcaption>PHP_v8.0<\/figcaption><\/figure>\n<hr>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 PHP \u0432\u0435\u0440\u0441\u0438\u0438 7.3 \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e PHP: \u0447\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u0430 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 PHP \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<strong> <\/strong>PHP v7.x, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u043c &#8212; \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u044f \u0434\u0443\u043c\u0430\u044e, \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c PHP 5.6 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e. \u042f \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0435\u0437\u0434\u0435 \u0433\u0434\u0435 \u0441\u043c\u043e\u0433 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0444\u0438\u0447, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e &#8212; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<h2>PHP 7.0<\/h2>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/anonymous_classes\"><strong><u>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/u><\/strong><\/a><\/p>\n<p>\u0410\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0441 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0441 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"php\">new class($i) {    public function __construct($i) {        $this-&gt;i = $i;    } }<\/code><\/pre>\n<p><strong><em>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/em><\/strong><em> &#8212; \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043b\u0435\u043d\u0438\u044f (\u0434\u0430\u0436\u0435 \u043d\u0430 0).<\/em><\/p>\n<p><em>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439. \u0415\u0441\u043b\u0438 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434) \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 E<\/em>WARNING \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 FALSE.<\/p>\n<pre><code class=\"php\">intdiv(int $numerator, int $divisor)<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/isset_ternary\"><strong><u>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 null<\/u><\/strong><\/a> &#8212; \u00ab??\u00bb<\/p>\n<pre><code class=\"php\">$x = NULL; $y = NULL; $z = 3; vardump($x ?? $y ?? $z); \/\/ int(3)  $x = [\"c\" =&gt; \"meaningfulvalue\"]; vardump($x[\"a\"] ?? $x[\"b\"] ?? $x[\"c\"]); \/\/ string(16) \"meaningfulvalue\"<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/combined-comparison-operator\"><strong><u>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8212; spaceship (\u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0440\u0430\u0431\u043b\u044c)<\/u><\/strong><u> <\/u><\/a>(&lt;=&gt;)<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"php\">\/\/ \u041f\u0440\u0435\u0436\u0434\u0435  f unction orderfunc($a, $b) { &nbsp;&nbsp;&nbsp;return ($a &lt; $b) ? -1 : (($a &gt; $b) ? 1 : 0); }  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &lt;=&gt;  function orderfunc($a, $b) { &nbsp;&nbsp;&nbsp;return $a &lt;=&gt; $b; }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/scalar_type_hints_v5\"><strong><u>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<\/u><\/strong><\/a><\/p>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 PHP &#8212; v0.5.<\/p>\n<pre><code>function add(float $a, float $b): float { &nbsp;&nbsp;&nbsp;return $a + $b; } add(1, 2); \/\/ float(3)<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/return_types\"><strong><u>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/u><\/strong><\/a><\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u200b\u200b\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 &#8212; \u043a\u043b\u0430\u0441\u0441\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u0425\u0435\u0445, \u0443\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c (\u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u0432 v7.1 :))<\/p>\n<pre><code class=\"php\">interface A { &nbsp;&nbsp;&nbsp;static function make(): A; } class B implements A { &nbsp;&nbsp;&nbsp;static function make(): A { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new B(); &nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/group_use_declarations\"><strong><u>\u0413\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f <\/u><\/strong><\/a><strong><u>use<\/u><\/strong><\/p>\n<pre><code class=\"php\">\/\/ \u042f\u0432\u043d\u044b\u0439 use \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441:  use FooLibrary\\Bar\\Baz\\ClassA; use FooLibrary\\Bar\\Baz\\ClassB; use FooLibrary\\Bar\\Baz\\ClassC; use FooLibrary\\Bar\\Baz\\ClassD as Fizbo;  \/\/ \u0413\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 use \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441: use FooLibrary\\Bar\\Baz{ ClassA, ClassB, ClassC, ClassD as Fizbo };<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/generator-delegation\"><strong><u>\u0414\u0435\u043b\u0435\u0433\u0430\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/u><\/strong><\/a><\/p>\n<p>\u0412 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441:<\/p>\n<pre><code class=\"php\">yield from &lt;expr&gt;<\/code><\/pre>\n<h3>\u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>PHP 7 <em>\u043f\u043e\u0447\u0442\u0438 \u0432\u0434\u0432\u043e\u0435<\/em> \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c PHP 5.6.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bae\/3cf\/442\/bae3cf4427767d9eb79816dc451fa4c6\" width=\"643\" height=\"340\"><figcaption><\/figcaption><\/figure>\n<h3>\u0417\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2c2\/19d\/9c2\/2c219d9c2f58a9c9d6032fe462b02d90\" width=\"643\" height=\"340\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c, PHP 7.0 \u0441\u0442\u0430\u043b <strong>\u0433\u0440\u043e\u043c\u0430\u0434\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432\u043f\u0435\u0440\u0435\u0434<\/strong> \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f <strong>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/strong> \u0438 <strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/strong>. \u0414\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f 7.0.0 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0432 <strong>3 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435,<\/strong> \u0447\u0435\u043c 5.6 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c <em>opcache<\/em> \u0432 <strong>2.7 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong> \u0431\u0435\u0437 <em>opcache<\/em>! \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u043e\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f!<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/throwable-interface\"><strong><u>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Throwable<\/u><\/strong><\/a><\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u0438 \u0440\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u0442\u0440\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p><code>Error<\/code> \u0438 <code>Exception<\/code> <em>\u0442\u0435\u043f\u0435\u0440\u044c<\/em> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <code>Throwable<\/code>.<\/p>\n<p>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f <code>Throwable<\/code>:<\/p>\n<pre><code>interface Throwable &nbsp;|- Error implements Throwable &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ArithmeticError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- DivisionByZeroError extends ArithmeticError &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- AssertionError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ParseError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- TypeError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ArgumentCountError extends TypeError &nbsp;|- Exception implements Throwable &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ClosedGeneratorException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- DOMException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ErrorException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- IntlException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- LogicException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- BadFunctionCallException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- BadMethodCallException extends BadFunctionCallException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- DomainException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- InvalidArgumentException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- LengthException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- OutOfRangeException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- PharException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ReflectionException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- RuntimeException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- OutOfBoundsException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- OverflowException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- PDOException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- RangeException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- UnderflowException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- UnexpectedValueException extends RuntimeException<\/code><\/pre>\n<p><em>\u26a0 \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <\/em><code>Throwable<\/code><em> \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 <\/em><code>Error<\/code><em> \u0438 <\/em><code>Exception<\/code><em>.<\/em><\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/unicode_escape\"><strong><u>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Unicode<\/u><\/strong><\/a><strong> \u2014 \u201c\\u{xxxxx}\u201d<\/strong><\/p>\n<pre><code class=\"php\">echo \"\\u{202E}Reversed text\"; \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u202eReversed text  echo \"ma\u00f1ana\"; \/\/ \"ma\\u{00F1}ana\" echo \"ma\u00f1ana\"; \/\/ \"man\\u{0303}ana\" \"n\" \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c ~ (U+0303)<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/context_sensitive_lexer\"><strong><u>\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443 \u043b\u0435\u043a\u0441\u0435\u0440<\/u><\/strong><\/a><\/p>\n<p>\u0421 \u044d\u0442\u0438\u043c \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u0430\u043b\u0430 <strong>\u043f\u043e\u043b\u0443-\u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438:<\/strong><\/p>\n<pre><code class=\"php\">callable&nbsp; class&nbsp; trait&nbsp; extends&nbsp; implements&nbsp; static&nbsp; abstract&nbsp; final&nbsp; public&nbsp; protected&nbsp; private&nbsp; const enddeclare&nbsp; endfor&nbsp; endforeach&nbsp; endif&nbsp; endwhile&nbsp; and&nbsp; global&nbsp; goto&nbsp; instanceof&nbsp; insteadof&nbsp; interface namespace&nbsp; new&nbsp; or&nbsp; xor&nbsp; try&nbsp; use&nbsp; var&nbsp; exit&nbsp; list&nbsp; clone&nbsp; include&nbsp; includeonce&nbsp; throw&nbsp; array print&nbsp; echo&nbsp; require&nbsp; requireonce&nbsp; return&nbsp; else&nbsp; elseif&nbsp; default&nbsp; break&nbsp; continue&nbsp; switch&nbsp; yield function&nbsp; if&nbsp; endswitch&nbsp; finally&nbsp; for&nbsp; foreach&nbsp; declare&nbsp; case&nbsp; do&nbsp; while&nbsp; as&nbsp; catch&nbsp; die&nbsp; self parent<\/code><\/pre>\n<p>\u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c <strong>\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430 <\/strong>\u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>class<\/code> \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <code>::class<\/code>.<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/generator-return-expressions\"><strong><u>\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f return \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u0445<\/u><\/strong><\/a><\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/uniform_variable_syntax\"><strong><u>\u0415\u0434\u0438\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/u><\/strong><\/a><\/p>\n<p><a href=\"http:\/\/php.net\/manual\/en\/function.dirname.php\"><strong><u>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 dirname()<\/u><\/strong><\/a><\/p>\n<h2>PHP 7.1<\/h2>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/nullable_types\"><strong><u>\u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b<\/u><\/strong><\/a><\/p>\n<pre><code class=\"php\">function answer(): ?int&nbsp; { &nbsp;&nbsp;&nbsp;return null; \/\/ \u043e\u043a }  function answer(): ?int&nbsp; { &nbsp;&nbsp;&nbsp;return 42; \/\/ \u043e\u043a }  function answer(): ?int { &nbsp;&nbsp;&nbsp;return new stdclass(); \/\/ \u043e\u0448\u0438\u0431\u043a\u0430 }  function say(?string $msg) { &nbsp;&nbsp;&nbsp;if ($msg) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $msg;  &nbsp;&nbsp;&nbsp;}  }  say('hello'); \/\/ \u043e\u043a - \u0432\u044b\u0432\u043e\u0434\u0438\u0442 hello say(null); \/\/ \u043e\u043a - \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 say(); \/\/ \u043e\u0448\u0438\u0431\u043a\u0430 - \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 say(new stdclass); \/\/ \u043e\u0448\u0438\u0431\u043a\u0430 - \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0438\u043f<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/void_return_type\"><strong><u>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/u><\/strong><\/a><\/p>\n<pre><code class=\"php\">function shouldreturnnothing(): void { &nbsp;&nbsp;&nbsp;return 1; \/\/ Fatal error: A void function must not return a value }<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0442\u0438\u043f\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 <code>void<\/code> \u0438\u043b\u0438 <em>void \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/em>\u043c\u043e\u0436\u0435\u0442 \u043b\u0438\u0431\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u043e, \u043b\u0438\u0431\u043e \u0438\u043c\u0435\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0431\u0435\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"php\">function lacksreturn(): void { &nbsp;&nbsp;\/\/ \u0432\u0430\u043b\u0438\u0434\u043d\u043e }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/iterable\"><strong><em><u>\u041f\u0441\u0435\u0432\u0434\u043e\u0442\u0438\u043f Iterable<\/u><\/em><\/strong><\/a><\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>array<\/code> \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 <code>Traversable<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441 <code>foreach<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>array<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u0430 <code>Traversable<\/code> &#8212; \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c.<\/p>\n<pre><code class=\"php\">function foo(iterable $iterable) { &nbsp;&nbsp;&nbsp;foreach ($iterable as $value) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u2026 &nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p><code>iterable<\/code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0438\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c <code>Traversable<\/code>, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u0430 <code>TypeError<\/code>.<\/p>\n<pre><code class=\"php\">function bar(): iterable { &nbsp;&nbsp;&nbsp;return [1, 2, 3]; }<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a <code>iterable<\/code> \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>null<\/code> \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"php\">function foo(iterable $iterable = []) { &nbsp;&nbsp;&nbsp;\/\/ \u2026 }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/closurefromcallable\"><strong><em><u>Closure \u0438\u0437 callable<\/u><\/em><\/strong><\/a><\/p>\n<pre><code class=\"php\">class Closure { &nbsp;&nbsp;&nbsp;\u2026 &nbsp;&nbsp;&nbsp;public static function fromCallable(callable $callable) : Closure {\u2026} &nbsp;&nbsp;&nbsp;\u2026 }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/short_list_syntax\"><strong><em><u>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0434\u043b\u044f \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/u><\/em><\/strong><\/a><\/p>\n<pre><code class=\"php\">$array = [1, 2, 3];  \/\/ \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 $a, $b \u0438 $c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 $array \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u043f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0442 \u043d\u0443\u043b\u044f [$a, $b, $c] = $array;  \/\/ \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 $a, $b \u0438 $c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 $array \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \"a\", \"b\" \u0438 \"c\" \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e [\"a\" =&gt; $a, \"b\" =&gt; $b, \"c\" =&gt; $c] = $array;<\/code><\/pre>\n<p><strong><em>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0434\u043b\u044f list()<\/em><\/strong><\/p>\n<pre><code class=\"php\">$powersOfTwo = [1 =&gt; 2, 2 =&gt; 4, 3 =&gt; 8]; list(1 =&gt; $oneBit, 2 =&gt; $twoBit, 3 =&gt; $threeBit) = $powersOfTwo;<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/class_const_visibility\"><strong><em><u>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043a\u043b\u0430\u0441\u0441\u0430<\/u><\/em><\/strong><\/a><\/p>\n<pre><code class=\"php\">class Token {     \/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e public    const PUBLICCONST = 0;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private const PRIVATECONST = 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected const PROTECTEDCONST = 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public const PUBLICCONSTTWO = 0;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private const FOO = 1, BAR = 2; }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/multiple-catch\"><strong><u>\u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439<\/u><\/strong><\/a><\/p>\n<pre><code class=\"php\">try { &nbsp;&nbsp;\/\/ \u041a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u0434\u2026 } catch (ExceptionType1 | ExceptionType2 $e) { &nbsp;\/\/ \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f } catch (\\Exception $e) { &nbsp;&nbsp;\/\/ \u2026 }<\/code><\/pre>\n<blockquote>\n<p>\u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0434\u043d\u0438 \u043c\u044b \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0430\u0441 <a href=\"https:\/\/otus.pw\/u2XK\/\">\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440<\/a> \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0448\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043e\u0442\u0432\u0435\u0442\u044f\u0442 \u043d\u0430 \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<\/blockquote>\n<h4>\u0427\u0438\u0442\u0430\u0442\u044c \u0435\u0449\u0451:<\/h4>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/521488\/\">\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c ORM<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524270\/\"> https:\/\/habr.com\/ru\/company\/otus\/blog\/524270\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524270\/\">\n<p><strong><em>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430&nbsp;<\/em><\/strong><a href=\"https:\/\/otus.pw\/u2XK\/\"><strong><em>\u00abBackend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb<\/em><\/strong><\/a><strong><em>.<\/em><\/strong><\/p>\n<h2>\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430 \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c \u0432 PHP v7.x<\/h2>\n<figure class=\"full-width\"><figcaption>PHP_v8.0<\/figcaption><\/figure>\n<hr>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 PHP \u0432\u0435\u0440\u0441\u0438\u0438 7.3 \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e PHP: \u0447\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u0430 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 PHP \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<strong> <\/strong>PHP v7.x, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u043c &#8212; \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u044f \u0434\u0443\u043c\u0430\u044e, \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c PHP 5.6 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e. \u042f \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u0435\u0437\u0434\u0435 \u0433\u0434\u0435 \u0441\u043c\u043e\u0433 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0444\u0438\u0447, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e &#8212; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<h2>PHP 7.0<\/h2>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/anonymous_classes\"><strong><u>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/u><\/strong><\/a><\/p>\n<p>\u0410\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0441 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0441\u0441 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"php\">new class($i) {    public function __construct($i) {        $this-&gt;i = $i;    } }<\/code><\/pre>\n<p><strong><em>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/em><\/strong><em> &#8212; \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043b\u0435\u043d\u0438\u044f (\u0434\u0430\u0436\u0435 \u043d\u0430 0).<\/em><\/p>\n<p><em>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439. \u0415\u0441\u043b\u0438 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434) \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 E<\/em>WARNING \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 FALSE.<\/p>\n<pre><code class=\"php\">intdiv(int $numerator, int $divisor)<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/isset_ternary\"><strong><u>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 null<\/u><\/strong><\/a> &#8212; \u00ab??\u00bb<\/p>\n<pre><code class=\"php\">$x = NULL; $y = NULL; $z = 3; vardump($x ?? $y ?? $z); \/\/ int(3)  $x = [\"c\" =&gt; \"meaningfulvalue\"]; vardump($x[\"a\"] ?? $x[\"b\"] ?? $x[\"c\"]); \/\/ string(16) \"meaningfulvalue\"<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/combined-comparison-operator\"><strong><u>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8212; spaceship (\u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0440\u0430\u0431\u043b\u044c)<\/u><\/strong><u> <\/u><\/a>(&lt;=&gt;)<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"php\">\/\/ \u041f\u0440\u0435\u0436\u0434\u0435  f unction orderfunc($a, $b) { &nbsp;&nbsp;&nbsp;return ($a &lt; $b) ? -1 : (($a &gt; $b) ? 1 : 0); }  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &lt;=&gt;  function orderfunc($a, $b) { &nbsp;&nbsp;&nbsp;return $a &lt;=&gt; $b; }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/scalar_type_hints_v5\"><strong><u>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432<\/u><\/strong><\/a><\/p>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 PHP &#8212; v0.5.<\/p>\n<pre><code>function add(float $a, float $b): float { &nbsp;&nbsp;&nbsp;return $a + $b; } add(1, 2); \/\/ float(3)<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/return_types\"><strong><u>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/u><\/strong><\/a><\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u200b\u200b\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0442\u0438\u043f\u044b \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 &#8212; \u043a\u043b\u0430\u0441\u0441\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u0425\u0435\u0445, \u0443\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c (\u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u0432 v7.1 :))<\/p>\n<pre><code class=\"php\">interface A { &nbsp;&nbsp;&nbsp;static function make(): A; } class B implements A { &nbsp;&nbsp;&nbsp;static function make(): A { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new B(); &nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/group_use_declarations\"><strong><u>\u0413\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f <\/u><\/strong><\/a><strong><u>use<\/u><\/strong><\/p>\n<pre><code class=\"php\">\/\/ \u042f\u0432\u043d\u044b\u0439 use \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441:  use FooLibrary\\Bar\\Baz\\ClassA; use FooLibrary\\Bar\\Baz\\ClassB; use FooLibrary\\Bar\\Baz\\ClassC; use FooLibrary\\Bar\\Baz\\ClassD as Fizbo;  \/\/ \u0413\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 use \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441: use FooLibrary\\Bar\\Baz{ ClassA, ClassB, ClassC, ClassD as Fizbo };<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/generator-delegation\"><strong><u>\u0414\u0435\u043b\u0435\u0433\u0430\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/u><\/strong><\/a><\/p>\n<p>\u0412 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441:<\/p>\n<pre><code class=\"php\">yield from &lt;expr&gt;<\/code><\/pre>\n<h3>\u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>PHP 7 <em>\u043f\u043e\u0447\u0442\u0438 \u0432\u0434\u0432\u043e\u0435<\/em> \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c PHP 5.6.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0417\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c, PHP 7.0 \u0441\u0442\u0430\u043b <strong>\u0433\u0440\u043e\u043c\u0430\u0434\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432\u043f\u0435\u0440\u0435\u0434<\/strong> \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f <strong>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/strong> \u0438 <strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/strong>. \u0414\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f 7.0.0 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0432 <strong>3 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435,<\/strong> \u0447\u0435\u043c 5.6 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c <em>opcache<\/em> \u0432 <strong>2.7 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong> \u0431\u0435\u0437 <em>opcache<\/em>! \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u043e\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f!<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/throwable-interface\"><strong><u>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Throwable<\/u><\/strong><\/a><\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u0438 \u0440\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u0442\u0440\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p><code>Error<\/code> \u0438 <code>Exception<\/code> <em>\u0442\u0435\u043f\u0435\u0440\u044c<\/em> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <code>Throwable<\/code>.<\/p>\n<p>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f <code>Throwable<\/code>:<\/p>\n<pre><code>interface Throwable &nbsp;|- Error implements Throwable &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ArithmeticError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- DivisionByZeroError extends ArithmeticError &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- AssertionError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ParseError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- TypeError extends Error &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ArgumentCountError extends TypeError &nbsp;|- Exception implements Throwable &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ClosedGeneratorException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- DOMException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ErrorException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- IntlException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- LogicException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- BadFunctionCallException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- BadMethodCallException extends BadFunctionCallException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- DomainException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- InvalidArgumentException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- LengthException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- OutOfRangeException extends LogicException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- PharException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- ReflectionException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- RuntimeException extends Exception &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- OutOfBoundsException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- OverflowException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- PDOException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- RangeException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- UnderflowException extends RuntimeException &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|- UnexpectedValueException extends RuntimeException<\/code><\/pre>\n<p><em>\u26a0 \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <\/em><code>Throwable<\/code><em> \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 <\/em><code>Error<\/code><em> \u0438 <\/em><code>Exception<\/code><em>.<\/em><\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/unicode_escape\"><strong><u>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Unicode<\/u><\/strong><\/a><strong> \u2014 \u201c\\u{xxxxx}\u201d<\/strong><\/p>\n<pre><code class=\"php\">echo \"\\u{202E}Reversed text\"; \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u202eReversed text  echo \"ma\u00f1ana\"; \/\/ \"ma\\u{00F1}ana\" echo \"ma\u00f1ana\"; \/\/ \"man\\u{0303}ana\" \"n\" \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c ~ (U+0303)<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/context_sensitive_lexer\"><strong><u>\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443 \u043b\u0435\u043a\u0441\u0435\u0440<\/u><\/strong><\/a><\/p>\n<p>\u0421 \u044d\u0442\u0438\u043c \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u0430\u043b\u0430 <strong>\u043f\u043e\u043b\u0443-\u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438:<\/strong><\/p>\n<pre><code class=\"php\">callable&nbsp; class&nbsp; trait&nbsp; extends&nbsp; implements&nbsp; static&nbsp; abstract&nbsp; final&nbsp; public&nbsp; protected&nbsp; private&nbsp; const enddeclare&nbsp; endfor&nbsp; endforeach&nbsp; endif&nbsp; endwhile&nbsp; and&nbsp; global&nbsp; goto&nbsp; instanceof&nbsp; insteadof&nbsp; interface namespace&nbsp; new&nbsp; or&nbsp; xor&nbsp; try&nbsp; use&nbsp; var&nbsp; exit&nbsp; list&nbsp; clone&nbsp; include&nbsp; includeonce&nbsp; throw&nbsp; array print&nbsp; echo&nbsp; require&nbsp; requireonce&nbsp; return&nbsp; else&nbsp; elseif&nbsp; default&nbsp; break&nbsp; continue&nbsp; switch&nbsp; yield function&nbsp; if&nbsp; endswitch&nbsp; finally&nbsp; for&nbsp; foreach&nbsp; declare&nbsp; case&nbsp; do&nbsp; while&nbsp; as&nbsp; catch&nbsp; die&nbsp; self parent<\/code><\/pre>\n<p>\u0417\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c <strong>\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430 <\/strong>\u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>class<\/code> \u0438\u0437-\u0437\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <code>::class<\/code>.<\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/generator-return-expressions\"><strong><u>\u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f return \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u0445<\/u><\/strong><\/a><\/p>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/uniform_variable_syntax\"><strong><u>\u0415\u0434\u0438\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/u><\/strong><\/a><\/p>\n<p><a href=\"http:\/\/php.net\/manual\/en\/function.dirname.php\"><strong><u>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 dirname()<\/u><\/strong><\/a><\/p>\n<h2>PHP 7.1<\/h2>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/nullable_types\"><strong><u>\u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b<\/u><\/strong><\/a><\/p>\n<pre><code class=\"php\">function answer(): ?int&nbsp; { &nbsp;&nbsp;&nbsp;return null; \/\/ \u043e\u043a }  function answer(): ?int&nbsp; { &nbsp;&nbsp;&nbsp;return 42; \/\/ \u043e\u043a }  function answer(): ?int { &nbsp;&nbsp;&nbsp;return new stdclass(); \/\/ \u043e\u0448\u0438\u0431\u043a\u0430 }  function say(?string $msg) { &nbsp;&nbsp;&nbsp;if ($msg) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $msg;  &nbsp;&nbsp;&nbsp;}  }  say('hello'); \/\/ \u043e\u043a - \u0432\u044b\u0432\u043e\u0434\u0438\u0442 hello say(null); \/\/ \u043e\u043a - \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 say(); \/\/ \u043e\u0448\u0438\u0431\u043a\u0430 - \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 say(new stdclass); \/\/ \u043e\u0448\u0438\u0431\u043a\u0430 - \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0438\u043f<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/void_return_type\"><strong><u>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/u><\/strong><\/a><\/p>\n<pre><code class=\"php\">function shouldreturnnothing(): void { &nbsp;&nbsp;&nbsp;return 1; \/\/ Fatal error: A void function must not return a value }<\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u0442\u0438\u043f\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 <code>void<\/code> \u0438\u043b\u0438 <em>void \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/em>\u043c\u043e\u0436\u0435\u0442 \u043b\u0438\u0431\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435\u044f\u0432\u043d\u043e, \u043b\u0438\u0431\u043e \u0438\u043c\u0435\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0431\u0435\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"php\">function lacksreturn(): void { &nbsp;&nbsp;\/\/ \u0432\u0430\u043b\u0438\u0434\u043d\u043e }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/iterable\"><strong><em><u>\u041f\u0441\u0435\u0432\u0434\u043e\u0442\u0438\u043f Iterable<\/u><\/em><\/strong><\/a><\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>array<\/code> \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 <code>Traversable<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441 <code>foreach<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>array<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u0430 <code>Traversable<\/code> &#8212; \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c.<\/p>\n<pre><code class=\"php\">function foo(iterable $iterable) { &nbsp;&nbsp;&nbsp;foreach ($iterable as $value) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u2026 &nbsp;&nbsp;&nbsp;} }<\/code><\/pre>\n<p><code>iterable<\/code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0438\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c <code>Traversable<\/code>, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u0430 <code>TypeError<\/code>.<\/p>\n<pre><code class=\"php\">function bar(): iterable { &nbsp;&nbsp;&nbsp;return [1, 2, 3]; }<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a <code>iterable<\/code> \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>null<\/code> \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"php\">function foo(iterable $iterable = []) { &nbsp;&nbsp;&nbsp;\/\/ \u2026 }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/closurefromcallable\"><strong><em><u>Closure \u0438\u0437 callable<\/u><\/em><\/strong><\/a><\/p>\n<pre><code class=\"php\">class Closure { &nbsp;&nbsp;&nbsp;\u2026 &nbsp;&nbsp;&nbsp;public static function fromCallable(callable $callable) : Closure {\u2026} &nbsp;&nbsp;&nbsp;\u2026 }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/short_list_syntax\"><strong><em><u>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0434\u043b\u044f \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/u><\/em><\/strong><\/a><\/p>\n<pre><code class=\"php\">$array = [1, 2, 3];  \/\/ \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 $a, $b \u0438 $c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 $array \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u043f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0442 \u043d\u0443\u043b\u044f [$a, $b, $c] = $array;  \/\/ \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 $a, $b \u0438 $c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 $array \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \"a\", \"b\" \u0438 \"c\" \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e [\"a\" =&gt; $a, \"b\" =&gt; $b, \"c\" =&gt; $c] = $array;<\/code><\/pre>\n<p><strong><em>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0434\u043b\u044f list()<\/em><\/strong><\/p>\n<pre><code class=\"php\">$powersOfTwo = [1 =&gt; 2, 2 =&gt; 4, 3 =&gt; 8]; list(1 =&gt; $oneBit, 2 =&gt; $twoBit, 3 =&gt; $threeBit) = $powersOfTwo;<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/class_const_visibility\"><strong><em><u>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043a\u043b\u0430\u0441\u0441\u0430<\/u><\/em><\/strong><\/a><\/p>\n<pre><code class=\"php\">class Token {     \/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e public    const PUBLICCONST = 0;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private const PRIVATECONST = 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected const PROTECTEDCONST = 0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public const PUBLICCONSTTWO = 0;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private const FOO = 1, BAR = 2; }<\/code><\/pre>\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/multiple-catch\"><strong><u>\u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439<\/u><\/strong><\/a><\/p>\n<pre><code class=\"php\">try { &nbsp;&nbsp;\/\/ \u041a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u0434\u2026 } catch (ExceptionType1 | ExceptionType2 $e) { &nbsp;\/\/ \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f } catch (\\Exception $e) { &nbsp;&nbsp;\/\/ \u2026 }<\/code><\/pre>\n<blockquote>\n<p>\u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0434\u043d\u0438 \u043c\u044b \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0430\u0441 <a href=\"https:\/\/otus.pw\/u2XK\/\">\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440<\/a> \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0448\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u044b \u043e\u0442\u0432\u0435\u0442\u044f\u0442 \u043d\u0430 \u0432\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<\/blockquote>\n<h4>\u0427\u0438\u0442\u0430\u0442\u044c \u0435\u0449\u0451:<\/h4>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/521488\/\">\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c ORM<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524270\/\"> https:\/\/habr.com\/ru\/company\/otus\/blog\/524270\/<\/a><br \/><\/br><\/br><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-311761","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=311761"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/311761\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=311761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=311761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=311761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}