שחרור שפת התכנות PHP 7.4

לאחר שנה של פיתוח הציג שחרור שפת תכנות PHP 7.4. הסניף החדש כולל שורה של פיצ'רים חדשים, כמו גם מספר שינויים השוברים את התאימות.

מפתח שיפורים ב-PHP 7.4:

  • מאפיינים מוקלדים - מאפייני מחלקה יכולים כעת לכלול הצהרות סוג, לדוגמה:

    class User {
    int public $id;
    מחרוזת ציבורית $name;
    }

  • מְקוּצָר תחביר להגדרת פונקציות "fn(parameter_list) => expr" עם מחייב היקף לפי ערך. לדוגמה, "fn($x) => $x + $y" מקביל ל-"$fn2 = function ($x) use ($y) {return $x + $y;}");
  • מפעיל מטלות קיצור "??=" שבו ניתן להשתמש כדי להגדיר ערך ברירת מחדל ("a ??= b" דומה ל-"a = a ?? b", אם "a" מוגדר הערך שלו מאוחסן, ואם לא מוגדר אותו מוקצה הערך "b" );
  • מוגבל הזדמנות שמירה על היררכיית הירושה של טיפוסים בסוגי החזרה נגזרים, או היכולת להפוך את ההיררכיה של הטיפוסים המקוריים בסוגי ארגומנטים נגזרים (שיתופיות סוג החזר וסוג ארגומנט בניגוד). כעת ניתן להשתמש במבנים הבאים ב-PHP:

    מחלקה א' {}
    מחלקה B מרחיבה את A {}

    מפיק מחלקה {
    public function method(): A {}
    }
    class ChildProducer מרחיב את המפיק {
    שיטת פונקציה ציבורית(): B {}
    }

  • מפרקת אופרטור בתוך מערכים "...$var", מְאַפשֶׁר לבצע החלפה של מערכים קיימים בעת הגדרת מערך חדש;

    $parts = ['apple', 'pear'];
    $fruits = ['בננה', 'כתום', …$חלקים, 'אבטיח'];
    // ['בננה', 'תפוז', 'תפוח', 'אגס', 'אבטיח'];

  • הזדמנות ייצוג חזותי של מספרים גדולים עם תוחמים מילוליים מספריים (1_000_000_00);
  • תמיכה חוליות חלשות, המאפשרים לך לשמור הפניה לאובייקט, אך לא חוסמים את אוסף האשפה מלמחוק את האובייקט המשויך;
  • חדש מנגנון הסדרת אובייקטים (שילוב של Serializable ו-__sleep()/__wakeup()), שהחליף את ממשק Serializable, שיוצא משימוש;

    // מחזירה מערך המכיל את כל המצבים של האובייקט;
    פונקציה ציבורית __serialize(): מערך;

    // משחזר את המצב של אובייקט ממערך
    פונקציה ציבורית __unserialize(מערך $data): void;

  • מותר לזרוק חריגים משיטה __toString();
  • נוספה תמיכה לטעינה מראש של מטמון קוד האובייקט. נוסף פרמטר להגדרה
    opcache.preload, שדרכו ניתן לציין סקריפט PHP שיקומפיל וירוץ כאשר השרת יתחיל. סקריפט זה יכול לטעון את opcode של קבצים אחרים באמצעות הכללה ישירה שלהם או באמצעות הפונקציה opcache_compile_file();
  • נוספה פונקציית crc32c להרחבת Hash לחישוב סכומי ביקורת באמצעות פולינום Castagnoli;
  • נוספה תמיכה לפונקציית password_hash() עבור שיטות גיבוב סיסמאות argon2i ו-argin2id, ביישום ספריית Sodium, אם PHP בנוי ללא libargon;
  • נוספה פונקציה mb_str_split(), בדומה ל-str_split(), אך פועלת לא עם בתים אלא עם מיקומי תווים במחרוזת מרובה בתים;
  • לפונקציה strip_tags() יש כעת את היכולת להעביר מערך עם שמות תגים, כלומר. במקום strip_tags($str, ' ') אתה יכול כעת לציין strip_tags($str, ['a', 'p']);
  • proc_open() מאפשר לרשום את האופרנדים במערך, ולא במחרוזת לפעול, וכן מספק הפניית שרשור ותמיכה במתאר קובץ null;

    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