{"id":51402,"date":"2022-10-13T07:00:48","date_gmt":"2022-10-13T14:00:48","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=51402"},"modified":"2025-05-26T11:44:52","modified_gmt":"2025-05-26T18:44:52","slug":"php-82","status":"publish","type":"post","link":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/","title":{"rendered":"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany)"},"content":{"rendered":"\n<p>PHP 8.2 ma zosta\u0107 wydany w listopadzie tego roku, a najnowsza stabilna wersja to PHP 8.1.5. Mimo \u017ce to jeszcze pocz\u0105tek procesu, pojawi\u0142y si\u0119 mieszane opinie na temat kompatybilno\u015bci PHP 8.2 z rdzeniem WordPressa, wtyczkami i motywami.<\/p>\n\n\n\n<p>Jednak wiedza, czego si\u0119 spodziewa\u0107, mo\u017ce pom\u00f3c Ci <a href=\"https:\/\/www.dreamhost.com\/blog\/pl\/aktualizacja-php\/\" target=\"blank&quot;\" rel=\"noopener\">przygotowa\u0107 si\u0119 na najnowsz\u0105 wersj\u0119 PHP<\/a>. Poznaj\u0105c nowe funkcje oraz te, kt\u00f3re b\u0119d\u0105 wycofywane, mo\u017cesz zrozumie\u0107, jak aktualizacja mo\u017ce wp\u0142yn\u0105\u0107 na rozw\u00f3j. Ta wiedza mo\u017ce r\u00f3wnie\u017c pom\u00f3c Ci przygotowa\u0107 si\u0119 na ostateczne wydanie.<\/p>\n\n\n\n<p>W tym po\u015bcie podsumujemy najnowsze wersje PHP. Nast\u0119pnie om\u00f3wimy, co nowego w PHP 8.2 i przedyskutujemy harmonogram wyda\u0144. Zacznijmy!<\/p>\n\n\n\n<h2 id=\"h-an-overview-of-php-versions\" class=\"wp-block-heading\"><b>Przegl\u0105d Wersji PHP<\/b><\/h2>\n\n\n\n<p><a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/214202188-PHP-overview\" target=\"blank&quot;\" rel=\"noopener\">PHP<\/a> jest g\u0142\u00f3wnym j\u0119zykiem programowania WordPressa. Odgrywa kluczow\u0105 rol\u0119 w przekszta\u0142caniu danych z bazy danych na strony internetowe HTML dla odwiedzaj\u0105cych Twoj\u0105 stron\u0119.<\/p>\n\n\n\n<p>Jako w\u0142a\u015bciciel strony internetowej lub deweloper, prawdopodobnie jeste\u015b ju\u017c zaznajomiony z wag\u0105 aktualizacji twojego rdzenia WordPress, motyw\u00f3w i plugin\u00f3w. Jednak\u017ce, r\u00f3wnie krytyczne jest utrzymanie aktualno\u015bci twojego PHP.<\/p>\n\n\n\n<p><style>.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }<\/style><\/p>\n\n\n\n<div class=\"embed-container\"><iframe data-src=\"https:\/\/www.youtube.com\/embed\/G_O-mxZAk-g\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" data-load-mode=\"1\"><\/iframe><\/div>\n\n\n\n<p>Obecnie WordPress zaleca u\u017cywanie co najmniej <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"blank&quot;\" rel=\"noopener\">PHP 7.4<\/a>. Starsze wersje PHP nie otrzymuj\u0105 ju\u017c aktywnego wsparcia dla aktualizacji bezpiecze\u0144stwa i poprawek b\u0142\u0119d\u00f3w. Dlatego aktualizacja do najnowszej <i>stabilnej<\/i> wersji PHP mo\u017ce skutkowa\u0107 lepszym bezpiecze\u0144stwem strony, zwi\u0119kszon\u0105 wydajno\u015bci\u0105 i wy\u017cszym poziomem wsparcia (podkre\u015blamy <i>stabiln\u0105<\/i>, poniewa\u017c cz\u0119\u015b\u0107 z ponad 60 000 Plugins\/plugin WordPressa nie jest jeszcze w pe\u0142ni kompatybilna z PHP 8.0, wi\u0119c warto podchodzi\u0107 do tych aktualizacji z pewn\u0105 ostro\u017cno\u015bci\u0105).<\/p>\n\n\n\n<p>PHP 7.4 wprowadzi\u0142o w\u0142a\u015bciwo\u015bci z typami, separator numeryczny z podkre\u015blnikiem oraz r\u00f3\u017cne ulepszenia. Od tego czasu wydano kilka kolejnych <a href=\"https:\/\/php.watch\/versions\" target=\"blank&quot;\" rel=\"noopener\">wersji PHP<\/a>.<\/p>\n\n\n\n<p>PHP 8.0, wydane w listopadzie 2020, przynios\u0142o kilka kluczowych funkcji. Opr\u00f3cz ulepsze\u0144 sk\u0142adni i wydajno\u015bci, wydanie zawiera\u0142o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nazwane parametry<\/li>\n\n\n\n<li>Sk\u0142adnia dopasowania<\/li>\n\n\n\n<li>Typy Unii<\/li>\n\n\n\n<li>Promocja w\u0142a\u015bciwo\u015bci konstruktora<\/li>\n\n\n\n<li>JIT (kt\u00f3ry wp\u0142ywa na spos\u00f3b wykonania kodu \u017ar\u00f3d\u0142owego przez PHP)<\/li>\n\n\n<\/ul>\n\n\n\n<p>Rok p\u00f3\u017aniej pojawi\u0142a si\u0119 PHP 8.1, najnowsza g\u0142\u00f3wna wersja PHP. Ta aktualizacja zawiera znacz\u0105ce funkcje, takie jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Typy przeci\u0119cia<\/li>\n\n\n\n<li>W\u0142a\u015bciwo\u015bci tylko do odczytu<\/li>\n\n\n\n<li>Wyliczenia<\/li>\n\n\n\n<li>Fibry<\/li>\n\n\n\n<li>Typ zwracaj\u0105cy nigdy<\/li>\n\n\n<\/ul>\n\n\n\n<p>Utrzymywanie najnowszych wersji PHP mo\u017ce pom\u00f3c zwi\u0119kszy\u0107 wydajno\u015b\u0107 i bezpiecze\u0144stwo Twojej strony internetowej. Jednak wa\u017cne jest, aby wiedzie\u0107, jakich zmian mo\u017cna si\u0119 spodziewa\u0107 przed aktualizacj\u0105. Je\u015bli jeste\u015b zainteresowany testowaniem obecnego stanu PHP 8.2, mo\u017cesz to zrobi\u0107 za po\u015brednictwem <a href=\"https:\/\/github.com\/devilbox\/docker-php-fpm-8.2\" target=\"blank&quot;\" rel=\"noopener\">GitHuba<\/a>.<\/p>\n\n\n\n<h2 id=\"h-what-s-new-in-php-8-2\" class=\"wp-block-heading\"><b>Co nowego w PHP 8.2<\/b><\/h2>\n\n\n\n<p>PHP 8.2 ma zosta\u0107 wydane pod koniec 2022 roku. Oto <a href=\"https:\/\/wiki.php.net\/todo\/php82\" target=\"blank&quot;\" rel=\"noopener\">aktualny harmonogram wyda\u0144<\/a>, z Og\u00f3ln\u0105 Dost\u0119pno\u015bci\u0105 (GA) zaplanowan\u0105 na 24 listopada 2022 roku:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>9 czerwca: Alpha 1<\/li>\n\n\n\n<li>23 czerwca: Alpha 2<\/li>\n\n\n\n<li>7 lipca: Alpha 3<\/li>\n\n\n\n<li>19 lipca: Zamro\u017cenie funkcji<\/li>\n\n\n\n<li>21 lipca: Beta 1<\/li>\n\n\n\n<li>4 sierpnia: Beta 2<\/li>\n\n\n\n<li>18 sierpnia: Beta 3<\/li>\n\n\n\n<li>1 wrze\u015bnia: Kandydat na wydanie 1<\/li>\n\n\n\n<li>15 wrze\u015bnia: Kandydat na wydanie 2<\/li>\n\n\n\n<li>29 wrze\u015bnia: Kandydat na wydanie 3<\/li>\n\n\n\n<li>13 pa\u017adziernika: Kandydat na wydanie 4<\/li>\n\n\n\n<li>27 pa\u017adziernika: Kandydat na wydanie 5<\/li>\n\n\n\n<li>10 listopada: Kandydat na wydanie 6<\/li>\n\n\n\n<li>24 listopada: GA<\/li>\n\n\n<\/ul>\n\n\n\n<p>Zgodnie z oficjaln\u0105 dokumentacj\u0105 na <a href=\"https:\/\/php.watch\/versions\/8.2\" target=\"_blank\" rel=\"noopener\">stronie PHP<\/a>, powinno pojawi\u0107 si\u0119 kilka nowych funkcji oraz przestarza\u0142ych funkcji. Przyjrzyjmy si\u0119 niekt\u00f3rym z nich!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-disjunctive-normal-form-dnf-types\"><b>Typy Formy Normalnej Alternatywnej (DNF)<\/b><\/h3>\n\n\n\n<p>PHP 8.2 wprowadzi now\u0105 funkcj\u0119 typ\u00f3w w <a href=\"https:\/\/wiki.php.net\/rfc\/dnf_types\" target=\"blank&quot;\" rel=\"noopener\">Postaci Normalnej Roz\u0142\u0105cznej (DNF)<\/a>. DNF to ustandaryzowany spos\u00f3b organizowania wyra\u017ce\u0144 boolowskich \u2014 konkretnie, w seri\u0119 OR po\u0142\u0105czonych przez AND. Gdy DNF jest stosowane do deklaracji typ\u00f3w, umo\u017cliwia standardowy spos\u00f3b zapisywania po\u0142\u0105czonych typ\u00f3w Unii i Przeci\u0119cia, kt\u00f3re parser mo\u017ce obs\u0142u\u017cy\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-new-mysqli-execute-query-function-and-mysqli-execute-query-method\"><b>Nowa funkcja mysqli_execute_query i metoda mysqli::execute_query<\/b><\/h3>\n\n\n\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/mysqli_execute_query\" target=\"blank&quot;\" rel=\"noopener\">Uruchamianie parametryzowanych zapyta\u0144 MySQLi<\/a> b\u0119dzie \u0142atwiejsze w PHP 8.2, dzi\u0119ki nowej funkcji <span style=\"font-family: 'courier new', courier, monospace;\">mysqli_execute_query($sql, $params)<\/span> i metodzie <span style=\"font-family: 'courier new', courier, monospace;\">mysqli::execute_query<\/span>.<\/p>\n\n\n\n<p>To jeszcze bardziej zmniejszy z\u0142o\u017cono\u015b\u0107 u\u017cywania zparametryzowanych zapyta\u0144, co u\u0142atwi deweloperom odej\u015bcie od <span style=\"font-family: 'courier new', courier, monospace;\">mysqli_query()<\/span> oraz niebezpiecznego\/ryzykownego escapowania warto\u015bci u\u017cytkownika.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-fetch-enum-properties-in-const-expressions\"><b>Pobierz w\u0142a\u015bciwo\u015bci enum w wyra\u017ceniach const<\/b><\/h3>\n\n\n\n<p><a href=\"https:\/\/wiki.php.net\/rfc\/fetch_property_in_const_expressions\" target=\"blank&quot;\" rel=\"noopener\">Zgodnie z RFC<\/a>, \u201eTo RFC proponuje umo\u017cliwienie u\u017cycia <span style=\"font-family: 'courier new', courier, monospace;\">-&gt;\/?-&gt;<\/span> do pobierania w\u0142a\u015bciwo\u015bci enumeracji w sta\u0142ych wyra\u017ceniach. G\u0142\u00f3wnym motywem tej zmiany jest umo\u017cliwienie pobierania w\u0142a\u015bciwo\u015bci nazwy i warto\u015bci w miejscach, gdzie obiekty enumeracji nie s\u0105 dozwolone, jak klucze tablic.\u201d<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-new-random-extension\"><b>Nowe Losowe Rozszerzenie<\/b><\/h3>\n\n\n\n<p>PHP 8.2 wprowadza nowe rozszerzenie PHP o nazwie <span style=\"font-family: 'courier new', courier, monospace;\">random<\/span>. Organizuje i konsoliduje istniej\u0105c\u0105 funkcjonalno\u015b\u0107 PHP zwi\u0105zan\u0105 z generacj\u0105 liczb losowych. Wprowadza tak\u017ce seri\u0119 struktur klas PHP i klas wyj\u0105tk\u00f3w, aby zapewni\u0107 szczeg\u00f3\u0142owe opcje dla generator\u00f3w liczb losowych oraz obs\u0142ug\u0119 wyj\u0105tk\u00f3w.<\/p>\n\n\n\n<p>Rozszerzenie <span style=\"font-family: 'courier new', courier, monospace;\">random<\/span> jest do\u0142\u0105czone do PHP i nie ma opcji konfiguracji w czasie kompilacji ani w czasie dzia\u0142ania, aby wy\u0142\u0105czy\u0107 rozszerzenie <span style=\"font-family: 'courier new', courier, monospace;\">random<\/span>. Rozszerzenie <span style=\"font-family: 'courier new', courier, monospace;\">random<\/span> b\u0119dzie zawsze dost\u0119pne w PHP 8.2 i p\u00f3\u017aniejszych wersjach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-new-curl-upkeep-function\"><b>Nowa funkcja curl_upkeep<\/b><\/h3>\n\n\n\n<p>PHP 8.2 dodaje <a href=\"https:\/\/php.watch\/versions\/8.2\/curl_upkeep\" target=\"blank&quot;\" rel=\"noopener\">now\u0105 funkcj\u0119<\/a> do rozszerzenia Curl o nazwie <span style=\"font-family: 'courier new', courier, monospace;\">curl_upkeep<\/span>. Funkcja curl_upkeep wywo\u0142uje <span style=\"font-family: 'courier new', courier, monospace;\">curl_easy_upkeep()<\/span> w libcurl, kt\u00f3ra jest podstawow\u0105 bibliotek\u0105 C, z kt\u00f3rej korzysta rozszerzenie Curl PHP.<\/p>\n\n\n\n<p>Funkcja <span style=\"font-family: 'courier new', courier, monospace;\">curl_upkeep()<\/span> wykonuje prac\u0119, kt\u00f3ra utrzymuje po\u0142\u0105czenie Curl przy \u017cyciu. Jednak nie ka\u017cdy typ po\u0142\u0105czenia, z kt\u00f3rym integruje si\u0119 Curl, obs\u0142uguje utrzymanie po\u0142\u0105czenia. Obecnie tylko po\u0142\u0105czenia HTTP\/2 to wspieraj\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-new-ini-parse-quantity-function\"><b>Nowa funkcja ini_parse_quantity<\/b><\/h3>\n\n\n\n<p><a href=\"https:\/\/php.watch\/versions\/8.2\/ini_parse_quantity\" target=\"blank&quot;\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">ini_parse_quantity<\/span><\/a> to nowa funkcja, kt\u00f3ra zostanie dodana do PHP w wersji PHP 8.2. Analizuje dowolny rozmiar danych rozpoznawany przez warto\u015bci INI PHP (takie jak 56K, 256M lub 1G), a nast\u0119pnie zwraca rozmiar danych w bajtach. Mo\u017ce by\u0107 przydatna podczas analizowania istniej\u0105cych lub dostarczonych warto\u015bci INI w aplikacji PHP. Jednak\u017ce, nie rozpoznaje sufiks\u00f3w IEC dla rozmiar\u00f3w danych, takich jak MB, MiB czy GB, i nie nadaje si\u0119 do konwertowania standardowych warto\u015bci rozmiar\u00f3w danych na bajty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-new-memory-reset-peak-usage-function\"><b>Nowa funkcja memory_reset_peak_usage<\/b><\/h3>\n\n\n\n<p>PHP 8.2 b\u0119dzie zawiera\u0107 now\u0105 funkcj\u0119 o nazwie <a href=\"https:\/\/php.watch\/versions\/8.2\/memory_reset_peak_usage\" target=\"blank&quot;\" rel=\"noopener\"><span style=\"font-family: 'courier new', courier, monospace;\">memory_reset_peak_usage<\/span><\/a>. Zresetuje ona maksymalne zu\u017cycie pami\u0119ci zwracane przez funkcj\u0119 <span style=\"font-family: 'courier new', courier, monospace;\">memory_get_peak_usage<\/span>.<\/p>\n\n\n\n<p>Ta funkcja b\u0119dzie przydatna w przypadkach, kt\u00f3re wymagaj\u0105 wywo\u0142ania akcji kilka razy i zapisania szczytowego u\u017cycia pami\u0119ci ka\u017cdej iteracji. Programi\u015bci b\u0119d\u0105 mogli u\u017cy\u0107 tej nowej funkcji do zresetowania szczytowego u\u017cycia pami\u0119ci w dowolnym momencie \u017cycia \u017c\u0105dania.<\/p>\n\n\n\n<div class=\"article-newsletter article-newsletter--gradient\">\n\n\n<h2>Get Content Delivered Straight to Your Inbox<\/h2><p>Subscribe now to receive all the latest updates, delivered directly to your inbox.<\/p><form class=\"nwsl-form\" id=\"newsletter_block_\" novalidate><div class=\"messages\"><\/div><div class=\"form-group\"><label for=\"input_newsletter_block_\"><input type=\"email\"name=\"email\"id=\"input_newsletter_block_\"placeholder=\"Enter your email address\"novalidatedisabled=\"disabled\"\/><\/label><button type=\"submit\"class=\"btn btn--brand\"disabled=\"disabled\"><span>Sign Me Up!<\/span><svg width=\"21\" height=\"14\" viewBox=\"0 0 21 14\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M13.8523 0.42524L12.9323 1.34521C12.7095 1.56801 12.7132 1.9304 12.9404 2.14865L16.7241 5.7823H0.5625C0.251859 5.7823 0 6.03416 0 6.3448V7.6573C0 7.96794 0.251859 8.2198 0.5625 8.2198H16.7241L12.9405 11.8535C12.7132 12.0717 12.7095 12.4341 12.9323 12.6569L13.8523 13.5769C14.072 13.7965 14.4281 13.7965 14.6478 13.5769L20.8259 7.39879C21.0456 7.17913 21.0456 6.82298 20.8259 6.60327L14.6477 0.42524C14.4281 0.205584 14.0719 0.205584 13.8523 0.42524Z\" fill=\"white\"\/>\n<\/svg>\n<\/button><\/div><\/form><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-readonly-classes\"><b>Klasy tylko do odczytu<\/b><\/h3>\n\n\n\n<p>Wprowadzone w PHP 8.1, w\u0142a\u015bciwo\u015bci tylko do odczytu zostan\u0105 rozszerzone w PHP 8.2 o dodanie sk\u0142adniowego cukru, aby wszystkie w\u0142a\u015bciwo\u015bci klasy by\u0142y od razu tylko do odczytu:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">readonly class Post\n{\npublic function __construct(\npublic string $title,\npublic Author $author,\npublic string $body,\npublic DateTime $publishedAt,\n) {}\n}<\/pre>\n\n\n\n<p>To zapobiegnie dodawaniu dynamicznych w\u0142a\u015bciwo\u015bci do klas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-null-true-and-false-standalone-types\"><b>Null, True i False jako samodzielne typy<\/b><\/h3>\n\n\n\n<p>W PHP 8.2 typ zwracany false b\u0119dzie dost\u0119pny jako samodzielny typ, a nie tylko jako typ unii, gdy wyst\u0105pi b\u0142\u0105d, co jest ju\u017c mo\u017cliwe:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">function alwaysFalse(): false\n{\nreturn false;\n}<\/pre>\n\n\n\n<p>To samo dotyczy typu null. Na przyk\u0142ad, jako samodzielny typ, w przeciwie\u0144stwie do wcze\u015bniej, NullPost::getAuthor() b\u0119dzie m\u00f3g\u0142 zwraca\u0107 tylko null.<\/p>\n\n\n\n<p>PHP 8.2 r\u00f3wnie\u017c <a href=\"https:\/\/php.watch\/versions\/8.2\/true-type\" target=\"blank&quot;\" rel=\"noopener\">pozwala na true<\/a> jako samodzielny typ.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-deprecate-dynamic-properties\"><b>Wycofaj Dynamiczne W\u0142a\u015bciwo\u015bci<\/b><\/h3>\n\n\n\n<p><a href=\"https:\/\/php.watch\/versions\/8.2\/dynamic-properties-deprecated\" target=\"blank&quot;\" rel=\"noopener\">Dynamiczne w\u0142a\u015bciwo\u015bci<\/a> zostan\u0105 wycofane w PHP 8.2, co spowoduje wyst\u0105pienie ErrorException w PHP 9.0. Te w\u0142a\u015bciwo\u015bci s\u0105 ustawiane na obiekcie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">class Post\n{\npublic string $title;\n}\n\n\/\/ \u2026\n\n$post-&gt;name = 'Nazwa';<\/pre>\n\n\n\n<p>Dynamiczne w\u0142a\u015bciwo\u015bci zapewniaj\u0105 elastyczno\u015b\u0107 podczas tworzenia klas (np. obiekty warto\u015bci) bez \u015bcis\u0142ej deklaracji klasy. Ich wycofanie prawdopodobnie stanowi\u0107 b\u0119dzie problem dla programist\u00f3w, kt\u00f3rzy polegaj\u0105 na dynamicznych w\u0142a\u015bciwo\u015bciach, poniewa\u017c sk\u0142oni ich to do bardziej statycznej analizy. Z tego powodu niekt\u00f3rzy programi\u015bci obawiaj\u0105 si\u0119 tej zmiany w PHP 8.2.<\/p>\n\n\n\n<p>Jednak\u017ce klasy u\u017cywaj\u0105ce __get i __set nadal b\u0119d\u0105 obs\u0142ugiwa\u0107 w\u0142a\u015bciwo\u015bci dynamiczne, podobnie jak obiekty stdClass.<\/p>\n\n\n\n<p>Alternatywnie, deweloperzy mog\u0105 u\u017cy\u0107 nowego <a href=\"https:\/\/php.watch\/versions\/8.2\/AllowDynamicProperties\" target=\"blank&quot;\" rel=\"noopener\">#[AllowDynamicProperties]attribute<\/a>, zadeklarowanego w globalnej przestrzeni nazw, na klasach do tych w\u0142a\u015bciwo\u015bci:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#[AllowDynamicProperties]\nclass User() {}\n$user = new User();\n$user-&gt;foo = 'bar';<\/pre>\n\n\n\n<p>Mimo \u017ce nie jest to zalecane, kolejn\u0105 opcj\u0105 jest wy\u0142\u0105czenie ostrze\u017ce\u0144 o przestarza\u0142o\u015bci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-new-n-modifier\"><b>Nowy Modyfikator \/n<\/b><\/h3>\n\n\n\n<p>PHP 8.2 b\u0119dzie zawiera\u0107 wsparcie dla <a href=\"https:\/\/php.watch\/versions\/8.2\/preg-n-no-capture-modifier\" target=\"blank&quot;\" rel=\"noopener\">\/n (bez przechwytywania) modyfikatora<\/a> w rodzinie funkcji preg_*. Gdy u\u017cyty, \u017cadne grupy z meta-znakami () nie b\u0119d\u0105 przechwytywa\u0107, poza grupami nazwanymi. Zasadniczo wynik jest taki sam, jak oznaczenie ka\u017cdej grupy jako nieprzechwytuj\u0105cej.<\/p>\n\n\n\n<p>Przyczyn\u0105 tej zmiany jest to, \u017ce modyfikator upraszcza skomplikowane wyra\u017cenia regularne dla wielu grup. Zamiast oznacza\u0107 ka\u017cd\u0105 grup\u0119 jako nieprzechwytuj\u0105c\u0105, deweloperzy mog\u0105 oznaczy\u0107 wszystkie grupy jako nieprzechwytuj\u0105ce. Nast\u0119pnie mog\u0105 wybra\u0107 i nazwa\u0107 konkretne grupy, kt\u00f3re musz\u0105 przechwytywa\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-redact-parameters-in-back-traces\"><b>Usuwaj Parametry w \u015aladach Zwrotnych<\/b><\/h3>\n\n\n\n<p>Wielu programist\u00f3w korzysta z us\u0142ug \u015bledz\u0105cych stosy wywo\u0142a\u0144 i b\u0142\u0119dy produkcyjne z baz kod\u00f3w. Te us\u0142ugi mog\u0105 powiadomi\u0107 u\u017cytkownik\u00f3w, je\u015bli i kiedy co\u015b p\u00f3jdzie nie tak. Na przyk\u0142ad \u015bledzenie stos\u00f3w wywo\u0142a\u0144 jest pomocne podczas debugowania aplikacji.<\/p>\n\n\n\n<p>Jednak\u017ce, czasami \u015blady stosu mog\u0105 zawiera\u0107 wra\u017cliwe informacje, takie jak nazwy u\u017cytkownik\u00f3w i has\u0142a. PHP 8.2 b\u0119dzie zawiera\u0107 <a href=\"https:\/\/php.watch\/versions\/8.2\/backtrace-parameter-redaction\" target=\"blank&quot;\" rel=\"noopener\">#[SensitiveParameter] atrybut<\/a>, kt\u00f3ry zapobiegnie uwzgl\u0119dnieniu tych informacji w \u015bladach stosu, gdy co\u015b p\u00f3jdzie nie tak:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">function test(\n$foo,\n#[SensitiveParameter] $bar,\n$baz\n) {\nthrow new Exception('B\u0142\u0105d');\n}\n\ntest('foo', 'bar', 'baz');<\/pre>\n\n\n\n<p>PHP 8.2 b\u0119dzie u\u017cywa\u0107 wra\u017cliwych parametr\u00f3w do redagowania prywatnych informacji ze \u015blad\u00f3w stosu, czyni\u0105c je bardziej bezpiecznymi. Parametry te zapewniaj\u0105, \u017ce dane nie zostan\u0105 zapisane w logach b\u0142\u0119d\u00f3w. Zwr\u00f3\u0107 uwag\u0119, \u017ce ten atrybut b\u0119dzie dost\u0119pny tylko do u\u017cytku na parametrach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-deprecate-string-interpolation\"><b>Przestarza\u0142a interpolacja ci\u0105gu ${}<\/b><\/h3>\n\n\n\n<p>Istnieje wiele sposob\u00f3w na osadzanie zmiennych w ci\u0105gach znak\u00f3w w PHP. Jednak PHP 8.2 przestanie wspiera\u0107 dwie metody. Pierwsza to u\u017cycie ${} w ci\u0105gach znak\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"Witaj ${world}\";<\/pre>\n\n\n\n<p>Drugim sposobem jest u\u017cycie ${} (zmienne zmienne):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"Witaj ${(world)}\";<\/pre>\n\n\n\n<p>To prawdopodobnie nie b\u0119dzie znacz\u0105cym problemem dla deweloper\u00f3w, poniewa\u017c dwie najpopularniejsze metody interpolacji ci\u0105g\u00f3w nadal b\u0119d\u0105 dzia\u0142a\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-deprecate-partially-supported-callables\"><b>Przestarza\u0142e Cz\u0119\u015bciowo Wspierane Wywo\u0142ania<\/b><\/h3>\n\n\n\n<p>Kolejna przestarza\u0142a zmiana b\u0119dzie dotyczy\u0107 <a href=\"https:\/\/php.watch\/versions\/8.2\/partially-supported-callable-deprecation\" target=\"blank&quot;\" rel=\"noopener\">cz\u0119\u015bciowo wspieranych obiekt\u00f3w wywo\u0142ywalnych<\/a>. Istnieje wiele sposob\u00f3w na stworzenie obiektu wywo\u0142ywalnego w PHP. Mo\u017cna go wywo\u0142a\u0107 albo z parametrami, albo bez, u\u017cywaj\u0105c sk\u0142adni $callable(), funkcji user_call_func(\/a_array), lub u\u017cywaj\u0105c funkcji z callbackiem.<\/p>\n\n\n\n<p>Przestarza\u0142e wzorce wywo\u0142a\u0144 obejmuj\u0105 nast\u0119puj\u0105ce:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$callable = \"self::method\";\n$callable = \"parent::method\";\n$callable = \"static::method\";\n$callable = [\"self\", \"method\"];\n$callable = [\"parent\", \"method\"];\n$callable = [\"static\", \"method\"];\n$callable = [\"MyClass\", \"MyParentClass::myMethod\"];\n$callable = [new MyClass(), \"MyOtherClass::myMethod\"];<\/pre>\n\n\n\n<p>Od wersji PHP 8.2, wywo\u0142anie kt\u00f3regokolwiek z powy\u017cszych spowoduje wy\u015bwietlenie nast\u0119puj\u0105cego komunikatu o przestarza\u0142o\u015bci:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">class Test {\npublic static function myMethod(): void {\necho \"Called\";\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">public static function call(): void {\n$callable = 'self::myMethod';\ncall_user_func($callable);\n}\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">$callable = Test::call();\n\/\/ \"Wywo\u0142ane\";<\/pre>\n\n\n\n<p>Jednak przekazywanie tych obiekt\u00f3w wywo\u0142ywalnych do funkcji <span style=\"font-family: 'courier new', courier, monospace;\">is_callable<\/span> lub u\u017cywanie ich z typami parametr\u00f3w callable nie spowoduje wygenerowania komunikatu o przestarza\u0142o\u015bci. Aby zapobiec pojawieniu si\u0119 powiadomienia o przestarzeniu, programi\u015bci mog\u0105 zamiast tego przekonwertowa\u0107 s\u0142owa kluczowe parent, self i static w kodzie wywo\u0142ywalnym na odpowiednie nazwy klas za pomoc\u0105 magicznej metody::class.<\/p>\n\n\n\n<p>Cz\u0119\u015b\u0107 powod\u00f3w zmiany polega na umo\u017cliwieniu stosowania wywo\u0142ywalnych do typizowanych w\u0142a\u015bciwo\u015bci. Sprawia to, \u017ce s\u0105 one mniej zale\u017cne od kontekstu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-mysqli-can-no-longer-be-compiled-with-libmysql\"><b>MySQLi nie mo\u017ce ju\u017c by\u0107 kompilowany z libmysql<\/b><\/h3>\n\n\n\n<p>W przesz\u0142o\u015bci PHP obs\u0142ugiwa\u0142o dwie biblioteki do \u0142\u0105czenia baz danych MySQL: mysqlnd i libmysql. Od PHP 5.4, domy\u015bln\u0105 bibliotek\u0105 jest mysqlnd. Jednak\u017ce mo\u017cliwe by\u0142o kompilowanie MySQLi przez rozszerzenia.<\/p>\n\n\n\n<p>Pocz\u0105wszy od PHP 8.2, kompilowanie rozszerzenia MySQLi z <a href=\"https:\/\/php.watch\/versions\/8.2\/mysqli-libmysql-no-longer-supported\" target=\"blank&quot;\" rel=\"noopener\">libmysql nie b\u0119dzie wspierane<\/a>. Pr\u00f3ba jego wykonania skutkowa\u0107 b\u0119dzie b\u0142\u0119dem konfiguracji:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/configure --with-mysqli=FOO<\/pre>\n\n\n\n<p>\u0141\u0105czenie mysqli z zewn\u0119trzn\u0105 bibliotek\u0105 nie jest ju\u017c obs\u0142ugiwane<\/p>\n\n\n\n<p>To prawdopodobnie nie spowoduje \u017cadnych znacz\u0105cych b\u0142\u0119d\u00f3w dla programist\u00f3w. Jednak\u017ce, dwie najwa\u017cniejsze funkcje obs\u0142ugiwane przez libmysql, kt\u00f3rych nie ma w mysqlnd, to obs\u0142uga automatycznego ponownego \u0142\u0105czenia oraz uwierzytelnianie za pomoc\u0105 LDAP i SASL.<\/p>\n\n\n\n<h2 id=\"h-keep-your-wordpress-php-version-up-to-date\" class=\"wp-block-heading\"><b>Aktualizuj swoj\u0105 wersj\u0119 PHP WordPress<\/b><\/h2>\n\n\n\n<p>Jako programista, niezb\u0119dne jest testowanie swojego kodu pod k\u0105tem nadchodz\u0105cych wersji PHP. W tym przypadku programi\u015bci powinni zacz\u0105\u0107 testowa\u0107 sw\u00f3j kod pod k\u0105tem PHP 8.2 jak najszybciej, aby zapewni\u0107, \u017ce tw\u00f3j kod nie zak\u0142\u00f3ci dzia\u0142ania stron u\u017cytkownik\u00f3w podczas aktualizacji.<\/p>\n\n\n\n\n<div\n\tclass=\"article-cta-shared article-cta-small\"\n>\n    <div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" src=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/lazy-loading-transparent.webp\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/article-small-ad-cta-placeholder.webp 1x, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/article-small-ad-cta-placeholder-x2.webp 2x\"  alt=\"Ad background image\" \/><\/div>\n\n\n\n\n  <div class=\"content-btm\">\n    <h2\n      class=\"h2--md\"\n    >\n      Idealne \u015brodowisko rozwojowe\n    <\/h2>\n    <p\n      class=\"p--md\"\n    >\n      Dbamy o to, by Twoja strona by\u0142a szybka, bezpieczna i zawsze dost\u0119pna, aby Twoi odwiedzaj\u0105cy mogli Ci ufa\u0107. Plany zaczynaj\u0105 si\u0119 ju\u017c od $1.99\/mies.\n    <\/p>\n\n            <a\n            href=\"https:\/\/www.dreamhost.com\/pl\/hosting\/wspoldzielony\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Wybierz Sw\u00f3j Plan                    <\/a>\n\n  <\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>PHP 8.2 ma zosta\u0107 wydane w listopadzie tego roku, a najnowsz\u0105 stabiln\u0105 wersj\u0105 jest PHP 8.1.5. Chocia\u017c to jeszcze pocz\u0105tki procesu, pojawi\u0142y si\u0119 mieszane opinie na temat kompatybilno\u015bci PHP 8.2 z rdzeniem WordPress, wtyczkami i motywami. Jednak wiedza, czego si\u0119 spodziewa\u0107, mo\u017ce pom\u00f3c Ci przygotowa\u0107 si\u0119 na najnowsz\u0105 wersj\u0119 PHP [\u2026]<\/p>\n","protected":false},"author":1062,"featured_media":34862,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_metadesc":"","toc_headlines":"[[\"h-an-overview-of-php-versions\",\"Przegl\u0105d Wersji PHP\"],[\"h-what-s-new-in-php-8-2\",\"Co nowego w PHP 8.2\"],[\"h-keep-your-wordpress-php-version-up-to-date\",\"Aktualizuj swoj\u0105 wersj\u0119 PHP WordPress\"]]","hide_toc":false,"footnotes":""},"categories":[14456,14438],"tags":[],"class_list":["post-51402","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projektowanie-stron-pl","category-rozmowa-techniczna-pl"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany) - DreamHost Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany)\" \/>\n<meta property=\"og:description\" content=\"PHP 8.2 ma zosta\u0107 wydane w listopadzie tego roku, a najnowsz\u0105 stabiln\u0105 wersj\u0105 jest PHP 8.1.5. Chocia\u017c to jeszcze pocz\u0105tki procesu, pojawi\u0142y si\u0119 mieszane opinie na temat kompatybilno\u015bci PHP 8.2 z rdzeniem WordPress, wtyczkami i motywami. Jednak wiedza, czego si\u0119 spodziewa\u0107, mo\u017ce pom\u00f3c Ci przygotowa\u0107 si\u0119 na najnowsz\u0105 wersj\u0119 PHP [\u2026]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-13T14:00:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-26T18:44:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/Latest-PHP-Update-Feature.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"598\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jason Cosper\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jason Cosper\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany) - DreamHost Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/","og_locale":"en_US","og_type":"article","og_title":"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany)","og_description":"PHP 8.2 ma zosta\u0107 wydane w listopadzie tego roku, a najnowsz\u0105 stabiln\u0105 wersj\u0105 jest PHP 8.1.5. Chocia\u017c to jeszcze pocz\u0105tki procesu, pojawi\u0142y si\u0119 mieszane opinie na temat kompatybilno\u015bci PHP 8.2 z rdzeniem WordPress, wtyczkami i motywami. Jednak wiedza, czego si\u0119 spodziewa\u0107, mo\u017ce pom\u00f3c Ci przygotowa\u0107 si\u0119 na najnowsz\u0105 wersj\u0119 PHP [\u2026]","og_url":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2022-10-13T14:00:48+00:00","article_modified_time":"2025-05-26T18:44:52+00:00","og_image":[{"width":900,"height":598,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/Latest-PHP-Update-Feature.jpeg","type":"image\/jpeg"}],"author":"Jason Cosper","twitter_card":"summary_large_image","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Jason Cosper","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#article","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/"},"author":{"name":"Jason Cosper","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/2273b8bf7336df78f6d99a89c17253c4"},"headline":"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany)","datePublished":"2022-10-13T14:00:48+00:00","dateModified":"2025-05-26T18:44:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/"},"wordCount":1962,"publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/Latest-PHP-Update-Feature.jpeg","articleSection":["Projektowanie Stron","Rozmowa Techniczna"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/","url":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/","name":"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany) - DreamHost Blog","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#primaryimage"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/Latest-PHP-Update-Feature.jpeg","datePublished":"2022-10-13T14:00:48+00:00","dateModified":"2025-05-26T18:44:52+00:00","breadcrumb":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#primaryimage","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/Latest-PHP-Update-Feature.jpeg","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/Latest-PHP-Update-Feature.jpeg","width":900,"height":598,"caption":"what to expect with PHP 8.2"},{"@type":"BreadcrumbList","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pl\/php-82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dhblog.dream.press\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP 8.2: Czego si\u0119 spodziewa\u0107 (Przewodnik dla programist\u00f3w &#8211; Zaktualizowany)"}]},{"@type":"WebSite","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website","url":"https:\/\/www-dev.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www-dev.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www-dev.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/2273b8bf7336df78f6d99a89c17253c4","name":"Jason Cosper","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","caption":"Jason Cosper"},"description":"Jason is DreamHost\u2019s WordPress Product Advocate, based out of Bakersfield, CA. He is currently working on making our DreamPress product even better. In his free time, he likes to curl up on the couch and watch scary movies with his wife Sarah and three very small dogs. Follow him on Twitter.","url":"https:\/\/www-dev.dreamhost.com\/blog\/author\/jasoncosper\/"}]}},"lang":"pl","translations":{"pl":51402,"es":34876,"en":34859,"de":50851,"pt":51398,"ru":51405,"uk":51416,"it":68537,"fr":70669,"nl":70695},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/51402","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/1062"}],"replies":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/comments?post=51402"}],"version-history":[{"count":4,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/51402\/revisions"}],"predecessor-version":[{"id":62566,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/51402\/revisions\/62566"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/34862"}],"wp:attachment":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=51402"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=51402"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=51402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}