בשנים האחרונות הצוות והקהילה מאחורי 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), ועוד שני פרמטרים שהם אופציונליים:

  1. עומק ($depth) – שולט עד איזה עומק של אובייקטים פנימיים נרצה לוודא, הערך חייב להיות גדול מ-0.
  2. דגלים ($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 פרמטרים:

  1. ערך מינימלי ($min)
  2. ערך מקסימלי ($max)
  3. גבולות ($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-ים חדשים:

לעיון ברשימה המלאה של ה-Exception-ים החדשים ניתן לגלוש לקישור הבא.

סיכום

ישנם עוד מספר שינויים אשר אמורים להגיע עם PHP 8.3 (ניתן לקרוא עליהם פה), אך מרבית השינויים הגדולים והעיקריים סוכמו פה במאמר. הציפייה לגרסה החדשה גדולה ואנו מחכים לה שתצא בצורה רישמית ב-23 לנובמבר 2023.

אז לאיזה פיצ׳ר מבין אלו שסוקרו אתם מחכים? ספרו לנו בתגובות 👇🏽

    כתיבת תגובה

    אפשר להציע לך עוגיות? יש גם קפה! השימוש בקוקיז עוזר לשפר את הביקור שלך באתר. המשך גלישה אומר שהסכמת למדיניות הפרטיות שלי, וגם לקפה.

    שתפו