{"id":17265,"date":"2023-11-30T15:18:26","date_gmt":"2023-11-30T14:18:26","guid":{"rendered":"https:\/\/www.lh.pl\/pomoc\/?p=17265"},"modified":"2023-11-30T15:18:28","modified_gmt":"2023-11-30T14:18:28","slug":"php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci","status":"publish","type":"post","link":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/","title":{"rendered":"PHP 8.3 &#8211; co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci"},"content":{"rendered":"\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-1024x576.jpg\" alt=\"PHP 8.3 - co nowego?\" class=\"wp-image-17268\" srcset=\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-1024x576.jpg 1024w, https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-300x169.jpg 300w, https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-768x432.jpg 768w, https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Je\u015bli interesujesz si\u0119 rozwojem technologii webowych lub rozwijasz si\u0119 jako programista, z pewno\u015bci\u0105 ucieszy Ci\u0119 wiadomo\u015b\u0107, \u017ce w\u0142a\u015bnie zosta\u0142o wydane PHP 8.3! Ta najnowsza wersja jednego z najpopularniejszych j\u0119zyk\u00f3w programowania do tworzenia aplikacji internetowych przynosi ze sob\u0105 szereg innowacji i ulepsze\u0144. W tym artykule przybli\u017cymy, co dok\u0142adnie nowego oferuje aktualizacja PHP 8.3.<\/strong><\/p>\n\n\n\n<p>Wydanie PHP 8.3 to nie tylko kolejna aktualizacja \u2014 to kolejny krok na drodze ulepszania tego j\u0119zyka programowania, a tak\u017ce zwi\u0119kszania jego wydajno\u015bci. Nowe funkcje mog\u0105 znacz\u0105co wp\u0142yn\u0105\u0107 na Twoje projekty i aplikacje. Jednak to nie wszystko. W tym artykule wyja\u015bnimy, opr\u00f3cz zmian w PHP 8.3, jak aktualizacja PHP wp\u0142ywa na bezpiecze\u0144stwo i wydajno\u015b\u0107 Twoich aplikacji internetowych, a tak\u017ce, dlaczego warto zawsze \u2014 w miar\u0119 mo\u017cliwo\u015bci \u2014 korzysta\u0107 z najnowszej wersji PHP.<\/p>\n\n\n\n<p>Aktualizacja do PHP 8.3 to nie tylko dost\u0119p do nowych narz\u0119dzi; to inwestycja w przysz\u0142o\u015b\u0107 i bezpiecze\u0144stwo Twoich aplikacji.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co to jest wersja PHP, czyli co musisz wiedzie\u0107 o j\u0119zyku PHP<\/h2>\n\n\n\n<p>Wersja PHP jest okre\u015bleniem u\u017cywanym do opisania konkretnego wydania j\u0119zyka programowania PHP. Ka\u017cda wersja PHP zawiera okre\u015blone ulepszenia, poprawki b\u0142\u0119d\u00f3w i nowe funkcje. Dla os\u00f3b, kt\u00f3re tworz\u0105 i zarz\u0105dzaj\u0105 stronami internetowymi, znajomo\u015b\u0107 wersji PHP jest istotna ze wzgl\u0119du na kompatybilno\u015b\u0107 kodu.<\/p>\n\n\n\n<p><strong>Gdy pojawia si\u0119 nowa wersja PHP, zmieniaj\u0105 si\u0119 jednak nie tylko mo\u017cliwo\u015bci oraz regu\u0142y pisania kodu. Wydana zostaje tak\u017ce nowa wersja interpretera PHP, zgodna z aktualn\u0105 wersj\u0105 wytycznych. <\/strong>Interpreter PHP to w\u0142a\u015bnie ten element oprogramowania, kt\u00f3ry dzia\u0142a na serwerze i odczytuje oraz wykonuje kod strony napisany zgodny z aktualnymi standardami. Jak ka\u017cde oprogramowanie, jest on na bie\u017c\u0105co aktualizowany, aby obs\u0142ugiwa\u0142 nowe wytyczne i standardy, a tak\u017ce dzia\u0142a\u0142 wydajniej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego warto aktualizowa\u0107 PHP?<\/h2>\n\n\n\n<p>Nowe wersje PHP mog\u0105 wprowadza\u0107 zmiany w sk\u0142adni i funkcjonalno\u015bci j\u0119zyka, co mo\u017ce mie\u0107 wp\u0142yw na dzia\u0142anie istniej\u0105cego kodu strony internetowej. Dlatego wa\u017cne jest, aby programi\u015bci i administratorzy stron internetowych byli \u015bwiadomi r\u00f3\u017cnic pomi\u0119dzy r\u00f3\u017cnymi wersjami PHP i stale aktualizowali swoje aplikacje, aby unikn\u0105\u0107 problem\u00f3w z kompatybilno\u015bci\u0105 i bezpiecze\u0144stwem.&nbsp;<\/p>\n\n\n\n<p>Usprawnienia wprowadzane w nowszych wersjach PHP wp\u0142ywaj\u0105 jednak nie tylko na standardy pisania kodu, ale tak\u017ce na wydajno\u015b\u0107 wspomnianego interpretera PHP. Przek\u0142ada si\u0119 to na szybko\u015b\u0107, z jak\u0105 strona internetowa dzia\u0142a i wykonuje swoje operacje. Innymi s\u0142owy, z regu\u0142y im nowsza wersja PHP, tym strona szybciej dzia\u0142a. Ponadto, starsze wersje PHP mog\u0105 mie\u0107 luk\u0119 bezpiecze\u0144stwa lub inne problemy, dlatego nale\u017cy unika\u0107 korzystania z przestarza\u0142ych wersji PHP.<\/p>\n\n\n\n<p>Ze wzgl\u0119du na powy\u017csze, zalecane jest aktualizowanie wersji PHP do najnowszej. Je\u015bli posiadasz stron\u0119 w LH.pl, mo\u017cesz samodzielnie zmieni\u0107 wersj\u0119 PHP na swoim hostingu w panelu klienta. Zobacz, jak zmieni\u0107 wersj\u0119 PHP w LH.pl.&nbsp;<\/p>\n\n\n\n<p>Skoro wiemy ju\u017c, jak wersja PHP wp\u0142ywa na dzia\u0142anie strony internetowej oraz jej bezpiecze\u0144stwo, pora zaj\u0105\u0107 si\u0119 zmianami w najnowszej wersji PHP 8.3.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co nowego w PHP 8.3?<\/h2>\n\n\n\n<p>PHP 8.3 przynosi ze sob\u0105 imponuj\u0105cy zestaw nowo\u015bci i ulepsze\u0144, kt\u00f3re maj\u0105 na celu uczynienie Twojego kodowania jeszcze bardziej efektywnym i przyjemnym. W\u015br\u00f3d najbardziej wyczekiwanych zmian znajdziemy mi\u0119dzy innymi usprawnienia w klasach tylko do odczytu (readonly classes), now\u0105 funkcj\u0119 json_validate(), dodatki do niedawno wprowadzonej klasy Randomizer, wykrywanie przepe\u0142nienia stosu, a tak\u017ce wiele innych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zmiany dotycz\u0105ce w\u0142a\u015bciwo\u015bci readonly<\/h3>\n\n\n\n<p>W PHP 8.3, wprowadzono pewn\u0105 zmian\u0119 dotycz\u0105c\u0105 w\u0142a\u015bciwo\u015bci readonly (tylko do odczytu) w klasach. Wcze\u015bniej, gdy zadeklarowa\u0142e\u015b w\u0142a\u015bciwo\u015b\u0107 jako readonly, nie mog\u0142e\u015b jej zmieni\u0107 po utworzeniu obiektu. Jednak nowa zmiana pozwala na nadpisanie takiej w\u0142a\u015bciwo\u015bci, ale tylko w szczeg\u00f3lnym przypadku: wewn\u0105trz funkcji klonowania obiektu&nbsp;__clone().<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Klasa reprezentuj\u0105ca artyku\u0142\r\nreadonly class Article\r\n{\r\n\u00a0 \u00a0 \/\/ Data publikacji artyku\u0142u, tylko do odczytu\r\n\u00a0 \u00a0 public function __construct(\r\n\u00a0 \u00a0 \u00a0 \u00a0 public DateTime $publishedDate,\r\n\u00a0 \u00a0 ) {}\r\n\r\n \u00a0 \/\/ Funkcja klonuj\u0105ca\r\n\u00a0 \u00a0 public function __clone()\r\n\u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Przypisanie nowej daty do sklonowanego artyku\u0142u\r\n\u00a0 \u00a0 \u00a0 \u00a0 $this->publishedDate = new DateTime();\r\n\u00a0 \u00a0 }\r\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Funkcja json_validate()<\/h3>\n\n\n\n<p>W PHP 8.3 wprowadzono now\u0105 funkcj\u0119 o nazwie <code>json_validate()<\/code>, kt\u00f3ra s\u0142u\u017cy do walidacji danych w formacie JSON. Poprzednio, aby sprawdzi\u0107, czy dane JSON s\u0105 poprawne, do dyspozycji by\u0142y r\u00f3\u017cne metody, takie jak:<\/p>\n\n\n\n<ul>\n<li>konfiguracja flagi&nbsp;<code>JSON_THROW_ON_ERROR<\/code>,<\/li>\n\n\n\n<li>u\u017cycie <code>json_last_error<\/code>,<\/li>\n\n\n\n<li>sprawdzenie, czy&nbsp;<code>json_decode()<\/code> zwraca <code>null<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Nowa funkcja <code>json_validate()<\/code> znacznie upraszcza ten proces. Pozwala ona sprawdzi\u0107, czy podany ci\u0105g znak\u00f3w w formacie JSON jest poprawny, zwracaj\u0105c <code>true<\/code> dla poprawnych danych JSON i <code>false<\/code> dla niepoprawnych. Dodatkowo, je\u015bli JSON jest niepoprawny, mo\u017cesz u\u017cy\u0107 <code>json_last_error_msg()<\/code> i <code>json_last_error()<\/code>, aby dowiedzie\u0107 si\u0119 wi\u0119cej o b\u0142\u0119dzie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Okre\u015blanie typu sta\u0142ych klasowych<\/h3>\n\n\n\n<p>Wprowadzenie sta\u0142ych typowanych w PHP 8.3 to znacz\u0105ca zmiana, kt\u00f3ra pomaga unika\u0107 niejasno\u015bci dotycz\u0105cych typ\u00f3w danych u\u017cywanych w sta\u0142ych (const). W poprzednich wersjach PHP, typ sta\u0142ej nie by\u0142 jasno okre\u015blony, co mog\u0142o prowadzi\u0107 do b\u0142\u0119d\u00f3w i nieporozumie\u0144.<\/p>\n\n\n\n<p>Przyk\u0142ad problemu w starszych wersjach PHP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Configurable {\r\n\u00a0 \u00a0 const SETTINGS = &#91;\"theme\" => \"dark\"]; \/\/ Zak\u0142adamy, \u017ce SETTINGS to zawsze tablica\r\n}\r\n\r\nclass WebPage implements Configurable {\r\n\u00a0 \u00a0 const SETTINGS = \"light\"; \/\/ Ale tutaj SETTINGS to ci\u0105g znak\u00f3w\r\n}\r\n\r\nclass MobilePage extends WebPage {\r\n\u00a0 \u00a0 const SETTINGS = 42; \/\/ A tutaj SETTINGS to liczba\r\n}<\/code><\/pre>\n\n\n\n<p>Na powy\u017cszych przyk\u0142adach widzimy, \u017ce w zale\u017cno\u015bci od miejsca, przypisali\u015bmy inny typ warto\u015bci do danej sta\u0142ej.<\/p>\n\n\n\n<p>W PHP 8.3, mo\u017cemy wyra\u017anie okre\u015bli\u0107 typ sta\u0142ej, co sprawia, \u017ce kod staje si\u0119 bardziej przewidywalny i bezpieczny.<\/p>\n\n\n\n<p>Nowy przyk\u0142ad w PHP 8.3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Configurable {\n\u00a0 \u00a0 const array SETTINGS = &#91;\"theme\" => \"dark\"]; \/\/ Jawnie okre\u015blamy, \u017ce SETTINGS jest tablic\u0105\n}\n\nclass WebPage implements Configurable {\n\u00a0 \u00a0 const array SETTINGS = &#91;\"theme\" => \"light\"]; \/\/ WebPage::SETTINGS musi by\u0107 tablic\u0105\n}\n\nclass MobilePage extends WebPage {\n\u00a0 \u00a0 const array SETTINGS = &#91;\"theme\" => \"mobile\", \"size\" => \"small\"]; \/\/ MobilePage::SETTINGS r\u00f3wnie\u017c musi by\u0107 tablic\u0105, ale mo\u017cemy zmieni\u0107 jej warto\u015bci\n}\n\n\/\/ Przyk\u0142ad b\u0142\u0119du\n\n\/\/ Fatal error: Cannot use string as value for class constant\n\/\/ WebPage::SETTINGS of type array\nclass ErrorPage implements Configurable {\n\u00a0 \u00a0 const array SETTINGS = \"error\"; \/\/ B\u0142\u0105d: SETTINGS musi by\u0107 tablic\u0105, a nie ci\u0105giem znak\u00f3w\n}<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, poprzez deklarowanie sta\u0142ych jako typowanych (np. <code>const array SETTINGS<\/code>), zapewniamy, \u017ce ka\u017cda implementacja interfejsu <code>Configurable<\/code> oraz dziedziczenie klas b\u0119dzie przestrzega\u0107 zadeklarowanego typu sta\u0142ej, unikaj\u0105c tym samym potencjalnych b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Atrybut #[Override] w PHP 8.3<\/h3>\n\n\n\n<p>Atrybut <code>#[Override]<\/code> w PHP 8.3 jest nowo\u015bci\u0105, kt\u00f3ra s\u0142u\u017cy do wskazywania, \u017ce dana metoda w klasie dziedzicz\u0105cej nadpisuje metod\u0119 z klasy bazowej. Jest to szczeg\u00f3lnie przydatne, gdy chcemy by\u0107 pewni, \u017ce nasza metoda nadal nadpisuje metod\u0119 rodzica, nawet je\u015bli w klasie bazowej dojdzie do zmian.<\/p>\n\n\n\n<p>Przyk\u0142ad u\u017cycia atrybutu <code>#[Override]<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>abstract class Vehicle\n{\n\u00a0 \u00a0 public function startEngine(): string\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 return \"Engine started\";\n\u00a0 \u00a0 }\n}\n\nfinal class Car extends Vehicle\n{\n\u00a0 \u00a0 #&#91;Override]\n\u00a0 \u00a0 public function startEngine(): string\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 return \"Car engine started\"; \/\/ Nadpisana metoda\n\u00a0 \u00a0 }\n}<\/code><\/pre>\n\n\n\n<p>Teraz, wyobra\u017amy sobie sytuacj\u0119, w kt\u00f3rej metoda w klasie bazowej <code>Vehicle<\/code> zmienia nazw\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>abstract class Vehicle\r\n{\r\n    public function igniteEngine(): string\r\n    {\r\n        return \"Engine started\";\r\n    }\r\n}<\/code><\/pre>\n\n\n\n<p>Dzi\u0119ki atrybutowi <code>#[Override]<\/code>, PHP wykryje, \u017ce metoda <code>startEngine()<\/code> w klasie <code>Car<\/code> ju\u017c nie nadpisuje \u017cadnej metody z klasy bazowej <code>Vehicle<\/code> i zg\u0142osi b\u0142\u0105d.<\/p>\n\n\n\n<p>Atrybut <code>#[Override]<\/code> jest przydatnym narz\u0119dziem do zapewnienia, \u017ce nasz kod zachowuje sp\u00f3jno\u015b\u0107, szczeg\u00f3lnie w du\u017cych i skomplikowanych projektach, gdzie zmiany w klasach bazowych mog\u0105 nie by\u0107 od razu zauwa\u017cone w klasach dziedzicz\u0105cych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Negatywne indeksy w tablicach (array)<\/h3>\n\n\n\n<p>W PHP 8.3 wprowadzono zmian\u0119 dotycz\u0105c\u0105 zachowania indeks\u00f3w negatywnych w tablicach. W poprzednich wersjach PHP, gdy dodawa\u0142e\u015b element do tablicy z u\u017cyciem negatywnego indeksu, a nast\u0119pnie dodawa\u0142e\u015b kolejny element bez okre\u015blenia indeksu, ten drugi element otrzymywa\u0142 zawsze indeks 0. W PHP 8.3 to zachowanie zosta\u0142o zmienione.<\/p>\n\n\n\n<p>Przyk\u0142ad w <strong>PHP przed wersj\u0105 8.3<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$myArray = &#91;];\n\n$myArray&#91;-3] = 'pierwszy';\n$myArray&#91;] = 'drugi';\n\nvar_export($myArray);\n\n\/\/ Wynik w starszych wersjach PHP:\n\/\/ array (\n\/\/ \u00a0 -3 => 'pierwszy',\n\/\/ \u00a0 0 => 'drugi',\n\/\/ )<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, po dodaniu 'pierwszy&#8217; pod indeksem -3, dodanie 'drugi&#8217; bez okre\u015blenia indeksu powoduje przypisanie mu indeksu 0.<\/p>\n\n\n\n<p>Teraz zobaczmy, jak dzia\u0142a to w <strong>PHP 8.3<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$myArray = &#91;];\n\n$myArray&#91;-3] = 'pierwszy';\n$myArray&#91;] = 'drugi';\n\nvar_export($myArray);\n\n\/\/ Wynik w PHP 8.3:\n\/\/ array (\n\/\/ \u00a0 -3 => 'pierwszy',\n\/\/ \u00a0 -2 => 'drugi',\n\/\/ )<\/code><\/pre>\n\n\n\n<p>W PHP 8.3, 'drugi&#8217; element zostaje automatycznie przypisany do nast\u0119pnego dost\u0119pnego negatywnego indeksu, w tym przypadku -2, co jest kontynuacj\u0105 od ostatniego u\u017cycia negatywnego indeksu. Ta zmiana sprawia, \u017ce zarz\u0105dzanie tablicami z u\u017cyciem negatywnych indeks\u00f3w jest bardziej przewidywalne i sp\u00f3jne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dynamiczny dost\u0119p do sta\u0142ych klas<\/h3>\n\n\n\n<p>Zmiana w PHP 8.3 dotycz\u0105ca dynamicznego dost\u0119pu do sta\u0142ych klas jest znacz\u0105ca. W poprzednich wersjach PHP (>= 8.2), jedyn\u0105 mo\u017cliwo\u015bci\u0105 pobrania warto\u015bci sta\u0142ej klasy dynamicznie by\u0142o u\u017cycie funkcji <code>constant()<\/code>. Natomiast w PHP 8.3 wprowadzono mo\u017cliwo\u015b\u0107 bezpo\u015bredniego dost\u0119pu do sta\u0142ych klas w spos\u00f3b dynamiczny.<\/p>\n\n\n\n<p>Przyk\u0142ad w PHP przed wersj\u0105 8.3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book {\r\n    const TITLE = '1984';\r\n}\r\n\r\n$constName = 'TITLE';\r\n\r\n\/\/ Mo\u017cliwe tylko za pomoc\u0105 funkcji constant()\r\necho constant(Book::class . '::' . $constName); \/\/ Wypisze '1984'\r\n\r\n\/\/ Poni\u017csze spowodowa\u0142oby b\u0142\u0105d sk\u0142adni w PHP >= 8.2.0\r\n\/\/ echo Book::{$constName};\r\n\/\/ ParseError: syntax error, unexpected token \";\", expecting \"(\".\r<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, pr\u00f3ba dynamicznego dost\u0119pu do sta\u0142ej klasy <code>Book::TITLE<\/code> za pomoc\u0105 sk\u0142adni <code>Book::{$constName}<\/code> spowodowa\u0142aby b\u0142\u0105d sk\u0142adni w PHP 8.2 i wcze\u015bniejszych wersjach.<\/p>\n\n\n\n<p>Teraz zobaczmy, jak to dzia\u0142a w PHP 8.3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Book {\n    const TITLE = '1984';\n}\n\n$constName = 'TITLE';\n\n\/\/ Teraz mo\u017cna dynamicznie uzyska\u0107 dost\u0119p do sta\u0142ej klasy\necho Book::{$constName}; \/\/ Wypisze '1984'<\/code><\/pre>\n\n\n\n<p>W PHP 8.3, sk\u0142adnia <code>Book::{$constName}<\/code> jest ju\u017c poprawna i umo\u017cliwia dynamiczne odwo\u0142ywanie si\u0119 do sta\u0142ej <code>TITLE<\/code> w klasie <code>Book<\/code>. Ta zmiana sprawia, \u017ce praca z klasami i ich sta\u0142ymi staje si\u0119 bardziej elastyczna i wydajna.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anonimowe klasy readonly<\/h3>\n\n\n\n<p>W PHP 8.3 wprowadzono znacz\u0105c\u0105 zmian\u0119, pozwalaj\u0105c\u0105 na oznaczanie anonimowych klas jako <code>readonly<\/code>. W poprzednich wersjach PHP nie by\u0142o to mo\u017cliwe, co ogranicza\u0142o elastyczno\u015b\u0107 i mo\u017cliwo\u015bci zastosowania anonimowych klas w niekt\u00f3rych scenariuszach.<\/p>\n\n\n\n<p>Oto spersonalizowany przyk\u0142ad ilustruj\u0105cy t\u0119 now\u0105 funkcjonalno\u015b\u0107:<\/p>\n\n\n\n<p>Przyk\u0142ad przed PHP 8.3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Tworzenie anonimowej klasy\r\n$vehicle = new class {\r\n    public function __construct(\r\n        public string $type = 'Car',\r\n        public string $color = 'Red'\r\n    ) {}\r\n};\r\n\r\n\/\/ W PHP przed 8.3 nie mo\u017cna by\u0142o u\u017cy\u0107 readonly w anonimowych klasach.\r<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, pr\u00f3ba oznaczenia anonimowej klasy jako <code>readonly<\/code> nie by\u0142aby mo\u017cliwa.<\/p>\n\n\n\n<p>Teraz zobaczmy zmian\u0119 w PHP 8.3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Tworzenie anonimowej klasy jako readonly w PHP 8.3\r\n$vehicle = new readonly class {\r\n    public function __construct(\r\n        public string $type = 'Car',\r\n        public string $color = 'Red'\r\n    ) {}\r\n};\r\n\r\n\/\/ Teraz mo\u017cemy tworzy\u0107 anonimowe klasy jako readonly.\r<\/code><\/pre>\n\n\n\n<p>W PHP 8.3, mo\u017cemy tworzy\u0107 anonimowe klasy z oznaczeniem <code>readonly<\/code>, co pozwala na wi\u0119ksz\u0105 kontrol\u0119 nad modyfikowalno\u015bci\u0105 w\u0142a\u015bciwo\u015bci obiektu. To ulepszenie przyczynia si\u0119 do lepszego zarz\u0105dzania stanem obiekt\u00f3w i zwi\u0119ksza bezpiecze\u0144stwo kodu poprzez zapobieganie niezamierzonej modyfikacji w\u0142a\u015bciwo\u015bci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Domy\u015blne warto\u015bci dla zmiennych \u015brodowiskowych<\/h3>\n\n\n\n<p>W PHP 8.3 wprowadzono bardzo przydatn\u0105 funkcj\u0119 umo\u017cliwiaj\u0105c\u0105 okre\u015blenie domy\u015blnej warto\u015bci dla zmiennych \u015brodowiskowych u\u017cywanych przy definiowaniu ustawie\u0144 w plikach INI. Za\u0142\u00f3\u017cmy, \u017ce pracujesz nad aplikacj\u0105, kt\u00f3ra korzysta z serwera FPM do obs\u0142ugi \u017c\u0105da\u0144. Chcesz skonfigurowa\u0107 port nas\u0142uchiwania serwera FPM w pliku konfiguracyjnym INI, ale tak\u017ce zapewni\u0107 domy\u015bln\u0105 warto\u015b\u0107, na wypadek gdyby zmienna \u015brodowiskowa nie zosta\u0142a zdefiniowana.<\/p>\n\n\n\n<p>Przed PHP 8.3, konfiguracja w pliku INI mog\u0142aby wygl\u0105da\u0107 tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;server]\r\nlisten = localhost:${MY_APP_FPM_PORT}\r<\/code><\/pre>\n\n\n\n<p>W tej konfiguracji, je\u015bli zmienna \u015brodowiskowa <code>MY_APP_FPM_PORT<\/code> nie jest zdefiniowana, konfiguracja nie b\u0119dzie mie\u0107 okre\u015blonej warto\u015bci dla portu nas\u0142uchiwania, co mo\u017ce prowadzi\u0107 do problem\u00f3w.<\/p>\n\n\n\n<p>Teraz, w PHP 8.3, mo\u017cesz doda\u0107 domy\u015bln\u0105 warto\u015b\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;server]\r\nlisten = localhost:${MY_APP_FPM_PORT:-8080}\r<\/code><\/pre>\n\n\n\n<p>W tym przypadku, je\u015bli zmienna <code>MY_APP_FPM_PORT<\/code> nie jest zdefiniowana, domy\u015blnie zostanie u\u017cyta warto\u015b\u0107 <code>8080<\/code>. To sprawia, \u017ce konfiguracja staje si\u0119 bardziej elastyczna i niezawodna, poniewa\u017c zapewnia sensown\u0105 warto\u015b\u0107 domy\u015bln\u0105, kt\u00f3ra mo\u017ce by\u0107 u\u017cyta, gdy zmienna \u015brodowiskowa nie jest dost\u0119pna.<\/p>\n\n\n\n<p>Ten przyk\u0142ad pokazuje, jak nowa funkcja w PHP 8.3 mo\u017ce upro\u015bci\u0107 zarz\u0105dzanie konfiguracjami w r\u00f3\u017cnych \u015brodowiskach, szczeg\u00f3lnie w kontek\u015bcie konteneryzacji, jak w przypadku Docker. Dzi\u0119ki temu rozwi\u0105zaniu nie musisz polega\u0107 wy\u0142\u0105cznie na blokach ENV w Dockerfile do okre\u015blania warto\u015bci domy\u015blnych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rozszerzenia dla klasy Randomizer<\/h3>\n\n\n\n<p>W PHP 8.3, klasa <code>Randomizer<\/code>, kt\u00f3ra zosta\u0142a wprowadzona w PHP 8.2, zosta\u0142a rozszerzona o nowe funkcje. Te dodatki u\u0142atwiaj\u0105 generowanie losowych danych w r\u00f3\u017cnych formatach. Oto spersonalizowane przyk\u0142ady wykorzystania tych nowych funkcji:<\/p>\n\n\n\n<p><strong>Randomizer::getBytesFromString(string $string, int $length): string<\/strong><\/p>\n\n\n\n<p>Ta metoda pozwala na generowanie ci\u0105gu o okre\u015blonej d\u0142ugo\u015bci, sk\u0142adaj\u0105cego si\u0119 z losowo wybranych bajt\u00f3w z podanego ci\u0105gu.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$randomizer = new Randomizer();\r\n\r\n$sourceString = \"abcdef123456\";\r\n$length = 4;\r\n\r\n$randomBytes = $randomizer->getBytesFromString($sourceString, $length);\r\n\r\necho $randomBytes; \/\/ Wy\u015bwietla ci\u0105g o d\u0142ugo\u015bci 4, zawieraj\u0105cy losowo wybrane znaki z $sourceString\r<\/code><\/pre>\n\n\n\n<p><strong>Randomizer::getFloat(float $min, float $max, IntervalBoundary $boundary = IntervalBoundary::ClosedOpen): float<\/strong><\/p>\n\n\n\n<p>Metoda <code>getFloat()<\/code> zwraca losow\u0105 liczb\u0119 zmiennoprzecinkow\u0105 pomi\u0119dzy <code>$min<\/code> a <code>$max<\/code>. Dzi\u0119ki parametrowi <code>IntervalBoundary<\/code>, mo\u017cesz okre\u015bli\u0107, czy warto\u015bci graniczne maj\u0105 by\u0107 w\u0142\u0105czone do zakresu (Closed) czy wy\u0142\u0105czone (Open).<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$randomizer = new Randomizer();\r\n\r\n$min = 0.5;\r\n$max = 2.5;\r\n\r\n$randomFloat = $randomizer->getFloat($min, $max, IntervalBoundary::ClosedOpen);\r\n\r\necho $randomFloat; \/\/ Wy\u015bwietla losow\u0105 warto\u015b\u0107 zmiennoprzecinkow\u0105 pomi\u0119dzy 0.5 (w\u0142\u0105cznie) a 2.5 (wy\u0142\u0105cznie)\r<\/code><\/pre>\n\n\n\n<p><strong>Randomizer::nextFloat(): float<\/strong><\/p>\n\n\n\n<p><code>nextFloat()<\/code> to skr\u00f3cona forma <code>getFloat(0, 1, IntervalBoundary::ClosedOpen)<\/code>, co oznacza, \u017ce zwraca losow\u0105 liczb\u0119 zmiennoprzecinkow\u0105 mi\u0119dzy 0 a 1, gdzie 1 jest wy\u0142\u0105czone.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$randomizer = new Randomizer();\r\n\r\n$randomFloat = $randomizer->nextFloat();\r\n\r\necho $randomFloat; \/\/ Wy\u015bwietla losow\u0105 warto\u015b\u0107 zmiennoprzecinkow\u0105 pomi\u0119dzy 0 (w\u0142\u0105cznie) a 1 (wy\u0142\u0105cznie)\r<\/code><\/pre>\n\n\n\n<p>Te nowe metody w klasie <code>Randomizer<\/code> znacznie poszerzaj\u0105 mo\u017cliwo\u015bci generowania losowych danych w PHP, co jest przydatne w wielu r\u00f3\u017cnych scenariuszach programistycznych, od testowania po generowanie unikalnych identyfikator\u00f3w sesji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bardziej odpowiednie wyj\u0105tki zwi\u0105zane z datami i czasami<\/h2>\n\n\n\n<p>W PHP 8.3 wprowadzono nowe, bardziej odpowiednie wyj\u0105tki zwi\u0105zane z datami i czasami, zast\u0119puj\u0105c og\u00f3lne wyj\u0105tki i b\u0142\u0119dy, kt\u00f3re by\u0142y wcze\u015bniej u\u017cywane. Te dedykowane wyj\u0105tki umo\u017cliwiaj\u0105 dok\u0142adniejsze i bardziej celowane obs\u0142ugiwanie b\u0142\u0119d\u00f3w w kodzie zwi\u0105zanym z datami i czasami.<\/p>\n\n\n\n<p>Spersonalizowane przyk\u0142ady zastosowania nowych wyj\u0105tk\u00f3w:<\/p>\n\n\n\n<p><strong>DateMalformedIntervalStringException<\/strong><\/p>\n\n\n\n<p>Ten wyj\u0105tek jest wyrzucany, gdy podany ci\u0105g znak\u00f3w dla <code>DateInterval<\/code> jest b\u0142\u0119dny lub niepoprawny.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\r\n    $interval = new DateInterval('niepoprawny ci\u0105g');\r\n} catch (DateMalformedIntervalStringException $e) {\r\n    echo \"B\u0142\u0105d: Niepoprawny ci\u0105g dla DateInterval.\";\r\n}\r<\/code><\/pre>\n\n\n\n<p><strong>DateInvalidOperationException<\/strong><\/p>\n\n\n\n<p>Ten wyj\u0105tek jest wyrzucany, na przyk\u0142ad, gdy pr\u00f3bujemy wykona\u0107 niedozwolon\u0105 operacj\u0119, jak odj\u0119cie specyfikacji czasu wzgl\u0119dnego.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$date = new DateTime();\r\n\r\ntry {\r\n    $date->sub(new DateInterval('PT30M')); \/\/ Za\u0142\u00f3\u017cmy, \u017ce operacja jest niedozwolona\r\n} catch (DateInvalidOperationException $e) {\r\n    echo \"B\u0142\u0105d: Operacja na DateTime jest niedozwolona.\";\r\n}\r<\/code><\/pre>\n\n\n\n<p><strong>DateRangeError<\/strong><\/p>\n\n\n\n<p><code>DateRangeError<\/code> jest wyj\u0105tkiem wyrzucanym na platformach 32-bitowych, gdy epoka nie mie\u015bci si\u0119 w zakresie integera w PHP.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try {\r\n    $date = new DateTime('@' . PHP_INT_MAX);\r\n} catch (DateRangeError $e) {\r\n    echo \"B\u0142\u0105d: Data poza zakresem.\";\r\n}\r<\/code><\/pre>\n\n\n\n<p>Te nowe wyj\u0105tki poprawiaj\u0105 czytelno\u015b\u0107 i dok\u0142adno\u015b\u0107 obs\u0142ugi b\u0142\u0119d\u00f3w zwi\u0105zanych z datami i czasami w PHP, umo\u017cliwiaj\u0105c bardziej precyzyjne reakcje na konkretne problemy. Warto jednak pami\u0119ta\u0107, \u017ce te zmiany mog\u0105 wprowadzi\u0107 pewne niekompatybilno\u015bci w starszym kodzie, zw\u0142aszcza na platformach 32-bitowych oraz w przypadku specyficznych operacji na datach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ulepszenie w obs\u0142udze b\u0142\u0119d\u00f3w dla funkcji unserialize()<\/h2>\n\n\n\n<p>W PHP 8.3 wprowadzono ulepszenie w obs\u0142udze b\u0142\u0119d\u00f3w dla funkcji <code>unserialize()<\/code>. Teraz, zamiast czasami generowa\u0107 ostrze\u017cenie typu <code>E_NOTICE<\/code>, funkcja ta b\u0119dzie zawsze emitowa\u0107 ostrze\u017cenie <code>E_WARNING<\/code> w przypadku napotkania problem\u00f3w.<\/p>\n\n\n\n<p>To ulepszenie sprawia, \u017ce obs\u0142uga b\u0142\u0119d\u00f3w jest bardziej sp\u00f3jna i widoczna, co pomaga w debugowaniu i utrzymaniu kodu.<\/p>\n\n\n\n<p>Oto przyk\u0142ad, ilustruj\u0105cy t\u0119 zmian\u0119 w obs\u0142udze b\u0142\u0119d\u00f3w. Za\u0142\u00f3\u017cmy, \u017ce mamy serializowany ci\u0105g znak\u00f3w reprezentuj\u0105cy obiekt, ale ci\u0105g ten zosta\u0142 uszkodzony lub jest niekompletny:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$serializedObject = 'O:8:\"MyObject\":1:{s:5:\"value\";s:5:\"Hello\";}'; \/\/ Uszkodzony lub niekompletny ci\u0105g\r\n\r\ntry {\r\n    $object = unserialize($serializedObject);\r\n} catch (Exception $e) {\r\n    echo \"Wyst\u0105pi\u0142 wyj\u0105tek: \" . $e->getMessage();\r\n}\r\n\r\n\/\/ W PHP przed 8.3, to mog\u0142oby generowa\u0107 E_NOTICE.\r\n\/\/ W PHP 8.3, zawsze generuje E_WARNING.\r<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, je\u015bli <code>unserialize()<\/code> napotka problem z uszkodzonym ci\u0105giem, zamiast generowa\u0107 <code>E_NOTICE<\/code>, co mog\u0142oby zosta\u0107 przeoczone w niekt\u00f3rych konfiguracjach logowania b\u0142\u0119d\u00f3w, funkcja ta zawsze wygeneruje ostrze\u017cenie <code>E_WARNING<\/code>. To u\u0142atwia wykrywanie i rozwi\u0105zywanie problem\u00f3w zwi\u0105zanych z deserializacj\u0105 danych.<\/p>\n\n\n\n<p>Warto zauwa\u017cy\u0107, \u017ce cz\u0119\u015b\u0107 proponowanych zmian RFC dotycz\u0105ca dodania wi\u0119cej wyj\u0105tk\u00f3w podczas dzia\u0142ania <code>unserialize()<\/code> nie zosta\u0142a zaakceptowana. Oznacza to, \u017ce w praktyce nadal nale\u017cy polega\u0107 na tradycyjnych mechanizmach obs\u0142ugi b\u0142\u0119d\u00f3w, takich jak kontrola warto\u015bci zwracanej i obs\u0142uga ostrze\u017ce\u0144.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zmieniono zachowanie funkcji array_sum() i array_product()<\/h2>\n\n\n\n<p>W PHP 8.3, zmieniono zachowanie funkcji <code>array_sum()<\/code> i <code>array_product()<\/code>, aby by\u0142y bardziej sp\u00f3jne z ich odpowiednikami zaimplementowanymi w przestrzeni u\u017cytkownika za pomoc\u0105 funkcji <code>array_reduce()<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zmiany i ich wp\u0142yw:<\/h3>\n\n\n\n<ol>\n<li><strong>Sp\u00f3jne zachowanie z <code>array_reduce()<\/code>:<\/strong> <code>array_sum()<\/code> i <code>array_product()<\/code> b\u0119d\u0105 teraz dzia\u0142a\u0107 tak samo jak ich warianty zaimplementowane za pomoc\u0105 <code>array_reduce()<\/code>. Oznacza to, \u017ce zamiast pomija\u0107 elementy tablicy b\u0119d\u0105ce obiektami lub tablicami, te funkcje b\u0119d\u0105 teraz wyrzuca\u0107 <code>TypeError<\/code>.<\/li>\n\n\n\n<li><strong>Emitowanie ostrze\u017cenia <code>E_WARNING<\/code> dla niekompatybilnych typ\u00f3w:<\/strong> Gdy funkcje napotkaj\u0105 typy danych, kt\u00f3re nie s\u0105 kompatybilne (np. ci\u0105gi znak\u00f3w w <code>array_product()<\/code>), b\u0119d\u0105 generowa\u0107 ostrze\u017cenie <code>E_WARNING<\/code>.<\/li>\n\n\n\n<li><strong>Wsparcie dla obiekt\u00f3w z numerycznym rzutowaniem:<\/strong> Funkcje b\u0119d\u0105 teraz wspiera\u0107 obiekty, kt\u00f3re mog\u0105 by\u0107 rzutowane na warto\u015bci numeryczne (np. poprzez implementacj\u0119 metody <code>__toString()<\/code> zwracaj\u0105cej warto\u015b\u0107 numeryczn\u0105), umo\u017cliwiaj\u0105c ich dodawanie lub mno\u017cenie.<\/li>\n<\/ol>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$array = &#91;2, 4, new MyClass(), 8];\r\n\r\ntry {\r\n    $sum = array_sum($array);\r\n    $product = array_product($array);\r\n} catch (TypeError $e) {\r\n    echo \"B\u0142\u0105d: Niekompatybilny typ danych w tablicy.\";\r\n}\r\n\r\n\/\/ Przed PHP 8.3, obiekt w tablicy zosta\u0142by pomini\u0119ty.\r\n\/\/ W PHP 8.3, powy\u017cszy kod spowoduje TypeError.<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, je\u015bli klasa <code>MyClass<\/code> nie mo\u017ce by\u0107 rzutowana na warto\u015b\u0107 numeryczn\u0105, <code>array_sum()<\/code> i <code>array_product()<\/code> w PHP 8.3 wyrzuc\u0105 wyj\u0105tek <code>TypeError<\/code>, w przeciwie\u0144stwie do starszych wersji PHP, gdzie obiekt zosta\u0142by pomini\u0119ty.<\/p>\n\n\n\n<p>Te zmiany wprowadzaj\u0105 wi\u0119ksz\u0105 konsekwencj\u0119 w zachowaniu tych funkcji oraz lepsz\u0105 obs\u0142ug\u0119 b\u0142\u0119d\u00f3w, co pomaga w unikaniu subtelnych b\u0142\u0119d\u00f3w i nieoczekiwanych zachowa\u0144 w kodzie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Naprawiono b\u0142\u0105d w widoczno\u015bci sta\u0142ych w interfejsach<\/h2>\n\n\n\n<p>W PHP 8.3 naprawiono b\u0142\u0105d zwi\u0105zany z widoczno\u015bci\u0105 sta\u0142ych w interfejsach, co mo\u017ce prowadzi\u0107 do przerwania kompatybilno\u015bci w niekt\u00f3rych przypadkach. Wcze\u015bniej, PHP nie sprawdza\u0142 zgodno\u015bci widoczno\u015bci sta\u0142ych podczas implementacji interfejsu. W PHP 8.3 ta zgodno\u015b\u0107 jest teraz egzekwowana, co oznacza, \u017ce sta\u0142e w klasie implementuj\u0105cej interfejs musz\u0105 mie\u0107 co najmniej tak\u0105 sam\u0105 widoczno\u015b\u0107, jak sta\u0142e zadeklarowane w interfejsie.<\/p>\n\n\n\n<p><strong>Zmiana i jej wp\u0142yw:<\/strong><\/p>\n\n\n\n<p>Wcze\u015bniej w PHP, mog\u0142e\u015b zadeklarowa\u0107 sta\u0142\u0105 w interfejsie jako publiczn\u0105, a nast\u0119pnie przes\u0142oni\u0107 j\u0105 w klasie implementuj\u0105cej ten interfejs przy u\u017cyciu mniejszej widoczno\u015bci (np. private). Teraz, w PHP 8.3, taka operacja spowoduje b\u0142\u0105d.<\/p>\n\n\n\n<p><strong>Przyk\u0142ad:<\/strong><\/p>\n\n\n\n<p>Przed PHP 8.3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface I {\r\n    public const FOO = 'foo';\r\n}\r\n\r\nclass C implements I {\r\n    private const FOO = 'foo'; \/\/ To by\u0142o dozwolone wcze\u015bniej\r\n}\r<\/code><\/pre>\n\n\n\n<p>W PHP 8.3, pr\u00f3ba zadeklarowania <code>private const FOO<\/code> w klasie <code>C<\/code>, kt\u00f3ra implementuje interfejs <code>I<\/code> z <code>public const FOO<\/code>, spowoduje b\u0142\u0105d. Poprawny kod powinien wygl\u0105da\u0107 nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface I {\r\n    public const FOO = 'foo';\r\n}\r\n\r\nclass C implements I {\r\n    public const FOO = 'foo'; \/\/ Widoczno\u015b\u0107 musi by\u0107 zgodna z deklaracj\u0105 w interfejsie\r\n}\r<\/code><\/pre>\n\n\n\n<p>To ulepszenie pomaga zapewni\u0107 sp\u00f3jno\u015b\u0107 i przewidywalno\u015b\u0107 w zakresie widoczno\u015bci sta\u0142ych w interfejsach i klasach implementuj\u0105cych te interfejsy. Jednak\u017ce, mo\u017ce to wymaga\u0107 modyfikacji istniej\u0105cego kodu w niekt\u00f3rych projektach, aby zapewni\u0107 zgodno\u015b\u0107 z nowym wymogiem PHP 8.3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zmiana sposobu, w jaki traktowane s\u0105 statyczne w\u0142a\u015bciwo\u015bci w traitach<\/h2>\n\n\n\n<p>W PHP 8.3 wprowadzono zmian\u0119 dotycz\u0105c\u0105 sposobu, w jaki traktowane s\u0105 statyczne w\u0142a\u015bciwo\u015bci w traitach.<\/p>\n\n\n\n<p>W poprzednich wersjach PHP, gdy klasa u\u017cywa\u0142a traitu zawieraj\u0105cego statyczn\u0105 w\u0142a\u015bciwo\u015b\u0107, ta w\u0142a\u015bciwo\u015b\u0107 by\u0142a wsp\u00f3\u0142dzielona mi\u0119dzy wszystkimi klasami u\u017cywaj\u0105cymi tego traitu. Teraz, w PHP 8.3, u\u017cycie statycznej w\u0142a\u015bciwo\u015bci w trait sprawi, \u017ce zostanie ona zadeklarowana na nowo w ka\u017cdej klasie u\u017cywaj\u0105cej tego traitu, tworz\u0105c oddzielne miejsce przechowywania dla statycznej w\u0142a\u015bciwo\u015bci w ka\u017cdej z tych klas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nowa funkcja mb_str_pad()<\/h2>\n\n\n\n<p>W PHP 8.3 wprowadzono now\u0105 funkcj\u0119 <code>mb_str_pad()<\/code>, kt\u00f3ra jest odpowiednikiem <code>str_pad()<\/code> dla string\u00f3w wielobajtowych. To wa\u017cne ulepszenie, zw\u0142aszcza przy pracy z j\u0119zykami i znakami, kt\u00f3re wykorzystuj\u0105 kodowanie wielobajtowe, takie jak UTF-8.<\/p>\n\n\n\n<p><code>mb_str_pad()<\/code> pozwala na uzupe\u0142nienie stringa do okre\u015blonej d\u0142ugo\u015bci za pomoc\u0105 innego stringa. Jest to szczeg\u00f3lnie przydatne, gdy pracujemy z tekstem w kodowaniu wielobajtowym, gdzie zwyk\u0142a funkcja <code>str_pad()<\/code> mo\u017ce nie dzia\u0142a\u0107 poprawnie ze wzgl\u0119du na r\u00f3\u017cn\u0105 d\u0142ugo\u015b\u0107 bajt\u00f3w reprezentuj\u0105cych znaki.<\/p>\n\n\n\n<p><strong>Funkcja wygl\u0105da nast\u0119puj\u0105co:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function mb_str_pad(\r\n    string $string, \r\n    int $length, \r\n    string $pad_string = \" \", \r\n    int $pad_type = STR_PAD_RIGHT, \r\n    ?string $encoding = null\r\n): string {}\r<\/code><\/pre>\n\n\n\n<p><strong>Parametry<\/strong>:<\/p>\n\n\n\n<ul>\n<li><code>$string<\/code>: String, kt\u00f3ry ma by\u0107 uzupe\u0142niony.<\/li>\n\n\n\n<li><code>$length<\/code>: Docelowa d\u0142ugo\u015b\u0107 stringa po uzupe\u0142nieniu.<\/li>\n\n\n\n<li><code>$pad_string<\/code>: String u\u017cywany do uzupe\u0142nienia <code>$string<\/code> (domy\u015blnie spacja).<\/li>\n\n\n\n<li><code>$pad_type<\/code>: Typ uzupe\u0142nienia (STR_PAD_RIGHT, STR_PAD_LEFT, STR_PAD_BOTH).<\/li>\n\n\n\n<li><code>$encoding<\/code>: Opcjonalny parametr okre\u015blaj\u0105cy kodowanie znak\u00f3w (np. &#8222;UTF-8&#8221;).<\/li>\n<\/ul>\n\n\n\n<p>Przyk\u0142ad u\u017cycia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$string = \"\u3053\u3093\u306b\u3061\u306f\"; \/\/ Japo\u0144skie powitanie \"konnichiwa\"\r\n$paddedString = mb_str_pad($string, 10, \"_\", STR_PAD_BOTH, \"UTF-8\");\r\n\r\necho $paddedString; \/\/ Wy\u015bwietli string uzupe\u0142niony podkre\u015blnikami do 10 znak\u00f3w\r<\/code><\/pre>\n\n\n\n<p>W tym przyk\u0142adzie, <code>mb_str_pad()<\/code> uzupe\u0142nia string &#8222;\u3053\u3093\u306b\u3061\u306f&#8221; do d\u0142ugo\u015bci 10 znak\u00f3w, u\u017cywaj\u0105c podkre\u015blnik\u00f3w i centruj\u0105c tekst. Dzi\u0119ki obs\u0142udze UTF-8, ka\u017cdy japo\u0144ski znak jest poprawnie traktowany jako pojedynczy znak, co zapewnia prawid\u0142owe uzupe\u0142nienie.<\/p>\n\n\n\n<p>Dodanie <code>mb_str_pad()<\/code> do PHP 8.3 znacznie u\u0142atwia prac\u0119 z tekstami w r\u00f3\u017cnych j\u0119zykach i kodowaniach, eliminuj\u0105c problemy zwi\u0105zane z niew\u0142a\u015bciwym uzupe\u0142nianiem string\u00f3w wielobajtowych.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je\u015bli interesujesz si\u0119 rozwojem technologii webowych lub rozwijasz si\u0119 jako programista, z pewno\u015bci\u0105 ucieszy Ci\u0119 wiadomo\u015b\u0107, \u017ce w\u0142a\u015bnie zosta\u0142o wydane [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":17268,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ep_exclude_from_search":false,"footnotes":""},"categories":[46,55],"tags":[],"blocksy_meta":[],"acf":[],"featured_image_urls":{"full":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg",1280,720,false],"thumbnail":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-150x150.jpg",150,150,true],"medium":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-300x169.jpg",300,169,true],"medium_large":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-768x432.jpg",768,432,true],"large":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg",1280,720,false],"2048x2048":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg",1280,720,false],"yarpp-thumbnail":["https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3-120x120.jpg",120,120,true]},"post_excerpt_stackable":"<p>Je\u015bli interesujesz si\u0119 rozwojem technologii webowych lub rozwijasz si\u0119 jako programista, z pewno\u015bci\u0105 ucieszy Ci\u0119 wiadomo\u015b\u0107, \u017ce w\u0142a\u015bnie zosta\u0142o wydane PHP 8.3! Ta najnowsza wersja jednego z najpopularniejszych j\u0119zyk\u00f3w programowania do tworzenia aplikacji internetowych przynosi ze sob\u0105 szereg innowacji i ulepsze\u0144. W tym artykule przybli\u017cymy, co dok\u0142adnie nowego oferuje aktualizacja PHP 8.3. Wydanie PHP 8.3 to nie tylko kolejna aktualizacja \u2014 to kolejny krok na drodze ulepszania tego j\u0119zyka programowania, a tak\u017ce zwi\u0119kszania jego wydajno\u015bci. Nowe funkcje mog\u0105 znacz\u0105co wp\u0142yn\u0105\u0107 na Twoje projekty i aplikacje. Jednak to nie wszystko. W tym artykule wyja\u015bnimy, opr\u00f3cz zmian w PHP 8.3, jak aktualizacja&hellip;<\/p>\n","category_list":"<a href=\"https:\/\/www.lh.pl\/pomoc\/c\/serwery\/\" rel=\"category tag\">Serwery<\/a>, <a href=\"https:\/\/www.lh.pl\/pomoc\/c\/strony-internetowe\/\" rel=\"category tag\">Strony internetowe<\/a>","author_info":{"name":"B\u0142a\u017cej Starosta","url":"https:\/\/www.lh.pl\/pomoc\/author\/blazej\/"},"comments_num":"0 comments","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP 8.3 - co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci - Strony internetowe LH.pl<\/title>\n<meta name=\"description\" content=\"Nowa wersja j\u0119zyka programowania PHP - PHP 8.3 zosta\u0142a wydana 23 listopada 2023 roku. Sprawd\u017a list\u0119 nowo\u015bci, nowych funkcji i jak wp\u0142ywa na wydajno\u015b\u0107!\" \/>\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.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP 8.3 - co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci - Strony internetowe LH.pl\" \/>\n<meta property=\"og:description\" content=\"Nowa wersja j\u0119zyka programowania PHP - PHP 8.3 zosta\u0142a wydana 23 listopada 2023 roku. Sprawd\u017a list\u0119 nowo\u015bci, nowych funkcji i jak wp\u0142ywa na wydajno\u015b\u0107!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\" \/>\n<meta property=\"og:site_name\" content=\"LH.pl\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wwwlhpl\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-30T14:18:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-30T14:18:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"B\u0142a\u017cej Starosta\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"B\u0142a\u017cej Starosta\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\"},\"author\":{\"name\":\"B\u0142a\u017cej Starosta\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#\/schema\/person\/5a40f9de0b90355373e84b6d7087aeff\"},\"headline\":\"PHP 8.3 &#8211; co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci\",\"datePublished\":\"2023-11-30T14:18:26+00:00\",\"dateModified\":\"2023-11-30T14:18:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\"},\"wordCount\":2950,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg\",\"articleSection\":[\"Serwery\",\"Strony internetowe\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\",\"url\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\",\"name\":\"PHP 8.3 - co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci - Strony internetowe LH.pl\",\"isPartOf\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg\",\"datePublished\":\"2023-11-30T14:18:26+00:00\",\"dateModified\":\"2023-11-30T14:18:28+00:00\",\"description\":\"Nowa wersja j\u0119zyka programowania PHP - PHP 8.3 zosta\u0142a wydana 23 listopada 2023 roku. Sprawd\u017a list\u0119 nowo\u015bci, nowych funkcji i jak wp\u0142ywa na wydajno\u015b\u0107!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage\",\"url\":\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg\",\"contentUrl\":\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg\",\"width\":1280,\"height\":720,\"caption\":\"PHP 8.3 - co nowego?\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Lh.pl Pomoc\",\"item\":\"https:\/\/www.lh.pl\/pomoc\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strony internetowe\",\"item\":\"https:\/\/www.lh.pl\/pomoc\/c\/strony-internetowe\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PHP 8.3 &#8211; co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#website\",\"url\":\"https:\/\/www.lh.pl\/pomoc\/\",\"name\":\"LH.pl\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.lh.pl\/pomoc\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#organization\",\"name\":\"LH.pl\",\"url\":\"https:\/\/www.lh.pl\/pomoc\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2019\/09\/LH-logo-color-RGB.png\",\"contentUrl\":\"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2019\/09\/LH-logo-color-RGB.png\",\"width\":771,\"height\":289,\"caption\":\"LH.pl\"},\"image\":{\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/wwwlhpl\",\"https:\/\/www.instagram.com\/wwwlhpl\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.lh.pl\/pomoc\/#\/schema\/person\/5a40f9de0b90355373e84b6d7087aeff\",\"name\":\"B\u0142a\u017cej Starosta\",\"description\":\"Ma do\u015bwiadczenie w tworzeniu oraz prowadzeniu stron WWW, od blog\u00f3w a\u017c po sklepy internetowe. Od lat uwa\u017cnie \u015bledzi rozw\u00f3j WordPressa i jego wp\u0142yw na rynek tw\u00f3rc\u00f3w stron internetowych. Stara si\u0119 by\u0107 na bie\u017c\u0105co ze wszystkimi nowinkami technologicznymi i dzieli\u0107 si\u0119 swoj\u0105 wiedz\u0105.\",\"sameAs\":[\"https:\/\/www.lh.pl\"],\"url\":\"https:\/\/www.lh.pl\/pomoc\/author\/blazej\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP 8.3 - co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci - Strony internetowe LH.pl","description":"Nowa wersja j\u0119zyka programowania PHP - PHP 8.3 zosta\u0142a wydana 23 listopada 2023 roku. Sprawd\u017a list\u0119 nowo\u015bci, nowych funkcji i jak wp\u0142ywa na wydajno\u015b\u0107!","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.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/","og_locale":"pl_PL","og_type":"article","og_title":"PHP 8.3 - co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci - Strony internetowe LH.pl","og_description":"Nowa wersja j\u0119zyka programowania PHP - PHP 8.3 zosta\u0142a wydana 23 listopada 2023 roku. Sprawd\u017a list\u0119 nowo\u015bci, nowych funkcji i jak wp\u0142ywa na wydajno\u015b\u0107!","og_url":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/","og_site_name":"LH.pl","article_publisher":"https:\/\/www.facebook.com\/wwwlhpl","article_published_time":"2023-11-30T14:18:26+00:00","article_modified_time":"2023-11-30T14:18:28+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg","type":"image\/jpeg"}],"author":"B\u0142a\u017cej Starosta","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"B\u0142a\u017cej Starosta","Szacowany czas czytania":"19 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#article","isPartOf":{"@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/"},"author":{"name":"B\u0142a\u017cej Starosta","@id":"https:\/\/www.lh.pl\/pomoc\/#\/schema\/person\/5a40f9de0b90355373e84b6d7087aeff"},"headline":"PHP 8.3 &#8211; co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci","datePublished":"2023-11-30T14:18:26+00:00","dateModified":"2023-11-30T14:18:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/"},"wordCount":2950,"commentCount":0,"publisher":{"@id":"https:\/\/www.lh.pl\/pomoc\/#organization"},"image":{"@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg","articleSection":["Serwery","Strony internetowe"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/","url":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/","name":"PHP 8.3 - co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci - Strony internetowe LH.pl","isPartOf":{"@id":"https:\/\/www.lh.pl\/pomoc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage"},"image":{"@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg","datePublished":"2023-11-30T14:18:26+00:00","dateModified":"2023-11-30T14:18:28+00:00","description":"Nowa wersja j\u0119zyka programowania PHP - PHP 8.3 zosta\u0142a wydana 23 listopada 2023 roku. Sprawd\u017a list\u0119 nowo\u015bci, nowych funkcji i jak wp\u0142ywa na wydajno\u015b\u0107!","breadcrumb":{"@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#primaryimage","url":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg","contentUrl":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2023\/11\/php-8-3.jpg","width":1280,"height":720,"caption":"PHP 8.3 - co nowego?"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lh.pl\/pomoc\/php-8-3-co-nowego-w-najnowszej-wersji-php-zmiany-i-nowosci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Lh.pl Pomoc","item":"https:\/\/www.lh.pl\/pomoc\/"},{"@type":"ListItem","position":2,"name":"Strony internetowe","item":"https:\/\/www.lh.pl\/pomoc\/c\/strony-internetowe\/"},{"@type":"ListItem","position":3,"name":"PHP 8.3 &#8211; co nowego w najnowszej wersji PHP? Zmiany i nowo\u015bci"}]},{"@type":"WebSite","@id":"https:\/\/www.lh.pl\/pomoc\/#website","url":"https:\/\/www.lh.pl\/pomoc\/","name":"LH.pl","description":"","publisher":{"@id":"https:\/\/www.lh.pl\/pomoc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lh.pl\/pomoc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/www.lh.pl\/pomoc\/#organization","name":"LH.pl","url":"https:\/\/www.lh.pl\/pomoc\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.lh.pl\/pomoc\/#\/schema\/logo\/image\/","url":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2019\/09\/LH-logo-color-RGB.png","contentUrl":"https:\/\/www.lh.pl\/pomoc\/wp-content\/uploads\/2019\/09\/LH-logo-color-RGB.png","width":771,"height":289,"caption":"LH.pl"},"image":{"@id":"https:\/\/www.lh.pl\/pomoc\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/wwwlhpl","https:\/\/www.instagram.com\/wwwlhpl\/"]},{"@type":"Person","@id":"https:\/\/www.lh.pl\/pomoc\/#\/schema\/person\/5a40f9de0b90355373e84b6d7087aeff","name":"B\u0142a\u017cej Starosta","description":"Ma do\u015bwiadczenie w tworzeniu oraz prowadzeniu stron WWW, od blog\u00f3w a\u017c po sklepy internetowe. Od lat uwa\u017cnie \u015bledzi rozw\u00f3j WordPressa i jego wp\u0142yw na rynek tw\u00f3rc\u00f3w stron internetowych. Stara si\u0119 by\u0107 na bie\u017c\u0105co ze wszystkimi nowinkami technologicznymi i dzieli\u0107 si\u0119 swoj\u0105 wiedz\u0105.","sameAs":["https:\/\/www.lh.pl"],"url":"https:\/\/www.lh.pl\/pomoc\/author\/blazej\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/posts\/17265"}],"collection":[{"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/comments?post=17265"}],"version-history":[{"count":2,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/posts\/17265\/revisions"}],"predecessor-version":[{"id":17269,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/posts\/17265\/revisions\/17269"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/media\/17268"}],"wp:attachment":[{"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/media?parent=17265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/categories?post=17265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lh.pl\/pomoc\/wp-json\/wp\/v2\/tags?post=17265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}