Pas një viti zhvillimi, u prezantua lëshimi i gjuhës së programimit PHP 8.3. Kjo degë e re përfshin një seri mundësish të reja, si dhe disa ndryshime që cënojnë kompatibilitetin.
Ndryshimet kryesore në PHP 8.3:
- Gjatë klonimit të klasave, u dha mundësia e ri-inicializimit të pronave me atributin «readonly». Riprogramimi i pronave readonly lejohet vetëm brenda funksionit «__clone»: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // e lejuar, pavarësisht se prona «createdAt» është e qasshme vetëm në modin për të lexuar. } }
- U lejua pĂ«rdorimi i konstantave me specifikim tipi nĂ« klasa, tipe dhe enumeracione: class Foo { const string BAR = âbazâ; }
- U shtua mbĂ«shtetje pĂ«r atributin «#[Override]», me anĂ« tĂ« tĂ« cilit zhvilluesi mund tĂ« informojĂ« interpretorin se metoda e etiketuar e tejkalon njĂ« metodĂ« prind. NĂ« rast se nuk ka tejkalim, interpretorit do tâi dalĂ« njĂ« gabim.
- U ndryshua pĂ«rpunimi i vlerave negative si indekse tĂ« array-ve. PĂ«r shembull, kur shtohet njĂ« element nĂ« njĂ« array tĂ« zbrazĂ«t me numrin «-5» dhe shtohet njĂ« tjetĂ«r element, mĂ« parĂ« elementi i dytĂ« ruhej me indeks «0», ndĂ«rsa duke filluar nga versioni PHP 8.3 do tĂ« ruhet me indeks «-4». $array = []; $array[-5] = âaâ; $array[] = âbâ; var_export($array); // Ishte array (-5 => âaâ, 0 => âbâ) // U bĂ« array (-5 => âaâ, -4 => âbâ)
- U shtua mundĂ«sia pĂ«r tĂ« krijuar klasa anonime nĂ« modin vetĂ«m pĂ«r tĂ« lexuar: $class = new readonly class { public function __construct( public string $foo = âbarâ, ) {} };
- U shtua funksioni json_validate() për verifikimin e shpejtë të përputhshmërisë së një stringu me formatin JSON pa realizuar operacione dekodimi. json_validate(string $json, int $depth = 512, int $flags = 0): bool
- Në klasën Randomizer, e cila ofron një API të nivelit të lartë për gjenerimin e numrave dhe sekuencave pseudo-rastësore, janë shtuar metoda të reja: getBytesFromString për formimin e një stringu me madhësi të caktuar, duke përdorur në mënyrë rastësore karakteret që janë të pranishme në një string tjetër; getFloat dhe nextFloat për gjenerimin e një numri rastësor me pikë fluturuese, që bie brenda një intervali të caktuar.
- U shtua mundĂ«sia e nxjerrjes sĂ« konstantave duke pĂ«rdorur sintaksĂ«n e klasave dinamike: class Foo { const BAR = âbarâ; } $name = âBARâ; // MĂ« parĂ« pĂ«r tĂ« nxjerrĂ« konstantĂ«n BAR duhej tĂ« thĂ«rrisje constant(Foo::class . â::â . $name); // NdĂ«rsa tani mjafton tĂ« thuash Foo::{$name};
- U shtua gjenerimi i përjashtimeve të veçanta (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) në rast të problemeve të ndodhura gjatë operacioneve me data dhe kohë.
- U përmirësua përpunimi i gabimeve që ndodhin gjatë analizës së të dhënave të serializuara në funksionin unserialize(). Në rast probleme, unserialize() tani jep kodin E_WARNING në vend të E_NOTICE.
- U bĂ«nĂ« ndryshime nĂ« funksionin range(). U sigurua gjenerimi i njĂ« pĂ«rjashtimi nĂ« rast tĂ« pĂ«rpjekjes pĂ«r tĂ« kaluar objekte, burime ose array nĂ« variablat qĂ« pĂ«rcaktojnĂ« kufijtĂ« e intervalit, si dhe nĂ« rast tĂ« dhĂ«nies sĂ« njĂ« vlere negative nĂ« parametrin $step ose njĂ« vlere tĂ« pacaktuar nĂ« çdo parameter. U garantua dalja e listĂ«s sĂ« karaktereve kur jepen stringa nĂ« vend tĂ« numrave (pĂ«r shembull, «range(â5â, âzâ)»).
- U ndryshua sjellja e tipave me pronat statike, të cilat tani riprogramojnë pronat statike të trashëguara nga klasa prind.
- U shtuan konfigurime për mbrojtjen nga mbipopullimi i stack-ut. Në skedarin ini u shtuan drejtimez zend.max_allowed_stack_size dhe zend.reserved_stack_size, që përcaktojnë madhësinë maksimale të lejuar dhe të rezervuar të stack-ut. Programi do të përfundojë me një gabim kur të afronte në shterjen e stack-ut, kur stack-u është i mbushur më shumë se diferenca mes vlerave të zend.max_allowed_stack_size dhe zend.reserved_stack_size (ekzekutimi do të ndalet pa arritur në situatën e gabimit të segmentimit). Me të dhëna të paracaktuara, vlera e zend.max_allowed_stack_size është vendosur në 0 (0 - madhësia përcaktohet automatikisht, për të çaktivizuar kufizimin mund të vendoset -1).
- U shtuan funksione të reja POSIX: posix_sysconf(), posix_pathconf(), posix_fpathconf() dhe posix_eaccess().
- U shtua funksioni mb_str_pad, i cili është një analog i funksionit të stringut str_pad(), i projektuar për të punuar me kodime shumë-byte, si UTF-8.
- U lejuan krijimi i closures nga metodat dhe kalimi i argumenteve tĂ« emĂ«rtuara nĂ« kĂ«to closures. $test = new Test(); $closure = $test->magic(âŠ); $closure(a: âhelloâ, b: âworldâ);
- U ndryshua sjellja gjatĂ« pĂ«rpunimit tĂ« dukshmĂ«risĂ« sĂ« konstantave nĂ« interface. interface I { public const FOO = âfooâ; } class C implements I { private const FOO = âfooâ; }
- U zgjeruan mundësitë e funksioneve array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() dhe proc_get_status().
- ĂshtĂ« shpallur e vjetruar mundĂ«sia pĂ«r kalimin e njĂ« vlerĂ« negative $widths nĂ« mb_strimwidth(). ĂshtĂ« hequr konstanta NumberFormatter::TYPE_CURRENCY. ĂshtĂ« ndĂ«rprerĂ« mbĂ«shtetja pĂ«r thirrjen e funksionit ldap_connect() me dy parametra $host dhe $port. ĂshtĂ« hequr konfigurimi opcache.consistency_checks.
Burimi: opennet.ru
