לאחר שנה של פיתוח שחרור שפת תכנות . הסניף החדש כולל שורה של פיצ'רים חדשים, כמו גם מספר שינויים השוברים את התאימות.
מפתח ב-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; - מותר לזרוק חריגים משיטה ;
- נוספה תמיכה לטעינה מראש של מטמון קוד האובייקט. נוסף פרמטר להגדרה
, שדרכו ניתן לציין סקריפט 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
