נגישות       נגישות
שינוי גודל טקסט:
א א א
שינוי צבעי האתר:
? מקשי קיצור:

לחיצה חוזרת ונשנית על המקש Tab תעביר אתכם בין הקישורים והאזורים השונים בעמוד.

הפעלת מקשי הקיצור תלויה בדפדפן שבו אתם משתמשים.

Internet Explorer, Chrome ובגרסאות ישנות של Firefox: לחצו על מקש Alt ועל מקש המספר או האות על-פי הרשימה. ב Firefox 3 ומעלה: לחצו על המקשים Alt + Shift + המספר או האות.

S - עבור לתוכן הדף
L - חיפוש
1- עמוד הבית
2 - פרוייקטים
3 - מדריכים
4 - אודות
5 - צרו קשר
6 - הצהרת נגישות
 

רמז לסוג סקלרי ב-PHP7 וסוגים מוחזרים

מחבר:
בתאריך:

כולם יודעים ששפת ה-PHP היא שפה שמאופיינת בהיותה loose typing,ולכן לא צריך להגדיר לפונקציה את סוג הנתונים שהיא צריכה לקבל (מחרוזת, מספר, בוליאני). אם כי, ב-PHP גרסה 5 יש אפשרות לעשות type hinting , ולהגדיר למשתנה שישתייך לטיפוס מערך (array) או לאובייקט מסוים.

לדוגמה, הפונקציה הבאה מצפה לקבל פרמטר מסוג מערך בלבד:

function genertatFullName(array $user)
{
    return $user['first_name'] . '  ' . $user['last_name'];
}

והפונקציה הבאה, מצפה לקבל אובייקט ששייך למחלקה או ל אינטרפייס User בלבד:

function genertatFullName(User $user)
{
    return $user->firstName . '  ' . $user->lastName;
}

 

רמז לסוג סקאלרי ב-PHP גרסה 7

ב-PHP7 אפשר לבחור להגביל את סוג הנתונים המועברים לפונקציות ולמתודות גם לטיפוסים הסקאלריים.

כדי להגביל את הפונקציות לקבל משתנה מספרי בלבד משתמשים ב- type hinting (רמז לסוג) int:

function addOne(int $number)
{
    return $number+1;
}

ועכשיו אם ננסה להעביר לפונקציה מחרוזת אנו עלולים לקבל שגיאה.

לדוגמה:

addOne('literal string');

יגרום לשגיאה הבאה:

Fatal error: Uncaught TypeError: Argument 1 passed to addOne() must be of the type integer, string given

ומצד שני, אם ננסה להעביר משהו ש-PHP יכול להפוך למספר, זה לא יגרום לשגיאה. לדוגמה, ננסה להעביר את המחרוזת '1':

addOne('1');// 2

וזה לא יגרום לשגיאה.

כדי לגרום למערכת להיות strict לגמרי, אנחנו צריכים להגדיר ל-PHP שאנחנו מצפים להקפדה מלאה על טיפוסי הנתונים המועברים לפונקציות באמצעות ההצהרה הבאה:

declare(strict_types=1);

לדוגמה:

declare(strict_types=1);

function addOne(int $number)
{
    return $number+1;
}

addOne('1');

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

 

טיפוסים סקלאריים נוספים שניתן לעשות להם רמז לסוג ב-PHP7

מלבד לטיפוס integer ניתן לעשות type hinting גם לטיפוסים בוליאני ומחרוזת. כפי שאפשר לראות בטבלה הבאה:

סוג הנתוניםרמז לסוג
מספר שלםint
מספר עשרוניfloat
בוליאניbool
מחרוזתstring

 

אילוץ סוגי המשתנים שמוחזרים מפונקציות ומתודות באמצעות return type declarations

כפי שניתן לאלץ את הפונקציות לקבל נתונים מטיפוס מסויים בלבד, PHP7 מביא איתו תכונה חדשה שמאפשרת למתכנתים לאלץ את הפונקציות והמתודות להחזיר נתונים מטיפוס מסויים בלבד. .return type declarations עושים זאת באמצעות

בדוגמה הבאה, נאלץ את הפונקציה להחזיר מספרים שלמים בלבד.

function addOne(int $number):int
{
    return $number+1;
}

addOne(1);
***

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

בדוגמה הבאה, המתודה make יכולה להחזיר אובייקטים שנוצרים מהמחלקה A בלבד.

class A {}
class B {
    function make():A
    {
        return new A;
    }
}

זה יכול להיות שימושי במיוחד כשרוצים להגדיר את טיפוס הנתונים המוחזר ממתודה באמצעות interface. בדוגמה הבאה, ה-interface מגדיר לפונקציה make שהיא יכולה להחזיר אובייקטים מסוג A בלבד.

interface i {
    function make():A;
}

class A {}

class B implements i {
    function make():A
    {
        return new A;
    }
}

// Test
$b = new B;
var_dump($b->make());

שימו לב, שכמו בפרמטרים, כשאנחנו מגדירים את הסוג המוחזר ב-interface, עלינו לחזור ולעשות זאת במתודה.

 

למה צריך את זה בכלל?

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

 

אני ממליץ ללמוד PHP מונחה עצמים עם "The essentials of Object Oriented PHP" שהוא הספר שעליו מבוססים רוב המדריכים בנושא באתר רשתטק.
הקליקו על התמונה כדי לרכוש את ה-eBook:

eBook cover The essentials of Object Oriented PHP

 

לכל מדריכי ה-PHP

לכל המדריכים בנושא של PHP מונחה עצמים

הוסף תגובה חדשה

 

= 3 + 9