Verzi PHP 8 a 8.1 jsme Vám představili v loňském roce. V dnešním článku pro Vás máme informace o dalším rozšíření, a to o verzi PHP 8.2 kterou si můžete aktivovat v administraci hostingových služeb.
Přiblížíme si novinky v PHP 8.2, zastaralé funkce v PHP 8.2 a v neposlední řadě Vám také poradíme, jak provést změnu PHP u našich webhostingových služeb.
Obsah
Novinky v PHP 8.2
Verze 8.2 byla vydána 8. prosince 2022. Projdeme si nové důležité funkce jako jsou třídy jen pro čtení, rozšíření pro náhodná čísla, samostatné nové typy null, false a true a také zastaralé funkce a syntaxe. Opravena byla velká řada chyb, kompletní seznam naleznete v přehledu změn.
Type System Improvements
Tato verze řeší několik nedostatků a omezení typového systému PHP. Umožňuje aplikacím PHP využívání lepší typové bezpečnosti. To zahrnuje přidání podpory pro true
typ a povolení použití typů null
a false
jako samostatných typů.
function alwaysReturnsFalse(): false {}
function alwaysReturnsNull(): null {}
function alwaysReturnsTrue(): true {}
Podpora pro true
a false
jako samostatné typy umožňuje nahradit bool
deklarace typu, pokud je booleovská hodnota vždy stejná.
Nové random
rozšíření
V průběhu historie PHP podporoval různé generátory náhodných čísel (RNG). PHP 8.2 jde o krok dále tím, že refaktoruje všechny funkce související s RNG na nové rozšíření s názvem random
.
Rozšířenírandom
poskytuje stejnou funkcionalitu bez narušení jakýchkoli API , takže stávající funkce rand
, mt_rand
, random_bytes
a random_int
nadále fungují beze změn. Poskytuje také nové OOP API pro generování náhodných čísel se zásuvnou architekturou, takže je nyní snadné klamat RNG a poskytovat nové RNG, díky čemuž jsou aplikace PHP bezpečné a snadno testovatelné.
Třídy pouze pro čtení
PHP 8.1 přidalo podporu pro readonly
vlastnosti. PHP 8.2 posouvá readonly
vlastnosti o krok dále, a to pomocí readonly
tříd. Když je třída deklarována jako readonly
, všechny její vlastnosti jsou automaticky deklarovány readonly
.
PHP 8.1
class User {
public readonly int $uid;
public readonly string $username;
}
PHP 8.2
readonly class User {
public int $uid;
public string $username;
}
Konstanty ve vlastnostech
trait FooBar {
const FOO = 'foo';
private consts BAR = 'bar';
final const BAZ = 'baz';
final protected const QUX = 'qux';
}
class Test {
use FooBar;
}
echo Test::BAZ; // 'bar'
Nyní je možné deklarovat konstanty ve vlastnostech . K vlastnostem nelze přistupovat přímo, ale tyto konstanty se stanou konstantami třídy, když třída vlastnost používá. To v PHP 8.1 a starších nebylo povoleno. Ke konstantám vlastností nelze přistupovat přímo (tj FooBar::FOO
. nejsou povoleny). Konstanty vlastností také nesmí kolidovat s jinými vlastnostmi nebo bezprostřední třídou, která je používá. Podpora úpravy hodnot citlivých parametrů
PHP 8.2 přidává nový vestavěný parametr Attribute s názvem #[\SensitiveParameter], který zajišťuje, že PHP upravuje skutečnou hodnotu v trasování zásobníku a chybových zprávách.
Funkce, které přijímají hesla, soukromé klíče nebo jinak citlivé informace, mohou deklarovat parametry pomocí #[\SensitiveParameter]
atributu. Pokud volání funkce v něm způsobí chybu PHP nebo výjimku, skutečná hodnota předaná tomuto parametru bude nahrazena objektem \SensitiveparameterValue.
Nové funkce a třídy
PHP 8.2 přináší kromě hlavních nových funkcí také sadu nových funkcí a tříd. Více o změnách v PHP 8.2 se můžete dočíst například v článku What’s new in PHP 8.2
Zastaralé funkce a syntaxe v PHP 8.2
Když je syntaxe, funkce nebo vlastnost zastaralá, PHP vydá oznámení o ukončení, které by nemělo narušit aplikace PHP, ale bude zaznamenáno do protokolu chyb. PHP 8.2 přináší slušný podíl zavržení.
Jedním z nejpozoruhodnějších zavržení v PHP 8.2 je, že zavrhuje vlastnosti třídy, které jsou dynamicky deklarovány. Existuje možnost neúčasti, ale doporučený přístup je deklarovat vlastnosti třídy v deklaraci třídy, nejlépe také s deklarací typu. Je pravděpodobné, že touto změnou bude ovlivněno mnoho starších aplikací PHP, protože starší aplikace mají tendenci nedeklarovat vlastnosti třídy, když jsou rozšířeny nebo se vyvíjely v průběhu let se změnami.
class User {
public string $name;
}
$user = new User();
$user->name = 'Foo';
PHP 8.2 konečně také zavrhuje funkce utf8_encode
autf8_decode
, které byly bohužel pojmenovány, aniž by bylo poznamenáno, že pouze kódují/dekódují z Latin 1
(ISO-8859-1). Většina aplikací PHP, které tyto funkce používají, si tento nedostatek obvykle neuvědomuje. Mezi doporučené náhrady patří lepší funkce poskytované rozšířeními mbstring
, iconv
a intl
.
Změna verze PHP
Změnit si verzi PHP můžete snadno přes naši administraci. Přehledný návod jak na to, máme v naší znalostní bázi: Změna verze PHP. Změna verze PHP se u Vašeho webu projeví do 15 minut.
Důrazně doporučujeme všem zákazníkům, aby dbali na bezpečnost svých PHP aplikací a přecházeli na novější verze PHP z důvodu bezpečnosti, jakmile to jejich aplikace umožňuje.
Pokud si s provedením změny nejste jisti nebo potřebujete poradit, prosím, kontaktujte naši zákaznickou podporu, která vám ráda zodpoví veškeré dotazy.