{"id":321409,"date":"2021-04-14T09:00:18","date_gmt":"2021-04-14T09:00:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=321409"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=321409","title":{"rendered":"PhpStorm 2021.1: \u043f\u0440\u0435\u0432\u044c\u044e PHP- \u0438 HTML-\u0444\u0430\u0439\u043b\u043e\u0432, 20+ \u043d\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0439 \u0438 \u043f\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 Code With Me"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/g3\/hq\/00\/g3hq000lzktlbq0tyfxt2fhiybe.png\"><\/a><\/p>\n<p>  \u0420\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 PhpStorm \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443! \u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438 \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>PHP<\/h2>\n<p>  <\/p>\n<ul>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#preview_php_and_html_files_in_the_editor\">\u041f\u0440\u0435\u0432\u044c\u044e PHP- \u0438 HTML-\u0444\u0430\u0439\u043b\u043e\u0432<\/a> \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 PHP.   <\/li>\n<li> \u0411\u043e\u043b\u0435\u0435 20 <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#inspections_and_quick_fixes\">\u043d\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0439 \u0434\u043b\u044f PHP<\/a>.   <\/li>\n<li> \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#locate_php_settings_more_easily\">\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a PHP<\/a>, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u2014 \u0432 Settings \/ Preferences.   <\/li>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#set_the_php_language_level_in_the_status_bar\">\u0412\u0435\u0440\u0441\u0438\u044f PHP \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0432\u044f\u0437\u0430\u043d\u0430<\/a> \u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 composer.json.   <\/li>\n<li> \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#better_automatic_language_injection\">\u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445<\/a> SQL, RegExp \u0438 \u0442. \u043f. \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.   <\/li>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#use_table_prefixes_in_sql_queries\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u043c\u0435\u043d \u0442\u0430\u0431\u043b\u0438\u0446 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u043c\u0438 \u0432 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445<\/a> \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 CMS.   <\/li>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#synthetic_scope_for_better_refactoring\">\u0421\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043a\u043e\u0443\u043f \u0432 \u0446\u0438\u043a\u043b\u0430\u0445<\/a> \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u043e\u0432.   <\/li>\n<\/ul>\n<p>  <\/p>\n<h2>IDE<\/h2>\n<p>  <\/p>\n<ul>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#maximize_tabs_in_split_view\">\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u043e\u043a<\/a> \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Split \u043f\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u043c\u0443 \u043a\u043b\u0438\u043a\u0443 \u043f\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435.   <\/li>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#jsonpath_support\">\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 JSONPath<\/a> \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c JSON-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c.   <\/li>\n<li> \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#json_lines_format_support\">JSON Lines<\/a>.   <\/li>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#typography_settings\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/a> \u0432 <em>Preferences | Editor | Font<\/em>.   <\/li>\n<\/ul>\n<p>  <\/p>\n<h2>Docker<\/h2>\n<p>  <\/p>\n<ul>\n<li> \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#image_completion_in_dockerfiles\">\u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/a> \u0432 Dockerfile.   <\/li>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#folding_in_multi_stage_dockerfiles\">\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435<\/a> \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 Dockerfile.   <\/li>\n<\/ul>\n<p>  <\/p>\n<h2>Version Control<\/h2>\n<p>  <\/p>\n<ul>\n<li> \u041c\u044b \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#github_pull_request_improvements\">\u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432 GitHub<\/a> \u2014 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0438\u0437 IDE \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0449\u0435.   <\/li>\n<\/ul>\n<p>  <\/p>\n<h2>Code With Me<\/h2>\n<p>  <\/p>\n<ul>\n<li> <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/#code_with_me\">\u041d\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 JetBrains<\/a> \u0434\u043b\u044f \u043f\u0430\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 PhpStorm \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. Code With Me \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0430\u0443\u0434\u0438\u043e- \u0438 \u0432\u0438\u0434\u0435\u043e\u0437\u0432\u043e\u043d\u043a\u0438 \u0438 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440.   <\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/www.jetbrains.com\/ru-ru\/phpstorm\/whatsnew\/\">\u0421\u043a\u0430\u0447\u0430\u0442\u044c PhpStorm 2021.1<\/a> \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0438\u043b\u0438 \u0432 <a href=\"https:\/\/www.jetbrains.com\/ru-ru\/toolbox-app\/\">Toolbox App<\/a>.<\/p>\n<p>  \u042d\u0442\u043e \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u043c.<\/p>\n<h1>PHP<\/h1>\n<p><a name=\"set_the_php_language_level_in_the_status_bar\"><\/a>  <\/p>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 PHP \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440<\/h3>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 PHP \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412 2021.1 \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432 <code>composer.json<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 PHP.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7b8\/30d\/36e\/7b830d36eb2e2bdf85ad3ae81e34451c.gif\" width=\"600\"><\/p>\n<p>  <a name=\"locate_php_settings_more_easily\"><\/a>  <\/p>\n<h3>\u041b\u0435\u0433\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a PHP<\/h3>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 PHP, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 <em>Settings \/ Preferences | PHP<\/em>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7b7\/02e\/e63\/7b702ee63590a53dd172d9a0e60cafcb.png\" width=\"600\"><\/p>\n<p>  <a name=\"preview_php_and_html_files_in_the_editor\"><\/a>  <\/p>\n<h3>\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 PHP- \u0438 HTML-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435<\/h3>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432. \u041f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u043a\u043e\u043d\u043a\u0430 PhpStorm. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043d\u0435\u0435 \u0444\u0430\u0439\u043b \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435.<\/p>\n<p>  \u041f\u0440\u0435\u0432\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 HTML- \u0438 PHP-\u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 CSS- \u0438 JavaScript-\u0444\u0430\u0439\u043b\u0430\u043c\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a6f\/1cd\/0b8\/a6f1cd0b85800deba5bca6fa406f5326.gif\" width=\"810\"><\/p>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u0438 \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u2014 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  PhpStorm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <strong>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 PHP,<\/strong> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 <em>Settings\/Preferences | PHP<\/em>. Docker \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u043a\u043e\u043d\u043e\u043a \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043d\u0435\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <em>Preferences | Tools | Web Browsers <\/em>\u0432\u044b\u0431\u0440\u0430\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d \u0447\u0435\u043a\u0431\u043e\u043a\u0441 <em>For HTML files<\/em>.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u043f\u0440\u0435\u0432\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 Alt+F2.<\/p>\n<p>  <a name=\"use_table_prefixes_in_sql_queries\"><\/a>  <\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445<\/h3>\n<p>  \u041c\u043d\u043e\u0433\u0438\u0435 CMS \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0420\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0411\u0414, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/www.jetbrains.com\/help\/phpstorm\/ide-advanced-metadata.html\">.phpstorm.meta.php<\/a>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043c\u0435\u0442\u0430\u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u043e \u0442\u043e\u043c, <strong>\u043a\u0430\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0442\u0430\u0431\u043b\u0438\u0446<\/strong>, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"https:\/\/www.jetbrains.com\/help\/phpstorm\/2021.1\/ide-advanced-metadata.html#legacy-metadata-format-deprecated\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0445\u0435\u043b\u043f\u0430<\/a>.<\/p>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 Drupal:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/65b\/51d\/b5b\/65b51db5b884515bf9b72ed70acb16cd.png\" width=\"600\"><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ae4\/24b\/59d\/ae424b59d8f0371274692f24498b2956.png\" width=\"600\"><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, PhpStorm \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u044c \u043d\u0438 \u0438\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0438 \u0438\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Drupal.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0439\u043b <code>.phpstorm.meta.php<\/code> \u0441 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code class=\"php\">namespace PHPSTORM_META {  override(   \/\/ \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0437\u0430\u043c\u0435\u043d \u0432 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445    sql_injection_subst(),    map([      '{' =&gt; &quot;PS2021_&quot;, \/\/ \u0432\u0441\u0435 `{` \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 SQL \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441      '}' =&gt; '',       \/\/ \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b `}` \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439    ])); }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c PhpStorm \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ff1\/90f\/2fd\/ff190f2fdd3a2aca6eb2c0e74c14ce5d.gif\" width=\"624\"><\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e, \u0442\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"php\">&lt;?php const DB_PREFIX = &quot;mydatabase_&quot;; $sql = &quot;SELECT * FROM &quot; . DB_PREFIX . 'table_name';<\/code><\/pre>\n<p>  <a name=\"inspections_and_quick_fixes\"><\/a>  <\/p>\n<h2>\u0418\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u0438 \u043a\u0432\u0438\u043a-\u0444\u0438\u043a\u0441\u044b<\/h2>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 20 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u043a\u0432\u0438\u043a-\u0444\u0438\u043a\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u0440\u0430\u043d\u043d\u0438\u0445 \u0441\u0442\u0430\u0434\u0438\u044f\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0439 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432 <em>Settings \/ Preferences | Editor | Inspections<\/em>.<\/p>\n<p>  \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0430 \u043d\u0435\u0435 \u043a\u0443\u0440\u0441\u043e\u0440, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Alt+Enter \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0444\u0438\u043a\u0441.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f\u0445.<\/p>\n<h3>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 `if` \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0442\u0435\u043b\u0430\u043c\u0438<\/h3>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 <code>if<\/code> \u0438 <code>else<\/code> \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u0438\u0445 \u0442\u0435\u043b\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438.<\/p>\n<p>  PhpStorm \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0438\u0445 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/63c\/2d2\/b12\/63c2d2b12e2a4e778c43d1d7302b8fec.gif\" width=\"600\"><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d8e\/604\/198\/d8e6041980684f53adf717165cf99b27.gif\" width=\"600\"><\/p>\n<p>  \u041f\u0440\u0438\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0442\u0435\u043b\u0430, PhpStorm \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c17\/ec5\/9aa\/c17ec59aa6add7397b0437dd1af155bd.gif\" width=\"600\"><\/p>\n<h3>\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f `if`<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c Alt+Enter \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e <code>if<\/code>, \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <em>\u201cInvert `if` statement\u201d<\/em>. \u041e\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435 \u0438 \u0432\u043d\u043e\u0441\u0438\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u0440\u0430\u043d\u043d\u0438\u0439 return<\/strong>, \u0442\u043e \u044d\u0442\u0430 \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u043c \u043f\u0440\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u043a\u043e\u0434\u0430.<\/p>\n<p>  <a href=\"https:\/\/szymonkrajewski.pl\/why-should-you-return-early\/#two-approaches-to-check-requirements\">\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/a>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d9\/ce2\/228\/0d9ce2228a8911d252fbf9b4e6335b8f.gif\" width=\"624\"><\/p>\n<p>  \u0412 \u0446\u0438\u043a\u043b\u0430\u0445 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4cd\/b6b\/632\/4cdb6b6329a4483efc228cd3639af542.gif\" width=\"600\"><\/p>\n<h3>\u0417\u0430\u043c\u0435\u043d\u0430 `isset` \u043d\u0430 ??<\/h3>\n<p>  \u041a\u043e\u0434 <code>isset($a) ? $a : $b;<\/code> \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d <code>$a ?? $b<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \u0435\u0433\u043e \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u043a\u0432\u0438\u043a-\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e87\/53b\/07d\/e8753b07d44f1c587c13f23a8fc30c37.gif\" width=\"600\"><\/p>\n<blockquote><p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014\u00a0\u0442\u0430\u043a \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u0435\u0437\u0434\u0435, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432 \u043c\u0435\u043d\u044e <em>Code | Run Inspection by Name&#8230;<\/em> \u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <em>`isset` can be replaced with coalesce<\/em>. \u0412\u0441\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u043f\u043e\u0438\u0441\u043a\u0430.  <\/p><\/blockquote>\n<p>  <\/p>\n<h3>\u0417\u0430\u043c\u0435\u043d\u0430 `isset` \u043d\u0430 `!== null`<\/h3>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>isset()<\/code> \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u043d\u0430 <code>null<\/code>.<\/p>\n<p>  PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Alt+Enter \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>isset()<\/code> \u043d\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 <code>null<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b4a\/6ea\/6c1\/b4a6ea6c140bf0e6d3d0aa3e95276709.png\" width=\"600\"><\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432 `foreach` \u0437\u0430\u0442\u0438\u0440\u0430\u0435\u0442 \u0443\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0446\u0438\u043a\u043b\u0435 <code>foreach<\/code> \u043c\u043e\u0433\u0443\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e PHP \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u043e\u043f\u0440\u0435\u043a\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c.<\/p>\n<p>  PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0431\u0430\u0433\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e9d\/87f\/089\/e9d87f089a11285cc2ab391ba27969c9.png\" width=\"600\"><\/p>\n<h3>\u041d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a<\/h3>\n<p>  PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044f \u0432\u0430\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u0447\u0438\u0449\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/df7\/61a\/692\/df761a692e74f327ca517fb77bbac25c.gif\" width=\"600\"><\/p>\n<h3>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u0443\u043b\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b <code>true<\/code> \u0438\u043b\u0438 <code>false<\/code>, \u0442\u043e \u0435\u0433\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c.<\/p>\n<p>  PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Alt+Enter.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/07d\/bc3\/9f7\/07dbc39f77a6a1005fdfa46f6e8f76db.gif\" width=\"600\"><\/p>\n<h3>\u0421\u0442\u0440\u043e\u0433\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 <\/h3>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>===<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0435\u0440\u043d\u0435\u0442 <code>false<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u043e \u0442\u0438\u043f\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3aa\/e24\/6d0\/3aae246d0d540fc97aeb08db0d7ccee9.gif\" width=\"600\"><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0431\u0430\u0433\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c PhpStorm \u0443\u0447\u0442\u0435\u0442 \u0432\u0441\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043d\u0435 \u0441\u0430\u043c\u044b\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0c9\/ce9\/c63\/0c9ce9c6301430736897d11b06651f48.png\" width=\"600\"><\/p>\n<h3>\u041d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 http:\/\/<\/h3>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 <code>http:\/\/<\/code> \u0432 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. IDE \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043a\u0432\u0438\u043a-\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044b <code>http:\/\/ <\/code>\u043d\u0430 <code>https:\/\/ <\/code>(\u043f\u043e Alt-Enter). \u0422\u0430\u043a\u0436\u0435 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c URL \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/177\/385\/341\/17738534197e8ee41fd7497042aa7219.gif\" width=\"600\"><\/p>\n<h3>\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0438\u043c\u0435\u043d <\/h3>\n<p>  PhpStorm \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>$needle<\/code> \u0438 <code>$haystack<\/code> \u0438\u043b\u0438 <code>$x<\/code> \u0438 <code>$y<\/code>.<\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u0431\u0430\u0433\u0430 \u043b\u0438\u0431\u043e, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043e\u0447\u0435\u043d\u044c \u043f\u0443\u0442\u0430\u044e\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b08\/ef8\/0fb\/b08ef80fb7e8c459db6cc550899f44d9.png\" width=\"600\"><\/p>\n<h3>\u0417\u0430\u043c\u0435\u043d\u0430 `define` \u043d\u0430 `const`<\/h3>\n<p>  PhpStorm \u0432\u044b\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 <code>define<\/code> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043b\u0435\u0433\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <code>const<\/code>. C \u043f\u043e\u043c\u043e\u0449\u044c\u044e Alt+Enter \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/08b\/0eb\/162\/08b0eb16210fa849b62a4f28d37eb6bc.png\" width=\"600\"><br \/>  <a name=\"configure_pre_commit_inspections\"><\/a>  <\/p>\n<h2>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c \u0432 Git.<\/p>\n<p>  \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a \u0448\u0435\u0441\u0442\u0435\u0440\u0435\u043d\u043a\u0438, \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 \u0447\u0435\u043a\u0431\u043e\u043a\u0441 <em>Analyze code<\/em>, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 <em>Configure<\/em> \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a6f\/5c4\/b51\/a6f5c4b5141208ee9deaeb2b074af912.png\" width=\"800\"><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0432 <em>Settings \/ Preferences | Editor | Inspections<\/em>.<\/p>\n<h2>\u041f\u0440\u043e\u0447\u0435\u0435<\/h2>\n<p><a name=\"synthetic_scope_for_better_refactoring\"><\/a>  <\/p>\n<h3>\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u043e\u0443\u043f \u0434\u043b\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430<\/h3>\n<p>  \u0426\u0438\u043a\u043b\u044b <code>foreach<\/code>, <code>for<\/code>, <code>while<\/code> \u0438 \u0431\u043b\u043e\u043a\u0438 <code>catch<\/code> \u0432 PHP \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430.<\/p>\n<p>  \u0412 PhpStorm 2021.1 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u043e\u0443\u043f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Rename (Shift+F6) \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u044b\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d94\/fc8\/d26\/d94fc8d2630598517385d626d3c10a23.gif\" width=\"624\"><\/p>\n<p>  <a name=\"better_automatic_language_injection\"><\/a>  <\/p>\n<h3>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430<\/h3>\n<p>  \u041f\u0440\u043e\u0448\u043b\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 PhpStorm \u0443\u043c\u0435\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u044f\u0437\u044b\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>preg_*<\/code>, \u043e\u043d\u0430 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041d\u043e \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0442\u043e \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  PhpStorm 2021.1 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0443\u043c\u0435\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7c4\/5e7\/61b\/7c45e761b576282b5e3937613f556dc4.gif\" width=\"600\"><\/p>\n<p>  <a name=\"extensions_in_the_suggest_section_of_composer_json\"><\/a>  <\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 `suggest` \u0432 composer.json<\/h3>\n<p>  \u0412 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 PHP. \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 PhpStorm \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u0438 \u044d\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <code>require<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 <code>composer.json<\/code>.<\/p>\n<p>  PhpStorm 2021.1 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 `require`, \u043d\u043e \u0438 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 `suggest`.<\/p>\n<p>  \u0415\u0449\u0435 \u0432\u0430\u0436\u043d\u0435\u0435 \u0442\u043e, \u0447\u0442\u043e PhpStorm \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432 <code>suggest<\/code> \u0432 <code>composer.json<\/code>, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0442\u0438\u043f\u0430 <code>extension_loaded()<\/code> \u0438\u043b\u0438 <code>function_exists()<\/code>.<\/p>\n<p>  \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0432\u0438\u043a-\u0444\u0438\u043a\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432 <code>require\/require-dev.<\/code><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c51\/bc5\/ce7\/c51bc5ce775819194548b9948c394814.gif\" width=\"624\"><\/p>\n<h2>\u0412\u0430\u0436\u043d\u044b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u041c\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 2400 \u0442\u0438\u043a\u0435\u0442\u043e\u0432, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043d\u0430\u0448\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 JetBrains \u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0435 PhpStorm. \u0412\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445:  <\/p>\n<ul>\n<li> \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432 WSL 2 \u0447\u0435\u0440\u0435\u0437 Docker (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WI-53396\">WI-53396<\/a>).   <\/li>\n<li> Quality tools \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0443\u0442\u0438 \u0441 docker-compose \u0432 exec-\u0440\u0435\u0436\u0438\u043c\u0435 (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WI-55840\">WI-55840<\/a>).   <\/li>\n<li> \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u0444\u0430\u0439\u043b\u044b PHP (5000 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435) \u0441\u0442\u0430\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WI-31569\">WI-31569<\/a>).   <\/li>\n<li> \u0417\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u0430\u043b\u0438\u0430\u0441\u0430\u043c\u0438 (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WI-58306\">WI-58306<\/a>).   <\/li>\n<\/ul>\n<p>  <a name=\"code_with_me\"><\/a>  <\/p>\n<h2>Code With Me<\/h2>\n<p>  <a href=\"https:\/\/www.jetbrains.com\/code-with-me\/\">Code With Me<\/a> \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 JetBrains \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043f\u0430\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0435\u0433\u043e \u0432 PhpStorm 2020.3. \u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0431\u044b\u043b \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7b1\/918\/4ba\/7b19184ba1b1a99419a80a797bef4a51.gif\" width=\"810\"><\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0433\u0438\u0431\u043a\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0434\u043b\u044f \u0441\u043e\u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u043e\u0441\u0442\u044f\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c IDE \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u043a\u0430\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  \u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0435 \u0438 \u0432\u0438\u0434\u0435\u043e\u0437\u0432\u043e\u043d\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440.<\/p>\n<p>  \u042d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 <a href=\"https:\/\/www.jetbrains.com\/code-with-me\/on-prem\">\u0441\u0435\u0440\u0432\u0435\u0440 Code With Me<\/a> \u0432 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e Code With Me \u0447\u0438\u0442\u0430\u0439\u0442\u0435 <a href=\"https:\/\/www.jetbrains.com\/code-with-me\/\">\u043d\u0430 \u0441\u0430\u0439\u0442\u0435 JetBrains<\/a>.<\/p>\n<h2>IDE<\/h2>\n<p><a name=\"maximize_tabs_in_split_view\"><\/a>  <\/p>\n<h3>\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u043e\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Split<\/h3>\n<p>  \u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u0430\u0434\u043e\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Split \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0443\u0432 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0443\u0433\u043e\u043b \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 <strong>\u0434\u0432\u0430\u0436\u0434\u044b \u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0435\u0435. \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0432 \u043f\u0440\u0435\u0436\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u043a\u043b\u0438\u043a\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/034\/5ba\/d6e\/0345bad6e33a1057cbdf119b6c303c02.gif\" width=\"624\"><\/p>\n<p>  <a name=\"jsonpath_support\"><\/a>  <\/p>\n<h3>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 JSONPath<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b JSONPath \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c JSON-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <em>Edit | Find | Evaluate JSONPath<\/em>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0e5\/26c\/5a2\/0e526c5a2ecf59fb80d3e225ef92eca6.png\" width=\"600\"><\/p>\n<p>  <a name=\"json_lines_format_support\"><\/a>  <\/p>\n<h3>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 JSON Lines<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c PhpStorm \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 <a href=\"https:\/\/jsonlines.org\/\">JSON Lines<\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043b\u043e\u0433\u0430\u043c\u0438. IDE \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b <em>.jsonl<\/em>, <em>.jslines<\/em>, <em>.ldjson<\/em> \u0438 <em>.ndjson<\/em>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d5d\/f34\/ca9\/d5df34ca997dc33e8dda2f151c74ddc2.png\" width=\"600\"><\/p>\n<p>  <a name=\"typography_settings\"><\/a>  <\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u043a\u0438 <\/h3>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438 \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u0448\u0440\u0438\u0444\u0442\u044b. \u041d\u043e\u0432\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <em>Typography Settings<\/em> \u0432 <em>Settings \/ Preferences | Editor | Fonts<\/em>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/701\/5b9\/f3b\/7015b9f3b60cb0ec40e0eb394b041443.gif\" width=\"800\"><\/p>\n<h2>Docker<\/h2>\n<p><a name=\"image_completion_in_dockerfiles\"><\/a>  <\/p>\n<h3>\u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432 Dockerfile<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0438\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430, \u0438 PhpStorm \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0432\u0430\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u0430 Docker Hub:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f51\/d01\/76d\/f51d0176d174b6587d3e43a014391759.gif\" width=\"600\"><br \/>  <a name=\"folding_in_multi_stage_dockerfiles\"><\/a>  <\/p>\n<h3>\u0421\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 Dockerfile<\/h3>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 Dockerfile \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 <code>FROM<\/code> \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0438\u0437 \u043d\u0438\u0445, \u0438 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043b\u0438\u043d\u0438\u0435\u0439 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c35\/946\/653\/c359466537f304c0d539482297d4873e.gif\" width=\"600\"><\/p>\n<h3>Cancel Docker run<\/h3>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e Dockerfile \u0438\u0437 \u043e\u043a\u043d\u0430 <em>Services<\/em>. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Stop Deploy<\/em> \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  <a name=\"github_pull_request_improvements\"><\/a>  <\/p>\n<h2>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432 GitHub<\/h2>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a \u00ab+\u00bb \u0432 \u043e\u043a\u043d\u0435 <em>Pull Requests<\/em> \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u043c\u0435\u043d\u044e \u200e<em>Git | GitHub | Create Pull Request<\/em>.<\/p>\n<p>  \u0412 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u043c\u043e\u0436\u043d\u043e:  <\/p>\n<ul>\n<li> \u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0438 head-\u0432\u0435\u0442\u043a\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0435\u0442\u043e\u043a.   <\/li>\n<li> \u041f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Files.   <\/li>\n<li> \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0435\u0432\u044c\u044e\u0435\u0440\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u0433\u0438.   <\/li>\n<li> \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0438 \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432.   <\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/79f\/117\/256\/79f11725600bff7fca03013e6b11413d.gif\" width=\"624\"><\/p>\n<p>  PhpStorm 2021.1 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u0430\u0439\u043b <code>pull_requst_template.md<\/code> \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0432 \u043d\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u2014 \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442, \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<h3>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f Git-\u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432<\/h3>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0438\u0442\u0430 PhpStorm \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <code>commit.template<\/code> \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Git.<\/p>\n<h2>HTTP-\u043a\u043b\u0438\u0435\u043d\u0442<\/h2>\n<p><a name=\"support_for_ssl\"><\/a>  <\/p>\n<h3>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 SSL<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SSL \u0432 HTTP-\u043a\u043b\u0438\u0435\u043d\u0442\u0435. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Add environment file<\/em> \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Private<\/em>. \u0411\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 SSL: <code>clientCertificate<\/code>, <code>hasCertificatePassphrase<\/code>, <code>clientCertificateKey<\/code>, <code>verifyHostCertificate<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/553\/7ef\/04b\/5537ef04bcb71f762fcd22b88c4d7e38.gif\" width=\"600\"><\/p>\n<p>  <a name=\"swagger_improvements\"><\/a>  <\/p>\n<h2>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f OpenAPI \/ Swagger<\/h2>\n<p>  \u0412 PhpStorm \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 OpenAPI \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 Swagger UI.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 Swagger UI \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 <code>$ref<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4a8\/dfe\/474\/4a8dfe474c2b483892e19b271bb361df.gif\" width=\"600\"><\/p>\n<h2>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0411\u0414<\/h2>\n<p>  PhpStorm \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <a href=\"https:\/\/www.jetbrains.com\/datagrip\/\">DataGrip<\/a>: \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b Live Templates, \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0443\u044e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/550250\/\">\u043e\u0431\u0437\u043e\u0440\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 DataGrip 2021.1<\/a> \u043e\u0442 \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433.<\/p>\n<h2>\u0412\u0435\u0431<\/h2>\n<p>  \u0418 \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0432 PhpStorm \u0432\u043e\u0448\u043b\u0438 <a href=\"https:\/\/www.jetbrains.com\/ru-ru\/webstorm\/whatsnew\/\">\u0432\u0441\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437 WebStorm 2021.1<\/a>: \u0431\u043e\u043b\u0435\u0435 \u0443\u043c\u043d\u043e\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f JavaScript \u0438 TypeScript, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Stylelint \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<hr>\n<p>  \u0410 \u0432\u043e\u0442 \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a (\u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c), \u0433\u0434\u0435 \u043c\u044b \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0444\u0438\u0447\u0438 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430:<\/p>\n<div class=\"oembed\"><iframe allowfullscreen id=\"6076a39993c5636d47c919b6\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/6076a39993c5636d47c919b6\"><\/iframe><\/div>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435. \u0411\u0443\u0434\u0435\u043c \u0440\u0430\u0434\u044b \u0432\u0430\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c, \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f\u043c, \u0431\u0430\u0433-\u0440\u0435\u043f\u043e\u0440\u0442\u0430\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u044b\u0441\u043b\u044f\u043c. \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0438\u0445 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043d\u0438\u0436\u0435.<\/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\/JetBrains\/blog\/552310\/\"> https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\"><a href=\"https:\/\/habr.com\/ru\/company\/JetBrains\/blog\/552310\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/g3\/hq\/00\/g3hq000lzktlbq0tyfxt2fhiybe.png\"><\/a><\/p>\n<p>  \u0420\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 PhpStorm \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443! \u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438 \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.  <\/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-321409","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321409","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=321409"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321409\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321409"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321409"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}