בשנים האחרונות הצוות והקהילה מאחורי PHP מגבירים את הקצב ומשחררים גרסאות הכוללות פיצ׳רים מעולים אשר גורמים ל-PHP להיות שפת תכנות מודרנית עם יכולות מטורפות.
הגרסה הבאה שמתוכננת לצאת היא PHP 8.3, והיא אמורה לצאת לעולם ב-23 לנובמבר 2023. בסקירה זו נציג את מרבית השינויים המעניינים שהולכים לצאת 🙌🏽.
פונקציית json_validate
שימוש ב-JSON הוא נפוץ מאוד במיוחד כאשר עובדים עם REST API. בעבר על מנת לבדוק האם התקבל JSON תקין, היה צריך להשתמש בפונקציית json_decode
ואז לבדוק האם קיבלנו ערך תקין ולראות שלא נזרקו שגיאות כלשהן.
החל מ-PHP 8.3 נוכל להשתמש בפונקציה json_validate
על מנת לבדוק את תקינות האובייקט.
json_validate( string $json, int $depth = 512, int $flags = 0 ) : bool;
הפונקציה חייבת לקבל פרמטר אחד שהוא אובייקט ה-JSON אותו נרצה לוודא בפורמט מחרוזת (string), ועוד שני פרמטרים שהם אופציונליים:
- עומק (
$depth
) – שולט עד איזה עומק של אובייקטים פנימיים נרצה לוודא, הערך חייב להיות גדול מ-0. - דגלים (
$flags
) – ניתן להעביר דגלים אשר ישפיעו על אופן הולידציה, כרגע ישנו רק דגל אחדJSON_INVALID_UTF8_IGNORE
, אך בהמשך יתווספו כנראה דגלים נוספים.
אופן השימוש ב-json_validate
אופן השימוש בפונקציה הוא בעיקר בתנאי מכיוון שהפונקציה מחזירה ערך בוליאני אשר מייצג האם ה-JSON שהועבר לפונקציה הוא תקין או לא.
if( json_validate( '{"name":"dorzki Blog","url":"https:\\/\\/www.dorzki.io"}' ) ) {
// JSON is valid 👍🏽
} else {
// JSON is invalid 👎🏽
}
במידה ומחרוזת ה-JSON שהעברנו לפונקצייה לא תקינה, נוכל להשתמש בפונקציות json_last_error
ו-json_last_error_msg
על מנת לקבל מידע על סיבת הכישלון.
הפונקציה json_last_error
תחזיר ערך מספרי אשר מייצג את קוד השגיאה, בעוד ש-json_last_error_msg
תחזיר סיבה טקסטואלית. ניתן לראות את רשימת קודי השגיאה בקישור הבא.
הרחבת יכולות ה-Randomizer
בגרסת PHP 8.2, התווספה סיפרייה חדשה אשר נקראת Randomizer. ספרייה זו באה לפתור בעיות אבטחה וביצועים במנגנון הרנדומליות של PHP.
בגרסת PHP 8.3 נוספו מטודות נוספות תחת הסיפרייה אשר נותנות לנו יכולות נוספות במנגנון הרנדומליות של PHP.
מטודת getBytesFromString
מטודה זו מאפשרת לנו לקבל מחרוזת באורך שנקבע המורכבת מבייטים רנדומליים ממחרוזת מסויימת.
Randomizer::getBytesFromString(string $string, int $length): string
מטודת getFloat
המטודה הבאה מאפשרת לנו לקבל ערך עשרוני (float) רנדומלי בין שני ערכים שנקבע. הפונקצייה מקבל 3 פרמטרים:
- ערך מינימלי (
$min
) - ערך מקסימלי (
$max
) - גבולות (
$boundary
) – ערך זה יגדיר למטודה האם הערך שחוזר יכלול את ערכי המינימום והמקסימום (Closed) או לא (Open).
Randomizer::getFloat(float $min, float $max, IntervalBoundary $boundary = IntervalBoundary::ClosedOpen): float
מטודת nextFloat
מטודה זו תחזיר ערך עשרוני (float) בין 0 ל-1, והיא בעצם מעטפת לפונקציה getFloat
עם ערכים קבועים:
Randomizer::getFloat(0, 1, IntervalBoundary::ClosedOpen)
קריאה לקבוע בצורה דינאמית
לפני גרסת PHP 8.3, אם הייתה לי מחלקה אשר כללה בתוכה ערך קבוע, על מנת לפנות בצורה דינאמית לערך הקבוע במחלקה היה עלינו לכתוב תחביר קצת מכוער ושימוש בפונקצייה constant
, אך החל מהגרסה החדשה ישנו תחביר חדש ונקי יותר.
class Theme {
const VERSION = '1.0.0';
const SLUG = 'dorzki';
...
}
$name = 'VERSION';
// Old Way 👵🏽
constant( Theme::class . '::'' . $name );
// New Way 💪🏽
Theme::{$name}
שיפור בטיפול בשגיאות בפונקצייה unserialize
פונקציית unserialize
היא ותיקה, השמישה בעיקר כאשר אנו רוצים לקחת ערך של משתנה אשר עבר סיריאליזציה ולהחזיר אותו למצב הקודם. זה לרוב שמיש כאשר אנו רוצים לשמור ערך מורכב במסד נתונים. שמירת ערך משתנה בצורה זו במסד הנתונים שמיש בעיקר בוורדפרס כאשר רוצים להעביר ערכים מורכבים בין תהליכים.
החל מגרסה PHP 8.3 במקום שהפונקציה תזרוק שגיאה ברמת E_NOTICE
, תיזרק שגיאה ברמת E_WARNING
.
זריקת Date/Time Exceptions
כאשר אנו עובדים עם זמנים ותאריכים ב-PHP, במידה ויש שגיאה לרוב יזרק Exception או Error כלשהו מאוד גנרי 🤨.
החל מגרסת PHP 8.3, יזרקו Exception-ים מדוייקים יותר אשר ספציפיים יותר ל-Date/Time. שינוי זה הוא שינוי שובר תאימות, לכן יש לשים לב ולהתאים את הקוד שלנו לפני שאנו משדרגים לגרסה החדשה, במיוחד אם אנו עובדים עם זמנים ותאריכים.
דוגמאות ל-Exception-ים חדשים:
DateInvalidTimeZoneException
– ייזרק כאשר מנסים להגדיר איזור זמן לא תקין או חוקי.DateInvalidOperationException
– ייזרק כאשר מנסים לבצע פעולה לא חוקית בתאריך, לדוגמא אם מנסים להחזיר ערך לא חוקי מתאריך מסויים בשימוש בפונקצייהDateTime::sub
.DateMalformedStringException
– ייזרק כאשר מנסים להעביר תאריך בפורמט לא חוקי לאחת ממחלקות התאריכים.
לעיון ברשימה המלאה של ה-Exception-ים החדשים ניתן לגלוש לקישור הבא.
סיכום
ישנם עוד מספר שינויים אשר אמורים להגיע עם PHP 8.3 (ניתן לקרוא עליהם פה), אך מרבית השינויים הגדולים והעיקריים סוכמו פה במאמר. הציפייה לגרסה החדשה גדולה ואנו מחכים לה שתצא בצורה רישמית ב-23 לנובמבר 2023.
אז לאיזה פיצ׳ר מבין אלו שסוקרו אתם מחכים? ספרו לנו בתגובות 👇🏽