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

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

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

  • Προστέθηκε η δυνατότητα επισήμανσης μιας τάξης ως μόνο για ανάγνωση. Οι ιδιότητες σε τέτοιες κλάσεις μπορούν να οριστούν μόνο μία φορά, μετά την οποία δεν μπορούν να αλλάξουν. Προηγουμένως, μεμονωμένες ιδιότητες κλάσης μπορούσαν να επισημανθούν μόνο για ανάγνωση, αλλά τώρα μπορείτε να ενεργοποιήσετε αυτήν τη λειτουργία για όλες τις ιδιότητες κλάσης ταυτόχρονα. Ο καθορισμός της σημαίας "μόνο για ανάγνωση" σε επίπεδο κλάσης αποκλείει επίσης τη δυναμική προσθήκη ιδιοτήτων στην κλάση. μόνο για ανάγνωση class Post { public function __construct( public string $title, public Συγγραφέας $author, ) {} } $post = new Post(/* … */); $post->unknown = 'λάθος'; // Σφάλμα: Δεν είναι δυνατή η δημιουργία δυναμικής ιδιότητας Δημοσίευση::$άγνωστη
  • Προστέθηκαν ξεχωριστοί τύποι "true", "false" και "null", οι οποίοι μπορούν να λάβουν μόνο μία έγκυρη τιμή και χρησιμοποιούνται, για παράδειγμα, για την επιστροφή μιας συνάρτησης με σημαία τερματισμού σφάλματος ή κενή τιμή. Προηγουμένως, τα "true", "false" και "null" μπορούσαν να χρησιμοποιηθούν μόνο σε συνδυασμό με άλλους τύπους (για παράδειγμα, "string|false"), αλλά τώρα μπορούν να χρησιμοποιηθούν ξεχωριστά: function alwaysFalse(): false { return false ; }
  • Παρέχει τη δυνατότητα φιλτραρίσματος ευαίσθητων παραμέτρων στην έξοδο ίχνους στοίβας κατά τη διάρκεια ενός σφάλματος. Η αποκοπή ορισμένων πληροφοριών μπορεί να είναι απαραίτητη όταν πληροφορίες σχετικά με σφάλματα που παρουσιάζονται αποστέλλονται αυτόματα σε υπηρεσίες τρίτων που παρακολουθούν προβλήματα και ενημερώνουν τους προγραμματιστές σχετικά. Για παράδειγμα, μπορείτε να εξαιρέσετε από τον εντοπισμό παραμέτρους που περιλαμβάνουν ονόματα χρήστη, κωδικούς πρόσβασης και μεταβλητές περιβάλλοντος. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Θανατηφόρο σφάλμα: Μη καταγεγραμμένη Εξαίρεση: Σφάλμα στο test.php:8 Ίχνος στοίβας: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} που τοποθετείται στο test.php στη γραμμή 8
  • Επιτρέπεται να ορίζει σταθερές σε χαρακτηριστικά (χαρακτηριστικό, μηχανισμός επαναχρησιμοποίησης κώδικα). Οι σταθερές που ορίζονται σε ένα χαρακτηριστικό μπορούν να προσπελαστούν μέσω της κλάσης που χρησιμοποιεί το χαρακτηριστικό (αλλά όχι μέσω του ονόματος του χαρακτηριστικού). χαρακτηριστικό Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Προστέθηκε η δυνατότητα καθορισμού τύπων στη διαχωριστική κανονική μορφή (DNF, Disjunctive Normal Form), η οποία σας επιτρέπει να συνδυάσετε την ένωση τύπων (συλλογές δύο ή περισσότερων τύπων) και τη διασταύρωση τύπων (τύποι των οποίων οι τιμές εμπίπτουν σε πολλούς τύπους ταυτόχρονα). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } επιστροφή $entity; } }
  • Μια νέα επέκταση "Random" έχει προταθεί με συναρτήσεις και κλάσεις για τη δημιουργία ψευδοτυχαίων αριθμών και ακολουθιών. Η ενότητα παρέχει μια αντικειμενοστραφή διεπαφή, σας επιτρέπει να επιλέξετε διαφορετικούς κινητήρες για τη δημιουργία ψευδοτυχαίων αριθμών, συμπεριλαμβανομένων αυτών που είναι κατάλληλοι για χρήση στην κρυπτογραφία, και παρέχει βοηθητικές λειτουργίες, για παράδειγμα, για τυχαία ανάμειξη πινάκων και συμβολοσειρών, επιλογή τυχαίων κλειδιών πίνακα, ταυτόχρονη χρήση πολλών γεννητριών με το δικό σας ανεξάρτητο κράτος. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Υλοποιήθηκε μετατροπή περίπτωσης ανεξάρτητης από τις τοπικές ρυθμίσεις. Λειτουργίες όπως η strtolower() και η strtoupper() μετατρέπουν τώρα πάντα τα πεζά χαρακτήρων στην περιοχή ASCII σαν να είχαν οριστεί στην τοπική ρύθμιση "C".
  • Προστέθηκαν νέες λειτουργίες: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Προστέθηκαν νέες μέθοδοι: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Η δυνατότητα δυναμικής δημιουργίας ιδιοτήτων σε μια κλάση έχει καταργηθεί. Στην PHP 9.0, η πρόσβαση σε ιδιότητες που δεν έχουν οριστεί αρχικά στην κλάση θα οδηγήσει σε σφάλμα (ErrorException). Οι κλάσεις που παρέχουν μεθόδους __get και __set για τη δημιουργία ιδιοτήτων ή δυναμικές ιδιότητες στο stdClass θα συνεχίσουν να λειτουργούν χωρίς αλλαγές, μόνο η σιωπηρή εργασία με ανύπαρκτες ιδιότητες θα υποστηρίζεται για την προστασία του προγραμματιστή από κρυφά σφάλματα. Για να διατηρηθεί το έργο του παλιού κώδικα, προτείνεται το χαρακτηριστικό "#[AllowDynamicProperties]", επιτρέποντας τη χρήση δυναμικών ιδιοτήτων.
  • Η δυνατότητα αντικατάστασης τιμών μεταβλητών σε συμβολοσειρές χρησιμοποιώντας τις εκφράσεις "${var}" και ${(var)} έχει καταργηθεί. Η υποστήριξη για τις συνήθως χρησιμοποιούμενες αντικαταστάσεις "{$var}" και "$var" έχει διατηρηθεί. Για παράδειγμα: "Γεια σας {$world}"; ΟΚ "Γεια $world"; ΟΚ "Γεια ${world}"; Καταργήθηκε: Η χρήση ${} σε συμβολοσειρές έχει καταργηθεί
  • Καταργημένες μερικώς υποστηριζόμενες κλήσεις που μπορούν να κληθούν μέσω του "call_user_func($callable)" αλλά δεν υποστηρίζουν την κλήση με τη μορφή "$callable()": "self::method" "parent::method" "static" ::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method" ]
  • Η οδηγία error_log_mode έχει προστεθεί στις ρυθμίσεις, επιτρέποντάς σας να προσδιορίσετε τη λειτουργία πρόσβασης στο αρχείο καταγραφής σφαλμάτων.

Πηγή: opennet.ru

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