מה חדש ב- PHP 5.4

מי שהספיק להתעדכן ומי שלא – כשמונה חודשים לאחר ששוחררה גרסת האלפא הראשונה,
אתמול (01/03/12) שוחררה הגרסה הרשמית והמלאה של PHP 5.4.0.
בפוסט זה אספק סקירה קצרה של השינויים, החידושים, מה כבר לא קיים, ממה יש להיזהר ולמה לשים לב במיוחד בגרסה החדשה. הפוסט מיועד בעיקר למפתחי PHP ולבעלי שרתים שמריצים PHP.

מה חדש?

  • traits – עבור מי מכם שמממש OOP, בוודאי תשמחו לדעת שכעת גם PHP תומכת ב- traits.
    מי שלא בטוח מה זה בדיוק המאכל הזה שרשמתי מקודם, זה די דומה להורשה, מושג שעשוי להיות קצת יותר מוכר לכם.
  • קידוד – קידוד ברירת המחדל השתנה מ- "ISO-8859-1" ל- "UTF-8". בנוסף לכך התווספה תמיכה כברירת מחדל ב- Multibyte.
  • הגדרת מערכים – זוכרים את המילה Array שרשמתם לפני כל הגדרה של מערך? לא עוד.
    מהיום תוכלו להגדיר מערכים בדרך קצרה יותר.

    $a = [1, 2, 3, 4];
    $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];

    אהבתם? גם אני.

  • פונקציות אנונימיות – אולי אתם מכירים את זה כ- Closures, בכל אופן עכשיו ניתן להשתמש ב- this$ גם בהן, אם במקרה זה היה חסר לכם.
  • short_open_tag – זוכרים את ההגדרה הזאת ב- php.ini?
    עכשיו אתם יכולים להשתמש בתגי פתיחה וסגירה מקוצרים גם בלעדיה, זה יפעל תמיד.
  • מד התקדמות – כעת גם אתם יכולים ליצור מד התקדמות במערכת העלאת הקבצים שלכם בלי להסתבך יותר מדי. בטח תשמחו גם לשמוע שזה פעיל כברירת מחדל. מי אמר אני ולא קיבל?
  • שרת אינטרנט מובנה – זה לא חלום, אפילו אחזור על זה למי שפספס – שרת אינטרנט מובנה!
    לא מדובר פה על משהו שמתיימר להחליף את Apache או Nginx בזמן הקרוב, האופציה הזאת קיימת להקלה ולנוחות בשלב הפיתוח בלבד. אבל בואו נודה באמת – בהחלט שימושי ומבורך.
  • מחלקות, פונקציות ושאר ירקות – יש גם לא מעט קבועים חדשים, מחלקות חדשות, שיטות חדשות ופונקציות חדשות, במקום לסקור את הכל פשוט אקשר אתכם לרשימות המלאות.
    קבועים חדשיםמחלקות חדשותפונקציות חדשותשיטות חדשות

מה ירד?

  • register_globals – הגדרה שנוייה במחלוקת שעלולה הייתה ליצור בעיות אבטחה רבות. כבר בעבר היא כובתה כברירת מחדל, כעת היא הוסרה לחלוטין.
  • magic_quotes – הגדרה נוספת שלא הייתה אהודה כל כך בקרב המפתחים, מטרתה הייתה לבצע הברחה אוטומטית (באמצעות התו "") על כל קלט שהתקבל. פעולה זו יצרה בעיות רבות שהעיקרית שבהן הייתה הברחה כפולה. בגרסה החדשה ההגדרה הזאת לא קיימת יותר.
  • safe_mode – הגדרה נוספת שאינה קיימת יותר, החברים ב- PHP החליטו שזה לא מתפקידה של השפה לפתור את בעיות האבטחה הללו. אתייחס לזה שוב בהמשך.
  • מצביעים – עד עכשיו ניתן היה להעביר לפונקציה "התייחסות" (מצביע) למשתנה כלשהו הן בעת הגדרתה והן בזמן הקריאה, כעת ניתן להגדיר פרמטר כמצביע אך ורק בעת הגדרת הפונקציה.
  • סיישנים – הפונקציות session_register, session_unregister ו- session_is_registered אינן קיימות יותר. ניתן להשתמש בהצבה באמצעות האופטור "=" ובפונקציות unset ו- isset למטרה זו.
  • mysqli – מגוון שמות נוספים (Alias) ששימשו לקיצור השמות הארוכים של חלק מהפונקציות במחלקה הזו הוסרו, להלן הרשימה המלאה לנוחיותכם (חלקן עדיין קיימות).

מה נשתנה הלילה הזה?

לאחר שסקרנו את השינויים היותר מהותיים לדעתי, בואו נראה מה בעצם קורה עכשיו.
אין ספק שתמיכה ב- traits הינה מבורכת ומעלה בשלב נוסף את התמיכה בתכנות מונחה עצמים של השפה, כל הכבוד לחבר'ה על המאמץ והפיתוח.

תמיכה ב- multibyte כסטנדרט, הגדרת מערכים בקלות, מד התקדמות מובנה ותגי פתיחה וסגירה מקוצרים – תוספות מצויינות שתורמות לשפה ללא ספק. אבל, אני חושב שהכתר מגיע דווקא לשרת האינטרנט המובנה. למרות שאת הביטוי "LAMP" אני בטוח שיכירו גם מחר, לדעתי זאת אופציה מצוינת.

אני מאמין שכולנו יכולים להסכים שכאשר שרתים ירוצו ללא magic_quotes וללא safe_mode, אתרים ושרתים שהצליחו בדרך לא דרך להישאר יחסית "מאובטחים" מאבדים את שכבת ההגנה ההכרחית הזאת בעבורם. זה עלול לגרום להמון פריצות של אתרים ושרתים כאשר הם ישדרגו לגרסה החדשה ולא יכירו או לא יטפלו בזה ואז יגיע מישהו שינצל את העובדה הזו לרעה, אלו התוצאות של עבודה לקויה.
חשוב מאוד שאתם כמפתחים או בעלי שרתים תכירו את זה ותתחילו לדאוג לאבטחה ראויה למערכות שלכם במידה ועד עכשיו סמכתם על ההגדרות הללו שיעשו את העבודה במקומכם.

למידע נוסף אודות השינויים שבוצעו בגרסה החדשה, ניתן לקרוא את מדריך המעבר (מומלץ) ואת המסמך ChangeLog-5.
אם יש למישהו משהו להוסיף או להעיר, משהו ששכחתי או משהו שהוא חושב שכדאי שיהיה בפוסט, אשמח לשמוע.

12 תגובות בנושא “מה חדש ב- PHP 5.4”

  1. קודם כל , כתבה מעולה.
    בתור מפתח אני רואה את הגירסה החדשה הזו כ "עידן חדש" של PHP
    הסיבה העיקרית היא שרואים איך השפה מתפתחת ומפתיעה כל פעם מחדש ובמיוחד בגירסה הזו שיש בה שינויים משמעותיים.
    אישית עניין השרת המובנה , traits ומד התקדמות אלה הדברים העיקריים שהגירסה הזו הביאה לנו וטוב שכך 🙂

    1. שלום נתנאל.
      גם לדעתי מדובר בעדכון משמעותי, זאת אחת הסיבות שהוא אפילו זכה לפוסט שלם רק בשבילו :). תודה על התגובה.

  2. התקדמות מאוד גדולה ל PHP – סוף סוף תמיכה ב traits, יכולת לעשות שימוש בערכים המוחזרים מהפונקציות עוד באותה השורה בה מתבצעת הקריאה לפונקציה וכמובן הורדת כל ההגדרות המיותרות.

    נמתין ונראה תוך כמה זמן תתעדכן הגרסה בשרתים השיתופיים וכמה בעיות זה יגרום ולא רק מבחינת אבטחה לפי דעתי הסרת Mysqli היא בגדר טעות! יותר מידי מערכות עושות שימוש בספריה הזאת וזה פשוט יחייב את כולם לשכתב את הקוד – האמת במחשבה שנייה זו סוג של נקודת אור שאולי בסופה יהיה סוף למערכות הישנות והפגיעות שמובילות לפגיעה במשתמשיהם :).

    בכל מקרה, פוסט מצוין ושיהיה המון בהצלחה בהמשך עם הבלוג.

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

    2. תודה רבה על התגובה.

      למען הסר ספק, חשוב לציין שהספרייה mysqli כשלעצמה אינה הוסרה.
      מה שהוסר אלו בסה"כ כמה aliasים של פונקציות הקיימות בה, בעיקר כאלו הקשורות ל- stmt שהיו להן שמות ארוכים אז יצרו עבורן גם פונקציות מקשרות בעלות שמות קצרים יותר, הפונקציות הללו הוסרו – לא כל הספרייה.

      1. אני הבנתי את זה , הכוונה פה שזה מעצבן ויוצר צורך בשינוי קוד קיים שמשתמש בדברים האלה (כמובן ברגע שתשדרג את גירסת ה php ל 5.4).

    1. במילים פשוטות, פשוט דרך נוספת לבצע שימוש חוזר בקוד.
      בדומה למחלקות אבסטרקטיות ולהורשה (שלכל אחד מהם תפקיד ומאפיינים קצת שונים), ניתן להשתמש גם ב- traits עבור שימוש חוזר בקוד.
      אתה יכול לקרוא בדוקומטנציה של השפה יש המון הסברים וגם דוגמאות מצויינות, אני בטוח שתבין.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *