A PHP egy szkriptnyelv, amelyet nagyszámú felhasználó használ webfejlesztési célokra. A PHP legújabb stabil és frissített verziója, a 8.3 2023.11.23-án jelent meg. A 2000-ben megjelent PHP 3.x óta számos újítás és változás történt. A PHP még mindig a legnépszerűbb webfejlesztési (webdizájn) nyelvek közé tartozik, amelyeket nagyon nagy közönség használ. Ebben a cikkben kódpéldákkal vizsgáljuk és elemezzük a PHP 8.3 újításait és változásait.
PHP 8.3 főbb új szolgáltatások és fejlesztések
A PHP 8.3-ban számos jelentős újítás és fejlesztés található az előző PHP 8.2-hez képest. Ugyanakkor néhány funkció elavult. Most egyenként vizsgáljuk meg az újításokat és fejlesztéseket kódpéldákkal.
Beírt osztálykonstansok
A típus deklarálása nagyon fontos funkció a fejlesztők számára, amely növeli a stabilitást és csökkenti a hibaarányt a webfejlesztés során. A PHP 7.4-ben hozzáadásra került egy osztály tulajdonságainak típusdeklarációs funkciója. Bár a későbbi verziókban számos fejlesztés történt ezen a funkción, ez a funkció még mindig nem volt elérhető az osztály állandói számára. A PHP 8.3-mal most már lehetőség van az osztályokban lévő konstansok típusainak deklarálására.
// Doğru kullanım:
class MyClass {
// Bildirilen tür ve değer aynı
const string VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür ile değer farklı
const int VERSION = "PHP 8.3"; // değer string
}
// Hatalı kullanım:
class MyClass {
// Bildirilen tür sınıf sabitleri için desteklenmiyor
const void VERSION = "PHP 8.3"; // değer string
}Egyes típusdeklarációk nem támogatottak az osztálykonstansoknál.
Nem támogatott típusdeklarációk az osztálykonstansokhoz: void, callable, never
Egy új függvény: json_validate()
Amikor JSON formátumú adatokkal dolgozunk (json-kódolt adatok), az adatok felhasználása előtt ellenőriznünk kell, hogy a bejövő adatok érvényesek-e. Ezt a PHP 8.3 előtti verziókban a következő vagy hasonló módszerekkel tettük.
// PHP 8.3'ten önceki sürümlerde JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_last_error() === JSON_ERROR_NONE) {
// $data ile gerçekleştirilecek işlemler
}Ebben a régi példában a JSON-adatok érvényesítésekor a PHP jelentős memóriát fogyaszthat, az adatok méretétől függően. A PHP 8.3-ban egy új PHP függvény került hozzáadásra, amely teljesítményorientált gyors megoldást hoz létre: json_validate(). Az alábbiakban ennek a funkciónak a használati forgatókönyvét mutatjuk be.
// PHP 8.3'te JSON verisini doğrulama
$data = $json_decode($maybeJSON);
if (json_validate($maybeJSON)) {
// $data ile gerçekleştirilecek işlemler
}Egy új funkció: #[Override]
Az interfészek PHP-ben való implementálásakor részletes funkcionalitást biztosítunk az interfész metódusaihoz. Egy osztály példányának létrehozásakor felülbírálhatjuk a szülőmetódusokat, ha létrehozunk egy alternatív verziót azonos névvel és kompatibilis aláírással. Ez komoly problémákat okozhat a szoftverben. Röviden, a probléma az, hogy úgy gondoljuk, hogy egy kis figyelmen kívül hagyott elírás következtében felülírtuk a fő módszert.
A PHP 8.3 #[Override] funkciója megoldást nyújt erre a problémára. Most lássuk ezt a példában.
class A {
protected function myOverrideFunc(): void {}
// Doğru kullanım
// Bu örnek çalışacak
// Üstteki sınıfta ilgili method var ve geçersiz kılındı
class B extends A {
#[\Override]
public function myOverrideFunc(): void {}
// Hatalı kullanım
// Bu örnek çalışmayacak, çünkü ana sınıfta method yok
// Muhtemelen gözden kaçan bir yazım hatası
class C extends A {
#[\Override]
public function myOverrideFunction(): void {}
}Csak olvasható tulajdonságok mély klónozása
A PHP bevezette az egyes osztálytulajdonságok írásvédettként való deklarálásának lehetőségét a PHP 8.1-ben, és a PHP 8.2-ben a teljes osztályhoz való hozzárendelését. A legtöbb webfejlesztő azonban úgy gondolta, hogy az ilyen funkciókat tartalmazó osztályokkal való munkavégzés során fellépő korlátozások megakadályozzák a programozási logika gyakorlatiasságát.
Ezen változtatni RFC Két fő ajánlás született:
csak olvasható
readonlylehetővé téve a nem engedélyezett osztályok bővítésétreadonlylehetővé teszi a funkciók újraindítását a klónozás során
A második javaslatot a PHP 8.3 tartalmazza. Ez az új megközelítés hozzáadódott a PHP 8.3-hoz readonly tulajdonságokkal rendelkező osztály példányaireadonly tulajdonságok) __clone Mágikus módszerével lehetővé teszi az újraindítást.
Ez az RFC kódpélda segíthet megértenünk, hogyan működik ez az új módszer:
Osztálykonstansok és Enum-tagok dinamikus lekérése
A PHP többi szolgáltatásától eltérően az osztálykonstansok és az enum tagok változónevekkel való rögzítése egy kicsit bonyolultabb. A PHP 8.3 előtt ezt az alábbi példához hasonlóan megtehettük:
class Foo {
public function __construct(
public readonly DateTime $bar,
public readonly DateTime $baz
) {}
public function __clone() {
// Klon çağrıldığında $bar yeni bir DateTime alacak
$this->bar = clone $this->bar;
// Ardından bu metod çağrılacak
$this->cloneBaz();
}
private function cloneBaz() {
// Bu __clone içinden çağrıldığından dolayı doğru bir kullanımdır
unset($this->baz);
}
}
$foo = new Foo(new DateTime(), new DateTime());
$foo2 = clone $foo;class MyClass {
public const THE_CONST = 9;
}
enum MyEnum: int {
case FirstMember = 9;
case SecondMember = 10;
}
$constantName = 'THE_CONST';
$memberName = 'FirstMember';
echo constant('MyClass::' . $constantName);
echo constant('MyEnum::' . #memberName)->value;Most kapjuk meg az értékeket a fenti példában szereplő osztály és enum definíciók használatával PHP 8.3-ban:
$constantName = 'THE_CONST';
$memberName = 'FirstNumber';
echo MyClass::{$constantName};
echo MyEnum::{$memberName}->value;Egy új módszer: getBytesFromString()
Elmondhatjuk, hogy ez a módszer volt a legváratlanabb a PHP 8.3-ban hozzáadott szolgáltatások közül: Véletlenszerű szöveg generálása előre jóváhagyott karaktergyűjtemény segítségével.
Ez az új módszer nagyon egyszerű és világos. A metódushoz erőforrásként adunk néhány karaktert, és megadjuk, hogy ebből hányat szeretnénk használni. Ez minden! Most a módszerünk véletlenszerű karakterekkel adja vissza az eredményeket, amíg el nem éri a megadott hosszúságot. Most tisztázzuk ezt egy példával
$generateRandomString = new Random\Randomizer();
$allowedChars = 'ABCDEFGHJKMNPQRSTVWXYZ';
$generateRandomString->getBytesFromString($allowedChars, 6) // "MBDSFD" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 6) // "DJSDKA" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 4) // "SDLA" - rastgele gelen veriElőfordulhat, hogy a kimenet hosszabb, mint az általunk megadott karakterek teljes hossza. Ezt tettük az alábbi példában:
$generateRandomString = new Random\Randomizer();
$allowedChars = '123456';
$generateRandomString->getBytesFromString($allowedChars, 8) // "47384252" - rastgele gelen veriHa a paraméterként megadott karakterek mindegyike eltérő, akkor annak a valószínűsége, hogy melyiket választjuk, egyenlő. Azonban több azonos karaktert is előállíthatunk a kimenetben, ha egynél több azonos karaktert adunk a támogatott karakterlistánkhoz. Ezt mutattuk be a következő példában.
$generateRandomString = new Random\Randomizer();
$allowedChars = 'AAAAA12345';
$generateRandomString->getBytesFromString($allowedChars, 5) // "4AA12" - rastgele gelen veri
$generateRandomString->getBytesFromString($allowedChars, 8) // "38A19AA5" - rastgele gelen veriÚj módszerek: getFloat() és nextFloat()
Ebben az újításban a PHP 8.3 két új módszert vezet be, amelyek kiterjesztik a PHP véletlenszerű kiterjesztését: getFloat() és nextFloat().
Példa ezekre a módszerekre:
$generateRandomNumber = new Random\Randomizer();
// Rastgele ondalıklı (float) bir rakam oluştur
// Değer 0 ile 5 arasında olsun
$generateRandomNumber->getFloat(0,5); // 2.483929 - rastgele gelen veri
// 0 ile 1 arasında rastgele ondalıklı bir rakam oluştur
$generateRandomNumber->nextFloat(); // 0.4828258 rastgele gelen veriKisebb innovációk és fejlesztések a PHP 8.3-ban
A fenti újításokon kívül a PHP 8.3 tucatnyi egyéb kisebb fejlesztést és újítást tartalmaz. Ezeket a forrásdokumentumaikkal együtt az alábbi listában soroltuk fel.
- Új módszerek a DOMElement osztályhoz:
DOMElement::getAttributeNames(),DOMElement::insertAdjacentElement(),DOMElement::insertAdjacentText(),DOMElement::toggleAttribute(),DOMNode::contains(),DOMNode::getRootNode(),DOMNode::isEqualNode()DOMNameSpaceNode::contains() andMParentNode::replaceChildren(). - Új metódusok az IntlCalendar osztályhoz:
IntlCalendar::setDate(),IntlCalendar::setDateTime(),IntlGregorianCalendar::createFromDate()ésIntlGregorianCalendar::createFromDateTime(). - Új LDAP-függvények: ldap_connect_wallet() és ldap_exop_sync().
- új
mb_str_pad()többbájtos karakterlánc-függvény (multi-byte string függvény). - Új POSIX funkciók:
posix_sysconf(),posix_pathconf(),posix_fpathconf()ésposix_eaccess(). - Új módszer:
ReflectionMethod::createFromMethodName() - Új csatlakozó funkció:
socket_atmark(). - Új karakterlánc (szöveg) függvények:
str_increment(),str_decrement(), ésstream_context_set_options(). - Új ZipArchive osztálymetódus:
ZipArchive::getArchiveFlag(). - Új php.ini beállítás a maximális megengedett veremméret beállításához:
zend.max_allowed_stack_size.
A PHP 8.3-ban elavult
A PHP minden új verziója esetén néhány kód elavulttá válik. Soha nem ajánlott ezeket a funkciókat használni, miután teljesen elavulttá váltak. Ha elavult kódot használ, hibaüzenet jelenik meg a kód végrehajtásakor.
A PHP 8.3 elavultságainak listája:
- Az U_MULTIPLE_DECIMAL_SEPARATORS konstans elavult.
- Mt19937
3MT_RAND_PHPA változat elavult. ReflectionClass::getStaticProperties()már nem lehet semmissé.- PHP.ini beállítások
assert.active,assert.bail,assert.callback,assert.exceptionésassert.warningelavulttá vált. get_class()ésget_parent_class()elavulttá vált.
PHP 8.3
Ebben a cikkben áttekintettük a PHP 8.3 fontos változásait és újításait. A PHP 8.3 változásainak részletesebb listájáért hivatalos változásnapló Javasoljuk, hogy tekintse át. Ha szeretné frissíteni kódjait vagy webhelyét PHP 8.2-ről PHP 8.3-ra, ez az útmutató hasznos lehet: PHP 8.3 migrációs útmutató -> https://www.php.net/manual/en/migration83.php
Ha aggódik a PHP verziók és a migráció miatt, javasoljuk, hogy hagyjon egy kis időt az új verziónak a PHP 8.3-ra való frissítésére.
PHP és JavaScript nyelvek és kapcsolódó technológiák teljes lefedettsége, mint Onur Özden Web Çözümleri Web szoftver Szolgáltatásokat kínálunk. Ha kérdése vagy kérése van, gyorsan felveheti velünk a kapcsolatot a bal alsó sarokban található Whatsapp gombbal, hogy árajánlatot kérjen.



