Frigivelse af programmeringssproget PHP 8.4

Efter et års udvikling blev udgivelsen af ​​programmeringssproget PHP 8.4 præsenteret. Den nye filial indeholder en række nye funktioner samt adskillige ændringer, der bryder kompatibiliteten.

Vigtigste ændringer i PHP 8.4:

  • En ny implementering af JIT-kompileren, bygget på basis af IR Framework, foreslås. Den vigtigste forskel er, at den gamle JIT direkte genererede maskininstruktioner baseret på bytekode og ved hjælp af forskellige backends til x86_64- og AArch64-arkitekturerne, mens den nye JIT bruger en enkelt backend til alle arkitekturer og genererer en mellemrepræsentation (IR), som derefter er yderligere optimeret og konverteret til maskininstruktioner til den ønskede målplatform.
  • Tilføjet understøttelse for at vedhæfte egenskabshook, så du kan tilføje yderligere logik, der udføres, når du ændrer eller får adgang til egenskaberne for et objekt, implementeret uden at opsnappe læse- og skriveoperationer ved hjælp af de almindelige funktioner __get og __set, og uden at oprette yderligere bindingsmetoder. Brugen af ​​ejendomshandlere gør det muligt at reducere mængden af ​​kode betydeligt og forenkle redefineringen af ​​adfærden ved at arbejde med egenskaber, takket være bindingen af ​​sin egen handler til hver egenskab. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Navnet skal være ikke-tomt"); } $this->name = $værdi; } } offentlig funktion __construct(streng $navn) { $this->name = $navn; } }
  • Det er tilladt at angive referencer til metoder i den ”nye” konstruktion uden adskillelse af beslag, dvs. i stedet for “$name = (new MyClass())->method()” kan du nu angive “$name = new MyClass()->method()”.
  • Tilføjet muligheden for asymmetrisk at kontrollere synligheden af ​​objektegenskaber (offentlige, private, beskyttede), separat for skrive (sæt) og læse (hent) operationer. For eksempel: klasse PhpVersion { public private(set) string $version = '8.4'; } $phpVersion = ny PhpVersion(); var_dump($phpVersion->version); // string(3) "8.4" $phpVersion->version = 'PHP 8.3'; // fejl
  • Leveret standardunderstøttelse af "dovne" objekter, som initialiseres på tidspunktet for første brug.
  • I stedet for den generelle parameter "opcache.jit_buffer_size", foreslås parametrene "opcache.jit" og "opcache.jit_buffer_size" til at styre JIT-kompileren og konfigurere JIT-bufferstørrelsen. For at deaktivere JIT kan du nu angive "opcache.jit=disable" i stedet for "opcache.jit_buffer_size=0". Der er foretaget ændringer for at reducere hukommelsesforbruget og forbedre JIT-ydeevnen i nogle situationer.
  • Tilføjet "#[\Deprecated]" attributten for at markere forældede funktioner, klasser og metoder. #[\Deprecated("brug newFunction() i stedet", siden: "1.1")] funktion oldFunction() { // ... }
  • \Dom\HTMLDocument-klassen er blevet implementeret, der understøtter korrekt parsing af HTML5-markup.
  • Tilføjet request_parse_body() funktion til at parse HTTP-anmodninger med multipart/form-data indholdstype (RFC1867).
  • Tilføjede funktioner array_find(), array_find_key(), array_any() og array_all(). Funktionerne array_find() og array_find_key() returnerer det første element eller den første nøgle i arrayet, som checken specificeret gennem den brugerspecificerede tilbagekaldsfunktion virkede for. Funktionerne array_any() og array_all() returnerer til gengæld et hvilket som helst matchet element og alle matchede elementer. For at vise det første element, hvis titelfelt er større end 5 tegn, kan du for eksempel angive: $firstMatch = array_find( $posts, function (Post $post) { return strlen($post->title) > 5; } ) ;
  • Tilføjet DateTime::getMicrosecond() og DateTimeImmutable::setMicrosecond($microsecond) metoder til at få og indstille tid med mikrosekund præcision, samt DateTime::createFromTimestamp() metoden.
  • PDO (PHP Data Objects), en abstrakt grænseflade til at arbejde med databaser, har tilføjet muligheden for at oprette SQL-parsere og underklasser, der er specifikke for visse DBMS-drivere. Nye underklasser Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc og Pdo\Sqlite er blevet tilføjet.
  • Tilføjet nye funktioner mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst(), mb_lcfirst(), bcceil(), bcdivmod(), bcfloor() og bcround(), pcntl_getcpu(), pcntl_getcpuaffinity(), pcosntl_getq , pcntl_setns(), pcntl_waitid(), http_get_last_response_headers(), http_clear_last_response_headers(), fpow()
  • Exit- og die-operationerne kan nu kaldes som fuldgyldige funktioner, der kan overføres som et argument til andre funktioner. Tidligere var funktionaliteten af ​​funktionerne exit() og die() meget begrænset, da de var indpakket over exit- og die-nøgleordene.
  • Ændringer er blevet tilføjet for at gøre det sværere at udnytte bufferoverløbssårbarheder, samt for at øge randomiseringen af ​​filnavne oprettet gennem tempnam()-funktionen.
  • Forældede den adfærd, hvorved funktionsparametre med en standardværdi på null automatisk fik lov til at blive tildelt null-værdier. For at sådanne parametre kan acceptere nulværdier, kræves der nu en eksplicit indikation af præfikset "?". For eksempel, i stedet for "function save(Book $book = null) {}" skal du angive "function save(?Book $book = null) {}".
  • Konstanterne E_STRICT, MYSQLI_REFRESH_*, funktionerne mysqli_ping(), mysqli_kill(), mysqli_refresh(), metoderne mysqli::ping(), mysqli::kill(), mysqli::refresh(), muligheden for at bruge "_ ” som klassenavn, nogle DOMDocument- og DOMEntity-egenskaber. Det er forbudt at omdefinere GMP-klassekonstanter, hvor det "endelige" nøgleord nu er indstillet.

Derudover kan vi bemærke udgivelsen af ​​den statiske analysator PHPStan 2.0, som giver dig mulighed for at finde fejl i PHP-kode uden at udføre den og bruge enhedstests. Analysatoren giver 10 niveauer, der dækker områder som at identificere udefinerede variabler, ukendte klasser, funktioner og metoder; kontrollere typerne af argumenter og returværdier; korrekt brug af nogle typer; Definition af aldrig kaldt kode. Projektkoden er skrevet i PHP og distribueret under MIT-licensen.

Kilde: opennet.ru

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster