Programmeerimiskeele PHP 8.4 vÀljalaskmine

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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster