PĂ€rast aasta arendust on vĂ€lja antud PHP 8.4 programmeerimiskeele versioon. Uus haru sisaldab mitmeid uusi funktsioone ning ka mĂ”ningaid ĂŒhilduvuse katkestavaid muudatusi.
PHP 8.4 peamised muudatused:
- Uus JIT-kompilaatori teostus, mis pĂ”hineb IR Framework'il, on soovitatud. Peamine erinevus seisneb selles, et vana JIT genereeris otse masiinijuhiseid baidikoodist, kasutades erinevaid tagaplaneeringuid x86_64 ja AArch64 arhitektuuride jaoks, samas kui uus JIT kasutab ĂŒhtset tagaplaneeringut kĂ”ikidele arhitektuuridele ja genereerib vahepealse esituse (IR), mida seejĂ€rel optimeeritakse ja muudetakse sihitud platvormile vajalikeks masiinijuhisteks.
- Lisatud on tugi omaduste kĂ€itlejate (property hook) kinnitamiseks, mis vĂ”imaldavad lisada tĂ€iendavat loogikat, mis kĂ€ivitatakse objekti omaduste muutmise vĂ”i neile juurdepÀÀsu ajal, ilma lugemis- ja kirjutamisoperatsioonide pĂŒĂŒdmiseks tavaliste funktsioonide __get ja __set kasutamiseta ning tĂ€iendavate sidumismeetodite loomata. Omaduste kĂ€itlejate rakendamine vĂ”imaldab oluliselt vĂ€hendada koodi mahtu ja lihtsustada omaduste kĂ€itumise ĂŒmberdefineerimist, sidudes oma kĂ€itleja iga omadusega. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Name must be non-empty"); } $this->name = $value; } } public function __construct(string $name) { $this->name = $name; } }
- On lubatud viidata meetoditele konstruktsioonis ânewâ ilma eraldusmĂ€rkideta, st asemel, et kirjutada â$name = (new MyClass())->method()â, on nĂŒĂŒd vĂ”imalik kirjutada â$name = new MyClass()->method()â.
- Lisatud on objektide omaduste (public, private, protected) asĂŒmmeetriline nĂ€htavuse haldamise vĂ”imalus, eraldi kirjutamise (set) ja lugemise (get) toimingute jaoks. NĂ€iteks: class PhpVersion { public private(set) string $version = '8.4'; } $phpVersion = new PhpVersion(); var_dump($phpVersion->version); // string(3) '8.4' $phpVersion->version = 'PHP 8.3'; // error
- Tugiteenused on lisatud 'laiska' objektide (lazy) jaoks, mille initsialiseerimine toimub nende esimese kasutamise hetkel.
- JIT-kompileerija juhtimiseks ja JIT-bufferi suuruse konfigureerimiseks pakutakse ĂŒldise parameetri 'opcache.jit_buffer_size' asemel parameetreid 'opcache.jit' ja 'opcache.jit_buffer_size'. JIT-deaktiveerimiseks saab nĂŒĂŒd kasutada 'opcache.jit=disable' selle asemel, et mÀÀrata 'opcache.jit_buffer_size=0'. Muudatuste kaudu on vĂ€henenud mĂ€lutarbimine ja paranenud JIT jĂ”udlus teatud olukordades.
- Lisatud on atribuut '#[\Deprecated]', mis on mÔeldud vananenud funktsioonide, klasside ja meetodite mÀrgistamiseks. #[\Deprecated('use newFunction() instead', since: '1.1')] function oldFunction() { // ⊠}
- Rakendatud on klass \Dom\HTMLDocument, mis toetab HTML5 mÀrgendi korrektset tÔlgendamist.
- Lisatud on funktsioon request_parse_body(), et analĂŒĂŒsida HTTP-pĂ€ringuid, mille sisu tĂŒĂŒp on multipart/form-data (RFC1867).
- Lisaudud funktsioonid array_find(), array_find_key(), array_any() ja array_all(). Funktsioonid array_find() ja array_find_key() tagastavad esimese elemendi vÔi vÔtme massiivis, mille puhul töötab kontroll, mis on mÀÀratud kasutaja mÀÀratud callback-funktsiooniga. Omakorda funktsioonid array_any() ja array_all() tagastavad mis tahes vastava elemendi ja kÔik vastavad elemendid. NÀiteks, et vÀljundina saada esimene element, mille title'i vÀli on pikem kui 5 tÀhte, saab mÀÀrata: $firstMatch = array_find( $posts, function (Post $post) { return strlen($post->title) > 5; });
- Lisaudud meetodid DateTime::getMicrosecond() ja DateTimeImmutable::setMicrosecond($microsecond) aja hankimiseks ja seadmiseks mikrosekundilise tÀpsusega, samuti meetod DateTime::createFromTimestamp().
- PDO-s (PHP andmeobjektid), andmebaasidega töötamiseks mÔeldud abstraktne liides, on lisatud vÔimalus luua SQL parserite ja spetsiifiliste alams klasside toetamine teatud DBMS draiverite jaoks. Uued alams klassid Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc ja Pdo\Sqlite.
- Lisaudud uued funktsioonid mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() ja bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcntl_getqos_class(), pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
- Funktsioone exit ja die saab nĂŒĂŒd kutsuda tĂ€ielike funktsioonidena, mida on lubatud edastada argumentidena teistele funktsioonidele. Varem olid funktsioonide exit() ja die() vĂ”imalused tugevalt piiratud, kuna need olid peamiste sĂ”nade exit ja die ĂŒmber ehitatud.
- On tehtud muudatusi, mis muudavad haavatavuste Ă€ra kasutamise keerulisemaks, kui nad ĂŒletavad puhvri piire, ning suurendavad funktsiooni tempnam() kaudu loodud failinimede randomiseeritust.
- On kuulutatud aegunuks kĂ€itumine, kus funktsioonide parameetritele, mille jaoks oli mÀÀratud vaikevÀÀrtus null, lubati automaatselt mÀÀrata null. NĂŒĂŒd, et sellised parameetrid saaksid vĂ”tta null-vÀÀrtusi, nĂ”utakse selget prefiksi â?â. NĂ€iteks tuleks kirjutada âfunction save(Book $book = null) {}â asemel âfunction save(?Book $book = null) {}â.
- E_STRICT, MYSQLI_REFRESH_* konstandid on tunnustatud vananenuks, samuti funktsioonid mysqli_ping(), mysqli_kill(), mysqli_refresh(), meetodid mysqli::ping(), mysqli::kill(), mysqli::refresh(), vĂ”imalus kasutada â_â klassi nimeks ja mĂ”ned omadused DOMDocument ja DOMEntity. GMP klassi konstande ei tohi ĂŒle kirjutada, nĂŒĂŒd on neil mÀÀratud âfinalâ mĂ€rksĂ”na.
Lisaks vĂ”ib mĂ€rkida PHPStan 2.0 statiilise analĂŒsaatori vĂ€ljaandmist, mis vĂ”imaldab leida PHP koodis vigu ilma selle kĂ€itamiseta ja unit-testide kasutamiseta. AnalĂŒsaator pakub 10 taset, mis katab selliseid valdkondi nagu mÀÀramata muutujate, teadmata klasside, funktsioonide ja meetodite tuvastamine; argumentide ja tagastatud vÀÀrtuste tĂŒĂŒpide kontroll; teatud tĂŒĂŒpide Ă”ige kasutamine; mitte kunagi kutsutud koodi mÀÀramine. Projekti kood on kirjutatud PHP keeles ja jagatakse MIT litsentsi alusel.
Allikas: opennet.ru
