Έκδοση της γλώσσας προγραμματισμού PHP 8.1

Μετά από ένα χρόνο ανάπτυξης, παρουσιάστηκε η κυκλοφορία της γλώσσας προγραμματισμού PHP 8.1. Ο νέος κλάδος περιλαμβάνει μια σειρά από νέες δυνατότητες, καθώς και αρκετές αλλαγές που διακόπτουν τη συμβατότητα.

Βασικές βελτιώσεις στην PHP 8.1:

  • Προστέθηκε υποστήριξη για απαρίθμηση, για παράδειγμα, μπορείτε τώρα να χρησιμοποιήσετε τις ακόλουθες δομές: enum Κατάσταση { υπόθεση Σε εκκρεμότητα; περίπτωση Ενεργό? υπόθεση Αρχειοθετήθηκε? } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Προστέθηκε υποστήριξη για ελαφριά νήματα που ονομάζονται Fibers, τα οποία σας επιτρέπουν να διαχειρίζεστε τα νήματα εκτέλεσης σε χαμηλό επίπεδο. Η υποστήριξη ινών σχεδιάζεται να προστεθεί στα πλαίσια Amphp και ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');
  • Η υλοποίηση της κρυφής μνήμης κωδικού αντικειμένου (opcache) έχει βελτιωθεί, καθιστώντας δυνατή την προσωρινή αποθήκευση πληροφοριών σχετικά με την κληρονομικότητα κλάσεων. Η βελτιστοποίηση κατέστησε δυνατή την αύξηση της απόδοσης ορισμένων εφαρμογών κατά 5-8%. Άλλες βελτιστοποιήσεις περιλαμβάνουν βελτιστοποίηση της λειτουργίας JIT, υλοποίηση υποστήριξης JIT για την αρχιτεκτονική ARM64 (AArch64), επιτάχυνση ανάλυσης ονόματος, βελτιστοποίηση βιβλιοθηκών timelib και ext/date, αυξημένη απόδοση σειριοποίησης και αποσειροποίησης, βελτιστοποίηση της get_declared_classes(), explode() , συνάρτηση strtr(), strnatcmp(), dechex(). Γενικά, υπάρχει 23.0% αύξηση στην απόδοση για το Symfony Demo και 3.5% για το WordPress.
  • Ο τελεστής αποσυσκευασίας μέσα στους πίνακες "...$var", ο οποίος επιτρέπει την αντικατάσταση των υπαρχόντων πινάκων κατά τον ορισμό ενός νέου πίνακα, έχει επεκταθεί για να υποστηρίζει κλειδιά συμβολοσειράς (προηγουμένως υποστηρίζονταν μόνο ψηφιακά αναγνωριστικά). Για παράδειγμα, μπορείτε τώρα να χρησιμοποιήσετε στον κώδικα: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Επιτρέπεται η χρήση της λέξης-κλειδιού "νέα" σε αρχικοποιητές, όπως στους ορισμούς συναρτήσεων ως προεπιλεγμένη παράμετρο ή σε χαρακτηριστικά ορίσματος. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Είναι δυνατή η επισήμανση ιδιοτήτων κλάσης για πρόσβαση μόνο για ανάγνωση (οι πληροφορίες σε τέτοιες ιδιότητες μπορούν να γραφτούν μόνο μία φορά, μετά την οποία δεν θα είναι διαθέσιμες για αλλαγή). class PostData { public function __construct( public only read string $title, public only reading DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Άλλο'; > Σφάλμα: Δεν είναι δυνατή η τροποποίηση της ιδιότητας μόνο για ανάγνωση Δημοσίευση::$title
  • Μια νέα σύνταξη έχει εφαρμοστεί για καλέσιμα αντικείμενα - ένα κλείσιμο μπορεί τώρα να σχηματιστεί καλώντας μια συνάρτηση και μεταβιβάζοντάς της την τιμή "..." ως όρισμα (δηλ. myFunc(...) αντί για Κλείσιμο::fromCallable('myFunc ')): συνάρτηση foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Προστέθηκε πλήρης υποστήριξη για τύπους διασταυρώσεων, επιτρέποντάς σας να δημιουργήσετε νέους τύπους συνδυάζοντας υπάρχοντες. Σε αντίθεση με τους τύπους ένωσης, που ορίζουν συλλογές δύο ή περισσότερων τύπων, οι τύποι τομής απαιτούν την παρουσία όχι κανενός από τους αναφερόμενους τύπους, αλλά όλων των καθορισμένων τύπων στο σύνολο που πρέπει να συμπληρωθεί. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Υπάρχει ένας νέος τύπος "ποτέ" που μπορεί να χρησιμοποιηθεί για να ενημερώσει τους στατικούς αναλυτές ότι μια συνάρτηση θα τερματίσει την εκτέλεση του προγράμματος, για παράδειγμα με τη δημιουργία εξαίρεσης ή την εκτέλεση της συνάρτησης εξόδου. συνάρτηση dd(μικτή $εισαγωγή): ποτέ { έξοδος; }
  • Έχει προταθεί μια νέα συνάρτηση array_is_list, η οποία σας επιτρέπει να προσδιορίσετε ότι τα πλήκτρα του πίνακα είναι διατεταγμένα με σειρά αυξανόμενων αριθμητικών τιμών, ξεκινώντας από το 0: $list = [“a”, “b”, “c”]; array_is_list($list); // true $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // ψευδής
  • Τώρα μπορείτε να χρησιμοποιήσετε την "τελική" λέξη-κλειδί για να αποτρέψετε την παράκαμψη των σταθερών γονικής κλάσης. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Μοιραίο σφάλμα: Η γραμμή::X δεν μπορεί να παρακάμψει την τελική σταθερά Foo::X }
  • Οι συναρτήσεις fsync και fdatasync προτείνονται για να εξαναγκάσουν τις αλλαγές να αποθηκευτούν από την κρυφή μνήμη του δίσκου. $file = fopen("sample.txt", "w"); fwrite($file, "Κάποιο περιεχόμενο"); if (fsync($file)) { echo "Το αρχείο έχει διατηρηθεί με επιτυχία στο δίσκο."; } fclose($αρχείο);
  • Προστέθηκε η δυνατότητα χρήσης των προθεμάτων "0o" και "0O" για οκταδικούς αριθμούς, επιπλέον του προθέματος "0" που χρησιμοποιήθηκε προηγουμένως. 016 === 0o16; // true 016 === 0O16; // αληθές
  • Προτείνεται ο επιλεκτικός περιορισμός της χρήσης των $GLOBALS, γεγονός που θα οδηγήσει σε παραβίαση της συμβατότητας προς τα πίσω, αλλά θα επιτρέψει τη σημαντική επιτάχυνση των λειτουργιών με πίνακες. Για παράδειγμα, εξετάζεται η δυνατότητα απενεργοποίησης της εγγραφής σε $GLOBALS και μετάδοσης των $GLOBALS με δείκτη. Μια ανάλυση 2000 πακέτων έδειξε ότι μόνο 23 από αυτά θα επηρεάζονταν από αυτή την αλλαγή. Για παράδειγμα, εάν η πρόταση εγκριθεί, το 8.1 δεν θα υποστηρίζει πλέον εκφράσεις όπως: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Οι εσωτερικές μέθοδοι θα πρέπει τώρα να επιστρέψουν τον σωστό τύπο. Στην PHP 8.1, η επιστροφή ενός τύπου που δεν ταιριάζει με τη δήλωση συνάρτησης θα παράγει μια προειδοποίηση, αλλά στην PHP 9.0 η προειδοποίηση θα αντικατασταθεί με ένα σφάλμα.
  • Συνεχίστηκαν οι εργασίες για τη μεταφορά συναρτήσεων από τη χρήση πόρων στον χειρισμό αντικειμένων. Οι συναρτήσεις finfo_* και imap_* έχουν μεταφερθεί σε αντικείμενα.
  • Η μεταβίβαση μηδενικών τιμών ως ορισμάτων σε εσωτερικές συναρτήσεις που επισημάνθηκαν ως μη μηδενικές έχει καταργηθεί. Στην PHP 8.1, η χρήση δομών όπως το str_contains("string", null) θα οδηγήσει σε μια προειδοποίηση και στην PHP 9 σε ένα σφάλμα.
  • Προστέθηκε υποστήριξη για αλγόριθμους κατακερματισμού MurmurHash3 και xxHash.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο