PHP 8.1 Programméiersprooch Verëffentlechung

No engem Joer vun der Entwécklung gouf d'Verëffentlechung vun der PHP 8.1 Programméiersprooch presentéiert. Déi nei Branche enthält eng Serie vun neie Fonctiounen, souwéi e puer Ännerungen déi d'Kompatibilitéit briechen.

Schlësselverbesserungen am PHP 8.1:

  • Zousätzlech Ënnerstëtzung fir Enumeratiounen, zum Beispill, kënnt Dir elo déi folgend Konstruktioune benotzen: enum Status { case Pending; Fall Aktiv; Fall Archivéiert; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void {// … } } $post->setStatus(Status::Active);
  • Zousätzlech Ënnerstëtzung fir liichtgewiicht thread genannt Fibers, déi Iech erlaben Ausféierungsfäegkeeten op engem nidderegen Niveau ze managen. Fiber Support ass geplangt fir an d'Amphp a ReactPHP Kaderen bäigefüügt ze ginn. $ Fiber = nei Fiber (Funktioun (): void { $valueAfterResuming = Fiber :: suspendéieren ('no suspendéieren'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('nach dem Resume');
  • D'Ëmsetzung vum Objektcode-Cache (opcache) gouf verbessert, sou datt et méiglech ass Informatiounen iwwer Klasseierwen ze cache. Optimiséierung huet et méiglech gemaach d'Performance vun e puer Uwendungen ëm 5-8% ze erhéijen. Aner Optimisatiounen enthalen d'Optimiséierung vun der JIT Operatioun, d'Ëmsetzung vun der JIT Ënnerstëtzung fir d'ARM64 Architektur (AArch64), d'Beschleunegung vun der Nummresolutioun, d'Optimiséierung vun Timelib an Ext/Datum Bibliothéiken, erhéicht Serialiséierung an Deserialiséierung Leeschtung, Optimiséierung vun de get_declared_classes (), explode () , strtr() Funktioun, strnatcmp(), dechex(). Am Allgemengen gëtt et eng 23.0% Erhéijung vun der Leeschtung fir Symfony Demo, an 3.5% fir WordPress.
  • Den Auspackungsbetreiber bannent Arrays "...$var", wat d'Ersatz vun existente Arrays erlaabt wann Dir en neit Array definéiert, gouf erweidert fir Stringschlësselen z'ënnerstëtzen (virdrun nëmmen digital Identifizéierer goufen ënnerstëtzt). Zum Beispill kënnt Dir elo am Code benotzen: $array1 = ["a" => 1]; $array2 = ["b" => 2]; $array = ["a" => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Et ass erlaabt dat "neit" Schlësselwuert an Initialisatoren ze benotzen, sou wéi a Funktiounsdefinitioune als Standardparameter oder an Argumentattributer. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Et ass méiglech Klass Eegeschafte fir nëmmen liesen Zougang ze markéieren (Informatioun an esou Eegeschafte kann nëmmen eemol geschriwwe ginn, duerno ass et net fir Ännerung verfügbar). class PostData { public function __construct (public readonly string $title, public readonly DateTimeImmutable $date, ) {}} $post = new Post('Title', /* … */); $post->title = 'Aner'; > Feeler: Kann net nëmme liest Eegeschafte änneren Post::$title
  • Eng nei Syntax gouf fir callable Objekter implementéiert - eng Zoumaache kann elo geformt ginn andeems Dir eng Funktioun rufft an et de Wäert "..." als Argument weiderginn (dh myFunc(...) amplaz Closure ::fromCallable('myFunc ')): Funktioun foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Voll Ënnerstëtzung fir Kräizungstypen bäigefüügt, wat Iech erlaabt nei Typen ze kreéieren andeems Dir existent kombinéiert. Géigesaz Gewerkschaft Zorte, déi definéieren Kollektiounen vun zwou oder méi Zorte, Kräizung Zorte verlaangen d'Präsenz vun net all vun der opgezielt Zorte, mä all vun der spezifizéierter Zorte am Set gefëllt ginn. Funktioun generéiertSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Et gëtt en neien Typ "ni" dee ka benotzt ginn fir statesch Analysatoren z'informéieren datt eng Funktioun d'Ausféierung vum Programm ofschléisst, zum Beispill andeems Dir eng Ausnahm werft oder d'Exitfunktioun ausféiert. Fonktioun dd (gemëscht $ Input): ni {exit; }
  • Eng nei Funktioun array_is_list gouf proposéiert, déi Iech erlaabt ze bestëmmen datt d'Schlësselen an der Array an der Reiefolleg vun der Erhéijung vun numeresche Wäerter arrangéiert sinn, ab 0: $list = ["a", "b", "c"]; array_is_list($Lëscht); // true $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // falsch $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // falsch
  • Dir kënnt elo d'Schlësselwuert "Finale" benotzen fir d'Eltereklasskonstanten ze vermeiden. class Foo { final public const X = "foo"; } Klass Bar erweidert Foo { public const X = "Bar"; > Fatale Feeler: Bar::X kann d'Finale konstante Foo::X net iwwerschreiden }
  • D'fsync an fdatasync Funktiounen ginn proposéiert fir Ännerungen ze zwéngen aus dem Disk Cache gespäichert ze ginn. $datei = fopen("sample.txt", "w"); fwrite($Datei, "E puer Inhalt"); if (fsync($Datei)) { echo "Datei gouf erfollegräich op Disk weidergeleet."; } fclose($Datei);
  • D'Fähigkeit bäigefüügt fir d'Präfixe "0o" an "0O" fir oktal Zuelen ze benotzen, nieft dem virdru benotzte Präfix "0". 016 === 0o16; // richteg 016 === 0O16; // wouer
  • Et gëtt proposéiert selektiv d'Benotzung vun $GLOBALS ze limitéieren, wat zu enger Verletzung vun der Réckkompatibilitéit féiert, awer et erméiglecht d'Operatiounen mat Arrays wesentlech ze beschleunegen. Zum Beispill gëtt d'Méiglechkeet fir d'Schreiwen op $GLOBALS auszeschalten an $GLOBALS mam Pointer ze passéieren. Eng Analyse vun 2000 Packagen huet gewisen datt nëmmen 23 vun hinnen vun dëser Ännerung betraff wieren. Zum Beispill, wann d'Propositioun guttgeheescht ass, ënnerstëtzt 8.1 keng Ausdréck méi wéi: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Intern Methoden sollen elo déi richteg Aart zréckginn. Am PHP 8.1, zréckginn vun engem Typ deen net mat der Funktiounserklärung entsprécht, wäert eng Warnung produzéieren, awer am PHP 9.0 gëtt d'Warnung duerch e Feeler ersat.
  • D'Aarbecht ass weidergaang fir Funktiounen ze transferéieren vu Ressourcen ze benotzen fir Objeten ze manipuléieren. D'Funfo_* an imap_* Funktiounen goufen op Objekter transferéiert.
  • Null Wäerter als Argumenter un intern Funktiounen duerchginn, déi net nullbar markéiert sinn, gouf ofgeschaaft. Am PHP 8.1, benotzt Konstrukte wéi str_contains ("String", null) féiert zu enger Warnung, an am PHP 9 zu engem Feeler.
  • Zousätzlech Ënnerstëtzung fir MurmurHash3 an xxHash Hashing Algorithmen.

Source: opennet.ru

Setzt e Commentaire