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

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

Κλειδί βελτιώσεις σε PHP 7.4:

  • Δακτυλογραφημένες ιδιότητες - Οι ιδιότητες κλάσης μπορούν τώρα να περιλαμβάνουν δηλώσεις τύπου, για παράδειγμα:

    κατηγορία Χρήστης {
    public int $id;
    δημόσια συμβολοσειρά $name;
    }

  • Συντομογραφία σύνταξη για τον ορισμό συναρτήσεων "fn(parameter_list) => expr" με δέσμευση εμβέλειας ανά τιμή. Για παράδειγμα, το "fn($x) => $x + $y" είναι ανάλογο με το "$fn2 = συνάρτηση ($x) χρήση ($y) {return $x + $y;}");
  • Χειριστής ανάθεσης συντομογραφίας "??=" το οποίο μπορεί να χρησιμοποιηθεί για τον ορισμό μιας προεπιλεγμένης τιμής ("a ??= b" είναι παρόμοιο με το "a = a ?? b", εάν έχει οριστεί "a" η τιμή του αποθηκεύεται και εάν δεν έχει οριστεί αποδίδεται η τιμή "b" );
  • Περιορισμένος ευκαιρία διατήρηση της ιεραρχίας κληρονομικότητας των τύπων σε παραγόμενους τύπους επιστροφής ή της δυνατότητας αντιστροφής της ιεραρχίας των αρχικών τύπων σε παραγόμενους τύπους ορισμάτων (συνδιακύμανση τύπος επιστροφής και αντίθεση τύπου ορίσματος). Οι ακόλουθες δομές μπορούν τώρα να χρησιμοποιηθούν στην PHP:

    τάξη Α {}
    η κλάση Β εκτείνεται Α {}

    Κατηγορία Παραγωγός {
    μέθοδος δημόσιας συνάρτησης(): A {}
    }
    class ChildProducer επεκτείνει τον παραγωγό {
    μέθοδος δημόσιας συνάρτησης(): B {}
    }

  • Αποσυσκευασία τελεστή μέσα στους πίνακες "…$var", επιτρέποντας Εκτέλεση αντικατάστασης υπαρχόντων πινάκων κατά τον ορισμό ενός νέου πίνακα.

    $parts = ['μήλο', 'αχλάδι'];
    $fruits = ['μπανάνα', 'πορτοκάλι', …$parts, 'καρπούζι'];
    // ['μπανάνα', 'πορτοκάλι', 'μήλο', 'αχλάδι', 'καρπούζι'];

  • Ευκαιρία οπτική αναπαράσταση μεγάλων αριθμών με οριοθέτες σε αριθμητικά κυριολεκτικά (1_000_000_00).
  • Υποστήριξη αδύναμους κρίκους, που σας επιτρέπουν να διατηρήσετε μια αναφορά σε ένα αντικείμενο, αλλά δεν εμποδίζουν τον συλλέκτη απορριμμάτων να διαγράψει το συσχετισμένο αντικείμενο.
  • νέος механизм σειριοποίηση αντικειμένων (ένας συνδυασμός Serializable και __sleep()/__wakeup()), που αντικατέστησε τη διεπαφή Serializable, η οποία θα καταργηθεί.

    // Επιστρέφει έναν πίνακα που περιέχει όλες τις καταστάσεις του αντικειμένου.
    δημόσια συνάρτηση __serialize(): πίνακας;

    // Επαναφέρει την κατάσταση ενός αντικειμένου από έναν πίνακα
    δημόσια συνάρτηση __unserialize(array $data): void;

  • Επιτρέπεται η δημιουργία εξαιρέσεων από μια μέθοδο __toString();
  • Προστέθηκε υποστήριξη για την προφόρτωση της προσωρινής μνήμης του αντικειμένου κώδικα. Προστέθηκε παράμετρος για ρύθμιση
    opcache.preload, μέσω του οποίου μπορείτε να καθορίσετε ένα σενάριο PHP που θα μεταγλωττιστεί και θα εκτελεστεί κατά την εκκίνηση του διακομιστή. Αυτό το σενάριο μπορεί να φορτώσει τον κωδικό πρόσβασης άλλων αρχείων μέσω της άμεσης συμπερίληψής τους ή χρησιμοποιώντας τη συνάρτηση opcache_compile_file().

  • Προστέθηκε η συνάρτηση crc32c στην επέκταση Hash για τον υπολογισμό των αθροισμάτων ελέγχου χρησιμοποιώντας το πολυώνυμο Castagnoli.
  • Προστέθηκε υποστήριξη στη συνάρτηση password_hash() για μεθόδους κατακερματισμού κωδικού πρόσβασης argon2i και argin2id, στην υλοποίηση της βιβλιοθήκης Sodium, εάν η PHP έχει κατασκευαστεί χωρίς libargon.
  • Προστέθηκε η συνάρτηση mb_str_split(), παρόμοια με τη str_split(), αλλά λειτουργεί όχι με byte αλλά με θέσεις χαρακτήρων σε μια συμβολοσειρά πολλών byte.
  • Η συνάρτηση strip_tags() έχει πλέον τη δυνατότητα να περάσει έναν πίνακα με ονόματα ετικετών, π.χ. αντί για strip_tags($str, ' ') μπορείτε τώρα να καθορίσετε strip_tags($str, ['a', 'p']);
  • Η proc_open() επιτρέπει στους τελεστές να παρατίθενται σε έναν πίνακα, αντί για εκτέλεση συμβολοσειράς, και επίσης παρέχει ανακατεύθυνση νήματος και υποστήριξη για έναν περιγραφέα μηδενικού αρχείου.

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // Όπως 2>&1 στο κέλυφος
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // όπως 2>/dev/null ή 2>nul στο κέλυφος
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Οι επεκτάσεις Firebird/Interbase, Recode και WDDX εξαιρούνται από τη βασική διανομή. Αυτές οι επεκτάσεις διανέμονται τώρα μέσω του PECL.
  • Μεταφέρεται στην κατηγορία απαρχαιωμένος χαρακτηριστικά όπως ένθετοι τριμερείς τελεστές χωρίς παρενθέσεις, πρόσβαση σε στοιχεία πίνακα και συμβολοσειρές χρησιμοποιώντας σγουρά άγκιστρα (“$var{$idx}”), η συνάρτηση is_real() και μετάδοση σε πραγματικό, χρησιμοποιώντας τη γονική λέξη-κλειδί χωρίς γονική κλάση, παραμέτρους allow_url_include διαμορφώσεις , χρησιμοποιώντας array_key_exists() σε αντικείμενα.

    Οι συναρτήσεις get_magic_quotes_gpc(), get_magic_quotes_runtime(), και
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Έχει δοθεί μια προειδοποίηση σχετικά με τη χρήση μιας απαρχαιωμένης λειτουργίας κατά την προσπάθεια επεξεργασίας εσφαλμένων συμβόλων σε συναρτήσεις
    base_convert(), bindec(), octdec() και hexdec(), και όταν καθορίζετε ένα μοτίβο χωρίς συμβολοσειρά στο mb_ereg_replace().

Πηγή: opennet.ru

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