{"id":305718,"date":"2020-06-22T09:00:53","date_gmt":"2020-06-22T09:00:53","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=305718"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=305718","title":{"rendered":"PHP-\u0414\u0430\u0439\u0434\u0436\u0435\u0441\u0442 \u2116 182 (1 \u2013 22 \u0438\u044e\u043d\u044f 2020)"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/507636\/\"><a href=\"https:\/\/habr.com\/ru\/post\/507636\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dd5\/3c3\/3b2\/dd53c33b2a501f4727f6929a1e3a2318.jpg\"><\/div>\n<p><\/a>  <\/p>\n<p>\u0421\u0432\u0435\u0436\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b. \u0412 \u0432\u044b\u043f\u0443\u0441\u043a\u0435: 3 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0438 6 \u043d\u043e\u0432\u044b\u0445 RFC-\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 PHP Internals, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u2014 <code>@@<\/code> \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 <code>#[]<\/code> \u0431\u044b\u043b \u0431\u044b \u043b\u0443\u0447\u0448\u0435, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f black\/whitelist \u0432 PHP-\u043c\u0438\u0440\u0435, \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u044e\u0442 PHP-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0430\u043d\u0430\u043b\u043e\u0433 ngrok \u043d\u0430 PHP, \u0432\u0438\u0434\u0435\u043e, \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u044b \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!<\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f57\/4e9\/991\/f574e9991c42407b8fa789a66b854f8d.png\" width=\"20\"> \u041d\u043e\u0432\u043e\u0441\u0442\u0438 \u0438 \u0440\u0435\u043b\u0438\u0437\u044b<\/h3>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"ru\" src=\"https:\/\/habrastorage.org\/webt\/v2\/r1\/ak\/v2r1ake6qijxftbralm4knou9ck.png\" width=\"12\"> <a href=\"https:\/\/www.jetbrains.com\/ru-ru\/lp\/php-25\/\" rel=\"nofollow\">PHP \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c 25 \u043b\u0435\u0442<\/a> \u2014 \u0422\u0430\u0439\u043c\u043b\u0430\u0439\u043d \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u044f\u0437\u044b\u043a\u0430.<\/li>\n<li><a href=\"https:\/\/www.php.net\/releases\/7_4_7.php\" rel=\"nofollow\">PHP 7.4.7<\/a> \u2014 \u041a\u0440\u043e\u043c\u0435 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0432 \u044d\u0442\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 <a href=\"https:\/\/twitter.com\/nikita_ppv\/status\/1264857231167807489\" rel=\"nofollow\"><code>\u043e\u0448\u0438\u0431\u043a\u0430 yield from<\/code><\/a>.<\/li>\n<li><a href=\"https:\/\/www.php.net\/releases\/7_3_19.php\" rel=\"nofollow\">PHP 7.3.19<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/composer\/composer\/releases\/tag\/2.0.0-alpha1\" rel=\"nofollow\">Composer 2.0.0-alpha1<\/a><\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/lp\/devecosystem-2020\/php\/\" rel=\"nofollow\">The State of Developer Ecosystem in 2020<\/a> \u2014 PHP-\u0441\u0435\u043a\u0446\u0438\u044f \u0438\u0437 \u043e\u043f\u0440\u043e\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442 JetBrains.\n<p>  65% \u043e\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 <a href=\"https:\/\/www.jetbrains.com\/lp\/devecosystem-2020\/php\/#:~:text=How%20do%20you%20usually%20debug%20PHP%20code%3F\" rel=\"nofollow\">\u0443\u043a\u0430\u0437\u0430\u043b\u0438<\/a>, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c <code>dump &amp; die<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u043e\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0442\u0432\u0438\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 Xdebug \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u043b \u0431\u0443\u0440\u043d\u0443\u044e \u0440\u0435\u0430\u043a\u0446\u0438\u044e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435:   <\/p>\n<div class=\"oembed\">\n<blockquote class=\"twitter-tweet\" data-lang=\"en_US\">\n<p lang=\"en\" dir=\"ltr\">PHP developers that don&#39;t use Xdebug for debugging are amateurs.<\/p>\n<p>&mdash; Derick Rethans  (@derickr) <a href=\"https:\/\/twitter.com\/derickr\/status\/1274134192155131905?ref_src=twsrc%5Etfw\">June 20, 2020<\/a><\/p><\/blockquote>\n<p> <script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script> <\/div>\n<p>   <\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c9e\/e78\/803\/c9ee7880391644e4aef6cc28ca681ab0.png\" width=\"20\"> PHP Internals<\/h3>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"check\" src=\"https:\/\/habrastorage.org\/webt\/qn\/pg\/4d\/qnpg4d87ngmevnvwdg9vjxxa5i4.png\" width=\"12\"> <a href=\"https:\/\/wiki.php.net\/rfc\/attribute_amendments\" rel=\"nofollow\">[RFC] Attribute Amendments<\/a> \u2014 \u041f\u0440\u0438\u043d\u044f\u0442\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>&lt;&lt;Attr1, Attr2&gt;&gt;<\/code>, <code>PhpAttribute<\/code> \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u0432 <code>Attribute<\/code>, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/li>\n<li><img decoding=\"async\" alt=\"check\" src=\"https:\/\/habrastorage.org\/webt\/qn\/pg\/4d\/qnpg4d87ngmevnvwdg9vjxxa5i4.png\" width=\"12\"> <a href=\"https:\/\/wiki.php.net\/rfc\/magic-methods-signature\" rel=\"nofollow\">[RFC] Ensure correct signatures of magic methods<\/a> \u2014 \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 PHP 8 \u0431\u0443\u0434\u0443\u0442 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434:\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">class Foo {     function __get(int $name): void     {         echo $name;     } } (new Foo)-&gt;{42}; <\/code><\/pre>\n<\/div><\/div>\n<p> \u0412 PHP 8 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li><img decoding=\"async\" alt=\"check\" src=\"https:\/\/habrastorage.org\/webt\/qn\/pg\/4d\/qnpg4d87ngmevnvwdg9vjxxa5i4.png\" width=\"12\"> <a href=\"https:\/\/wiki.php.net\/rfc\/stable_sorting\" rel=\"nofollow\">[RFC] Make sorting stable<\/a> \u2014 \u0412\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 PHP (sort, usort, asort \u0438 \u0442.\u0434.) \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 PHP 8.0 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c\u0438. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0412 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/3v4l.org\/bpvq1\" rel=\"nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a<\/a>.<\/li>\n<li><img decoding=\"async\" alt=\"cross\" src=\"https:\/\/habrastorage.org\/webt\/pt\/cd\/aj\/ptcdaj_hxxx_o0_jr9lnltwphuk.png\" width=\"12\"> <a href=\"https:\/\/wiki.php.net\/rfc\/opcache.no_cache\" rel=\"nofollow\">[RFC] Opcache optimization without any caching<\/a> \u2014 \u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0431\u0435\u0437 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u043a\u043e\u0434\u043e\u0432.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/make_ctor_ret_void\" rel=\"nofollow\">[RFC] Make constructors and destructors return void<\/a> \u2014 \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 PHP \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">class Test {         public function __construct() {                 return 0;         }          public function __destruct() {                 return 1;         } }  $test = new Test();  \/\/ this prints 0 echo $test-&gt;__construct(); \/\/ this prints 1 echo $test-&gt;__destruct(); <\/code><\/pre>\n<\/div><\/div>\n<p> \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 PHP 8.0 \u0431\u0440\u043e\u0441\u0430\u0442\u044c <code>Deprecated<\/code> \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u0410 \u0443\u0436\u0435 \u0432 PHP 9.0 \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>Fatal Error<\/code>.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/namespaced_names_as_token\" rel=\"nofollow\">[RFC] Treat namespaced names as single token<\/a> \u2014 \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d, \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>namespace app\\function { class Foo {} };<\/code> \u0441\u0432\u0430\u043b\u0438\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 <code>Parse error<\/code>. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u043c \u0432\u0435\u0441\u044c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/rename-double-colon-token\" rel=\"nofollow\">[RFC] Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON<\/a> \u2014 \u0422\u043e\u043a\u0435\u043d <code>::<\/code> \u0432 PHP \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>T_PAAMAYIM_NEKUDOTAYIM<\/code> \u2014 \u044d\u0442\u043e\u0442 \u0444\u0430\u043a\u0442 \u0434\u0430\u0436\u0435 \u0431\u044b\u043b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 <a href=\"http:\/\/phpsadness.com\/sad\/1\" rel=\"nofollow\">\u2116 1<\/a> \u0432 <a href=\"http:\/\/phpsadness.com\/\" rel=\"nofollow\">\u0441\u043f\u0438\u0441\u043a\u0435 \u0433\u0440\u0443\u0441\u0442\u0435\u0439 PHP<\/a>. <br \/>  \u0410\u0432\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d. \u0421\u043c\u044b\u0441\u043b\u0430 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u0442\u0430\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f <code>::<\/code>, \u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043d \u0438 \u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/shorter_attribute_syntax\" rel=\"nofollow\">[RFC] Shorter Attribute Syntax<\/a> \u2014 \u0410\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u0434\u043b\u044f PHP 8, \u043d\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043c\u043d\u043e\u0433\u0438\u043c \u043d\u0435 \u043f\u043e \u0434\u0443\u0448\u0435. \u041d\u0430 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: <code>&lt;&lt;Attr&gt;&gt;<\/code> (\u0442\u0435\u043a\u0443\u0449\u0438\u0439) vs <code>@@Attr<\/code> vs <code>#[Attr]<\/code>. Brent Ro\u043ese <a href=\"https:\/\/twitter.com\/brendt_gd\/status\/1273860590730129408\" rel=\"nofollow\">\u043f\u0440\u0438\u0432\u0435\u043b<\/a> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 <code>#[ ]<\/code>:<br \/> \n<ul>\n<li>\u0422\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0432 Rust.<\/li>\n<li>\u041e\u043d \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c: <code>#[Attribute]<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u043c PHP &lt;=7.4 \u043a\u0430\u043a \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/li>\n<li><code>@@<\/code> \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0443\u0442\u0430\u0442\u044c \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a (<a href=\"https:\/\/3v4l.org\/j9tU0\" rel=\"nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>).<\/li>\n<li><code>&lt;&lt;&gt;&gt;<\/code> \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0443\u0442\u0430\u0442\u044c \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0441 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0443\u0433\u043b\u043e\u0432\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 <code>&lt;&gt;<\/code>.<\/li>\n<\/ul>\n<p>   <\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/change-terminology-to-excludelist\" rel=\"nofollow\">[RFC] Change terminology to ExcludeList<\/a> \u2014 \u0422\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043e\u043b\u0438\u0442\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432 \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u0438 PHP-\u043c\u0438\u0440. \u0412 Internals \u0431\u044b\u043b\u0438 <a href=\"https:\/\/externals.io\/message\/110515\" rel=\"nofollow\">\u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f<\/a>. <br \/>  \u0412 \u044f\u0434\u0440\u0435 PHP \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435: \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043e\u043f\u043a\u0435\u0448\u0430 <code>opcache.blacklist_filename<\/code> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 <code>opcache.exclude_list_filename<\/code>. <br \/>  \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 PHP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u043d\u0435\u0441\u043b\u0438: <a href=\"https:\/\/github.com\/sebastianbergmann\/phpunit\/blob\/master\/ChangeLog-9.3.md#930---2020-08-07\" rel=\"nofollow\">PHPUnit<\/a>, <a href=\"https:\/\/www.drupal.org\/project\/drupal\/issues\/2993575\" rel=\"nofollow\">Drupal<\/a>, <a href=\"https:\/\/github.com\/xdebug\/xdebug\/commit\/63b43b51e43b794cf8cd740e54089b2b7320fbe1\" rel=\"nofollow\">Xdebug<\/a>, <a href=\"https:\/\/github.com\/yiisoft\/yii2\/pull\/18104\" rel=\"nofollow\">Yii<\/a>, <a href=\"https:\/\/github.com\/composer\/composer\/pull\/8957\" rel=\"nofollow\">Composer<\/a> (+ <a href=\"https:\/\/blog.packagist.com\/composer-and-default-git-branches\/\" rel=\"nofollow\">\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435-master Git-\u0432\u0435\u0442\u043a\u0430\u043c\u0438<\/a>). \u0422\u0430\u043a\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 <a href=\"https:\/\/github.com\/PHPCSStandards\/PHPCSExtra\/issues\/59\" rel=\"nofollow\">\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f PHP_CodeSniffer<\/a> \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u043f\u043b\u043e\u0445\u0438\u0445\u00bb \u0441\u043b\u043e\u0432.<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/rfc\/nullsafe_operator\" rel=\"nofollow\">[RFC] Nullsafe operator<\/a> \u2014 \u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u0447\u043a\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u0443 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 <code>null<\/code>:\n<pre><code class=\"php\">$country = $session?-&gt;user?-&gt;getAddress()?-&gt;country;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0412\u043c\u0435\u0441\u0442\u043e<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">$country =  null;  if ($session !== null) {     $user = $session-&gt;user;      if ($user !== null) {         $address = $user-&gt;getAddress();          if ($address !== null) {             $country = $address-&gt;country;         }     } } <\/code><\/pre>\n<\/div><\/div>\n<\/li>\n<li><a href=\"https:\/\/wiki.php.net\/todo\/php80\" rel=\"nofollow\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 PHP 8.0<\/a> \u2014 \u0417\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u0447 \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u0430 \u043d\u0430 4 \u0430\u0432\u0433\u0443\u0441\u0442\u0430, \u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043d\u0430 26 \u043d\u043e\u044f\u0431\u0440\u044f.<\/li>\n<li>\u041f\u043e\u0449\u0443\u043f\u0430\u0442\u044c PHP 8 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0435 <a href=\"https:\/\/3v4l.org\/\" rel=\"nofollow\">3v4l.org<\/a>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/3v4l.org\/MgCFs\/rfc#output\" rel=\"nofollow\">\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 \u0432\u0435\u0442\u043a\u0435 php-master<\/a>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/cf8\/62d\/907\/cf862d9072784d04b621238ec137f2ca.png\" width=\"20\"> \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/beyondcode\/expose\" rel=\"nofollow\">beyondcode\/expose<\/a> \u2014 \u0421\u0435\u0440\u0432\u0438\u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c PHP. \u0410\u043d\u0430\u043b\u043e\u0433 ngrok. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0431\u044b\u043b\u043e <a href=\"https:\/\/t.me\/phpdigest\/156\" rel=\"nofollow\">\u0432 \u043a\u0430\u043d\u0430\u043b\u0435 PHP Digest<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/canvural\/php-openapi-faker\" rel=\"nofollow\">canvural\/php-openapi-faker<\/a> \u2014 \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f OpenAPI \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\/\u043e\u0442\u0432\u0435\u0442\u043e\u0432\/\u0441\u0445\u0435\u043c.<\/li>\n<li><a href=\"https:\/\/github.com\/doctrine\/migrations\/releases\/tag\/3.0.0\" rel=\"nofollow\">doctrine\/migrations 3.0.0<\/a> \u2014 \u041c\u0430\u0436\u043e\u0440\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439.<\/li>\n<li><a href=\"https:\/\/github.com\/mathiasverraes\/uptodocs\" rel=\"nofollow\">mathiasverraes\/uptodocs<\/a> \u2014 \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0431\u043b\u043e\u043a\u0438 PHP-\u043a\u043e\u0434\u0430 \u0432 Markdown-\u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u0445 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/96b\/65e\/921\/96b65e92179a40f2bd1884549973ddd5.png\" width=\"16\"> Symfony<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/symfony.com\/blog\/the-symfony-5-certification-is-now-available\" rel=\"nofollow\">\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e Symfony 5<\/a>.<\/li>\n<li>\u0412 Symfony 6 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 <a href=\"https:\/\/github.com\/symfony\/symfony\/issues\/37186\" rel=\"nofollow\">\u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f PHP-\u0444\u0430\u0439\u043b\u044b<\/a> \u0432\u043c\u0435\u0441\u0442\u043e YAML \u0438\u043b\u0438 XML.<\/li>\n<li><a href=\"https:\/\/github.com\/dbu\/snake-bundle\" rel=\"nofollow\">dbu\/snake-bundle<\/a> \u2014 \u0418\u0433\u0440\u0430 \u0437\u043c\u0435\u0439\u043a\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 symfony\/console.<\/li>\n<li><a href=\"https:\/\/www.ibexa.co\/blog\/how-much-of-a-performance-boost-can-you-expect-for-a-symfony-5-app-with-php-opcache-preloading\" rel=\"nofollow\">\u041a\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a> \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Symfony 5 \u0441 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043e\u043f\u043a\u0435\u0448\u0430?<\/li>\n<li><a href=\"https:\/\/blog.cemunalan.com.tr\/2020\/02\/02\/10-symfony-testing-tips\/\" rel=\"nofollow\">10 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e Symfony<\/a>.<\/li>\n<li><a href=\"https:\/\/nicwortel.nl\/blog\/2020\/06\/07\/protect-symfony-application-against-owasp-top-10-security-risks\" rel=\"nofollow\">\u0417\u0430\u0449\u0438\u0442\u0430 Symfony-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 Top 10 OWASP \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/a>.<\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/a-week-of-symfony-703-15-21-june-2020\" rel=\"nofollow\">\u041d\u0435\u0434\u0435\u043b\u044f Symfony #703 (15-21 \u0438\u044e\u043d\u044f 2020)<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/314\/bd0\/f0d\/314bd0f0dfc54e3fa7f0c0daef1a2d25.png\" width=\"16\"> Laravel<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/spatie\/laravel-cronless-schedule\" rel=\"nofollow\">spatie\/laravel-cronless-schedule<\/a> \u2014 \u041f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f cron. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c ReactPHP \u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u044b. <a href=\"https:\/\/freek.dev\/1689-a-package-to-run-the-laravel-scheduler-without-relying-on-cron\" rel=\"nofollow\">\u0418\u043d\u0442\u0440\u043e<\/a>.<\/li>\n<li><a href=\"https:\/\/freek.dev\/1691-adding-trycatch-to-laravel-collections\" rel=\"nofollow\">\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c try\/catch \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 Laravel<\/a><\/li>\n<li><img decoding=\"async\" alt=\"habr\" src=\"https:\/\/habrastorage.org\/webt\/-u\/wa\/el\/-uwael5b7b4s2zu-db-7p8iytxg.png\" width=\"12\"> <a href=\"https:\/\/habr.com\/ru\/post\/507610\/\">Laravel-\u0414\u0430\u0439\u0434\u0436\u0435\u0441\u0442 (15\u201321 \u0438\u044e\u043d\u044f 2020)<\/a><\/li>\n<li><a href=\"https:\/\/itnext.io\/laravel-package-ecosystem-4afd53fad192\" rel=\"nofollow\">\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b Laravel<\/a><\/li>\n<li>\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0440\u0435\u0434 \u0441 \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438 \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e Laravel-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439:\n<div class=\"oembed\">\n<blockquote class=\"twitter-tweet\" data-lang=\"en_US\">\n<p lang=\"en\" dir=\"ltr\"> In this thread I&#39;ll list tactics you can use to write cleaner code in Laravel.<\/p>\n<p>As you use them repeatedly, you&#39;ll develop a sense for what&#39;s good code and what&#39;s bad code.<\/p>\n<p>I&#39;ll also sprinkle some general Laravel code advice in between these tactics.<\/p>\n<p>THREAD<\/p>\n<p>&mdash; Samuel \u0160tancl (@samuelstancl) <a href=\"https:\/\/twitter.com\/samuelstancl\/status\/1272822437181378561?ref_src=twsrc%5Etfw\">June 16, 2020<\/a><\/p><\/blockquote>\n<p> <script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script> <\/div>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/web\/569\/de4\/298\/569de4298b764a33894aa517e74324f9.png\" width=\"16\"> Yii<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/medium.com\/rigor-guild\/yii2-doctrine-orm-simple-integration-fb0625002a40\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Yii 2 \u0438 Doctrine ORM<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pj\/lk\/ob\/pjlkob5btqut7it5e_eod-qtqh0.png\" width=\"16\"> Laminas<\/h3>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"video\" src=\"https:\/\/habrastorage.org\/webt\/qz\/or\/43\/qzor43-o-hxqow_k8lsqlmniblm.png\" width=\"14\"> <a href=\"https:\/\/www.youtube.com\/watch?v=5luPg2oVUIk\" rel=\"nofollow\">\u041c\u0435\u0440\u0442\u0432 \u043b\u0438 Zend Framework?<\/a> \u2014 \u041d\u0430 \u044d\u0442\u043e\u0442 \u0438 <a href=\"https:\/\/www.youtube.com\/watch?v=Gux2i9_A22c&amp;list=PLCYlUTOY-57U3BlvsxEWzdmh_f7HHSAZu\" rel=\"nofollow\">\u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043b\u0438\u0434\u0435\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Laminas \u2014 <a href=\"https:\/\/twitter.com\/mwop\" rel=\"nofollow\">Matthew Weier O&#8217;Phinney<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/asgrim\/mini-mezzio\" rel=\"nofollow\">asgrim\/mini-mezzio<\/a> \u2014 \u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/mezzio\/mezzio\" rel=\"nofollow\">Mezzio<\/a> (\u044d\u043a\u0441 Zend Expressive).<\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/73\/2r\/pq\/732rpqll-yvu0hrtaw6yeism-de.png\" width=\"20\"> Async PHP<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/badfarm\/zanzara\" rel=\"nofollow\">badfarm\/zanzara<\/a> \u2014 \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Telegram-\u0431\u043e\u0442\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 ReactPHP.<\/li>\n<li><a href=\"https:\/\/github.com\/simple-swoole\/simps\" rel=\"nofollow\">simple-swoole\/simps<\/a> \u2014 \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 \u0431\u0430\u0437\u0435 Swoole. \u0421\u0443\u0434\u044f \u043f\u043e <a href=\"https:\/\/github.com\/the-benchmarker\/web-frameworks#results\" rel=\"nofollow\">\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c<\/a> \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438\u0437 PHP.<\/li>\n<li><img decoding=\"async\" alt=\"video\" src=\"https:\/\/habrastorage.org\/webt\/qz\/or\/43\/qzor43-o-hxqow_k8lsqlmniblm.png\" width=\"14\"> <a href=\"https:\/\/beyondco.de\/video-courses#:~:text=Learning%20ReactPHP\" rel=\"nofollow\">\u0412\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e ReactPHP \u043e\u0442 Marcel Pociot<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/329\/bec\/7c1\/329bec7c1e914963a1c5d2f2bfe99995.png\" width=\"20\"> \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/aws.amazon.com\/blogs\/compute\/introducing-the-new-serverless-lamp-stack\/\" rel=\"nofollow\">\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043b\u0435\u0441\u0441 LAMP \u0441\u0442\u0435\u043a<\/a> \u2014 \u041f\u043e\u0441\u0442 \u0432 \u0431\u043b\u043e\u0433\u0435 AWS \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 PHP \u0438 <a href=\"https:\/\/github.com\/aws-samples\/php-examples-for-aws-lambda\/blob\/master\/serverless-php-resources.md\" rel=\"nofollow\">\u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/a> \u043f\u043e \u0442\u0435\u043c\u0435. <br \/>  \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f PhpStorm \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/11349-aws-toolkit\" rel=\"nofollow\">AWS Toolkit<\/a> \u043e\u0442 Amazon.<\/li>\n<li><a href=\"https:\/\/stitcher.io\/blog\/constructor-promotion-in-php-8\" rel=\"nofollow\">\u041e\u0431 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0432 PHP 8<\/a>.<\/li>\n<li><a href=\"https:\/\/thephp.website\/en\/issue\/most-used-php-functions\/\" rel=\"nofollow\">\u041a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 PHP \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445?<\/a> \u2014 \u0412 Symfony \u044d\u0442\u043e <code>sprintf()<\/code>, \u0432 Laravel \u2014 <code>is_null()<\/code>. \u0410\u0432\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b <a href=\"https:\/\/github.com\/nawarian\/The-PHP-Website\/tree\/master\/code\/15-framework-functions\/\" rel=\"nofollow\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e<\/a>, \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432.<\/li>\n<li><a href=\"https:\/\/medium.com\/swlh\/final-classes-in-php-9174e3e2747e\" rel=\"nofollow\">\u041e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0432 PHP<\/a>.<\/li>\n<li><img decoding=\"async\" alt=\"habr\" src=\"https:\/\/habrastorage.org\/webt\/-u\/wa\/el\/-uwael5b7b4s2zu-db-7p8iytxg.png\" width=\"12\"> <a href=\"https:\/\/habr.com\/ru\/post\/506346\/\">\u041c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430 \u043c\u0435\u0441\u044f\u0446<\/a>: \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u0442\u0430\u043f \u0432 \u0415\u0432\u0440\u043e\u043f\u0435 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438.<\/li>\n<li><img decoding=\"async\" alt=\"habr\" src=\"https:\/\/habrastorage.org\/webt\/-u\/wa\/el\/-uwael5b7b4s2zu-db-7p8iytxg.png\" width=\"12\"> <a href=\"https:\/\/habr.com\/ru\/company\/manychat\/blog\/507136\/\">Redis \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a>.<\/li>\n<li><img decoding=\"async\" alt=\"habr\" src=\"https:\/\/habrastorage.org\/webt\/-u\/wa\/el\/-uwael5b7b4s2zu-db-7p8iytxg.png\" width=\"12\"> <a href=\"https:\/\/habr.com\/ru\/post\/505736\/\">\u0411\u0435\u0433\u0438, PHPUnit, \u0431\u0435\u0433\u0438<\/a>: \u043a\u0430\u043a \u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432.<\/li>\n<li><img decoding=\"async\" alt=\"habr\" src=\"https:\/\/habrastorage.org\/webt\/-u\/wa\/el\/-uwael5b7b4s2zu-db-7p8iytxg.png\" width=\"12\"> <a href=\"https:\/\/habr.com\/ru\/post\/504720\/\">\u0421\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f PHP<\/a>.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8dc\/c23\/677\/8dcc236774104f8286a40ceaea553820.png\" width=\"20\"> \u0410\u0443\u0434\u0438\u043e\/\u0412\u0438\u0434\u0435\u043e<\/h3>\n<p>  <\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"video\" src=\"https:\/\/habrastorage.org\/webt\/qz\/or\/43\/qzor43-o-hxqow_k8lsqlmniblm.png\" width=\"14\"> <a href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/487264\/\">\u0412\u0438\u0434\u0435\u043e\u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435\u0445 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u0432 \u0441 PHP Russia 2020 Online<\/a><\/li>\n<li><img decoding=\"async\" alt=\"video\" src=\"https:\/\/habrastorage.org\/webt\/qz\/or\/43\/qzor43-o-hxqow_k8lsqlmniblm.png\" width=\"14\"><img decoding=\"async\" alt=\"ru\" src=\"https:\/\/habrastorage.org\/webt\/v2\/r1\/ak\/v2r1ake6qijxftbralm4knou9ck.png\" width=\"12\"> <a href=\"https:\/\/www.youtube.com\/watch?v=K_H1EweYmFU\" rel=\"nofollow\">\u041c\u0430\u043a\u0441 \u0420\u0430\u0444\u0430\u043b\u043a\u043e, \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 PHP<\/a><\/li>\n<li><img decoding=\"async\" alt=\"video\" src=\"https:\/\/habrastorage.org\/webt\/qz\/or\/43\/qzor43-o-hxqow_k8lsqlmniblm.png\" width=\"14\"><img decoding=\"async\" alt=\"ru\" src=\"https:\/\/habrastorage.org\/webt\/v2\/r1\/ak\/v2r1ake6qijxftbralm4knou9ck.png\" width=\"12\"> \u0421\u0442\u0440\u0438\u043c \u041f\u044f\u0442\u0438\u043c\u0438\u043d\u0443\u0442\u043a\u0430 PHP \u043f\u043e Laravel Livewire: <a href=\"https:\/\/www.youtube.com\/watch?v=SoOcZDRCmFI\" rel=\"nofollow\">\u0441\u0435\u0442\u0435\u0432\u0430\u044f \u0438\u0433\u0440\u0430 (\u0447\u0430\u0441\u0442\u044c 5)<\/a><\/li>\n<li><img decoding=\"async\" alt=\"audio\" src=\"https:\/\/habrastorage.org\/webt\/d1\/ma\/lh\/d1malhabo7kf3wgh3xm03mcgdim.png\" width=\"12\"><img decoding=\"async\" alt=\"ru\" src=\"https:\/\/habrastorage.org\/webt\/v2\/r1\/ak\/v2r1ake6qijxftbralm4knou9ck.png\" width=\"12\"> <a href=\"https:\/\/soundcloud.com\/between-braces\/9-aleksandr-lisachenko-aop-v-php\" rel=\"nofollow\">\u041c\u0435\u0436\u0434\u0443 \u0441\u043a\u043e\u0431\u043e\u043a \u2116 9<\/a>: \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u041b\u0438\u0441\u0430\u0447\u0435\u043d\u043a\u043e \u2014 \u0410\u041e\u041f \u0432 PHP.<\/li>\n<li><img decoding=\"async\" alt=\"audio\" src=\"https:\/\/habrastorage.org\/webt\/d1\/ma\/lh\/d1malhabo7kf3wgh3xm03mcgdim.png\" width=\"12\"> <a href=\"https:\/\/phpinternals.news\/58\" rel=\"nofollow\">PHP Internals News #58<\/a> \u2014 C <a href=\"https:\/\/github.com\/MaxSem\" rel=\"nofollow\">Max Semenik<\/a> \u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u043c <a href=\"https:\/\/wiki.php.net\/rfc\/non-capturing_catches\" rel=\"nofollow\">RFC non-capturing catches<\/a>.<\/li>\n<li><img decoding=\"async\" alt=\"audio\" src=\"https:\/\/habrastorage.org\/webt\/d1\/ma\/lh\/d1malhabo7kf3wgh3xm03mcgdim.png\" width=\"12\"> <a href=\"https:\/\/phpinternals.news\/57\" rel=\"nofollow\">PHP Internals News #57<\/a> \u2014 C <a href=\"https:\/\/twitter.com\/ralphschindler\" rel=\"nofollow\">Ralph Schindler<\/a> \u043e \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>return if ($condition): $returnValue;<\/code>.<\/li>\n<li><img decoding=\"async\" alt=\"audio\" src=\"https:\/\/habrastorage.org\/webt\/d1\/ma\/lh\/d1malhabo7kf3wgh3xm03mcgdim.png\" width=\"12\"> <a href=\"https:\/\/phpinternals.news\/56\" rel=\"nofollow\">PHP Internals News #56<\/a> \u2014 \u0421 <a href=\"https:\/\/twitter.com\/MrDanack\" rel=\"nofollow\">Dan Ackroyd<\/a> \u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c <a href=\"https:\/\/t.me\/phpdigest\/147\" rel=\"nofollow\">\u043f\u0441\u0435\u0432\u0434\u043e\u0442\u0438\u043f\u0435 mixed<\/a>.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u2014 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432 <a href=\"https:\/\/habrahabr.ru\/conversations\/pronskiy\/\" rel=\"nofollow\">\u043b\u0438\u0447\u043a\u0443<\/a>.<br \/>  \u0412\u043e\u043f\u0440\u043e\u0441\u044b \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u0448\u0438\u0442\u0435 \u043d\u0430 <a href=\"mailto:roman@pronskiy.com\">\u043f\u043e\u0447\u0442\u0443<\/a> \u0438\u043b\u0438 \u0432 <a href=\"https:\/\/twitter.com\/pronskiy\" rel=\"nofollow\">\u0442\u0432\u0438\u0442\u0442\u0435\u0440<\/a>.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0432 Telegram-\u043a\u0430\u043d\u0430\u043b\u0435 <strong><a href=\"https:\/\/t.me\/phpdigest\" rel=\"nofollow\">PHP Digest<\/a><\/strong>.<\/p>\n<p>  <a href=\"https:\/\/bit.ly\/php-digest-add-link\" rel=\"nofollow\">\u041f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443<\/a><br \/>   <a href=\"https:\/\/pronskiy.com\/php-digest\/\" rel=\"nofollow\">\u041f\u043e\u0438\u0441\u043a \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e \u0432\u0441\u0435\u043c \u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442\u0430\u043c<\/a><br \/>   \u2190 <a href=\"https:\/\/habr.com\/ru\/post\/504734\/\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0432\u044b\u043f\u0443\u0441\u043a: PHP-\u0414\u0430\u0439\u0434\u0436\u0435\u0441\u0442 \u2116 181<\/a>  <\/p>\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\/post\/507636\/\"> https:\/\/habr.com\/ru\/post\/507636\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/507636\/\"><a href=\"https:\/\/habr.com\/ru\/post\/507636\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dd5\/3c3\/3b2\/dd53c33b2a501f4727f6929a1e3a2318.jpg\"><\/div>\n<p><\/a>  <\/p>\n<p>\u0421\u0432\u0435\u0436\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b. \u0412 \u0432\u044b\u043f\u0443\u0441\u043a\u0435: 3 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0438 6 \u043d\u043e\u0432\u044b\u0445 RFC-\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 PHP Internals, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u2014 <code>@@<\/code> \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 <code>#[]<\/code> \u0431\u044b\u043b \u0431\u044b \u043b\u0443\u0447\u0448\u0435, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f black\/whitelist \u0432 PHP-\u043c\u0438\u0440\u0435, \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u044e\u0442 PHP-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0430\u043d\u0430\u043b\u043e\u0433 ngrok \u043d\u0430 PHP, \u0432\u0438\u0434\u0435\u043e, \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u044b \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!<\/p>\n<p>  <\/p>\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-305718","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/305718","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=305718"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/305718\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305718"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=305718"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=305718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}