מדריך PHP

מדריך PHP: פונקציות

‏ • Internet Israel

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

<?php
function mosheAge() {
    return 24;
}
print mosheAge();

בואו ונתעכב קצת על הפונקציה המאד פשוטה הזו – קודם כל, קל לראות שאני מכריז על פונקציה באופן פשוט, קודם כל function ואחרי זה שם הפונקציה וסוגריים. אחרי זה יש משהו מוזר ששמו הוא return. מהניסיון שלי, הרבה אנשים מתבלבלים מה-return הזה. מה הוא? מדובר במה שהפונקציה נותנת לי – מה שהיא מעבירה למי שקורא לה. אם אני אקרא לה, זה מה שאני אקבל.

לצורך העניין, בואו ונניח שהפונקציה היא ערס די טיפש שיודע רק לומר דבר אחד – מה שבא אחרי ה-return. אני קורא לערס הטיפש והוא עונה לי '24' כי זה מה שכתוב אחרי ה-return. מה אני יכול לעשות עם התשובה שלו? אני יכול להדפיס אותה כמו בדוגמה. אני יכול להשתמש בה למטרות אחרות:

<?php
function mosheAge() {
    return 24;
}
$my_var =  mosheAge()*2;
print $my_var;

מה שאני אעשה עם מה שהפונקציה מחזירה לי, תלוי בי ובי בלבד. לא בכל פונקציה יש return אבל עדיף שתהיה.

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

<?php
function interpertArray() {
    $my_arr = array(2,4,6,8,10);
    foreach ($my_arr as $key) {
        $result .= "$key<br />";
    }
    return $result;
}
print interpertArray();

אז נכון, הייתי יכול לשים print בפונקציה עצמה וזה גם היה מדפיס – אבל לטובתכם, תשתדלו תמיד להשתמש ב-return, עד כמה שזה קשה להבנה אינואיטיבית.

ארגומנטים

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

<?php
function interpertArray($arr) {
    foreach ($arr as $key) {
        $result .= "$key<br />";
    }
    return $result;
}

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

<?php
function interpertArray($arr) {
    foreach ($arr as $key) {
        $result .= "$key<br />";
    }
    return $result;
}

$my_arr = array(2,4,6,8,10);

print interpertArray($my_arr);

בלי שאספק את הארגומנט, תהיה לי שגיאה בקוד והוא לא ירוץ.

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

function someFunction($arg1, $arg2, $arg3 ... )

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

<?php
function interpertArray($arr = 0) {
    if($arr != 0) {
        foreach ($arr as $key) {
            $result .= "$key<br />";
        }
    }
    else {
        $result = 'Error! Please provide argument!';
    }
    return $result;
}

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

משתנה גלובאלי

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

אם יש לי משתנה מבחוץ, אני לא יכול להשתמש בו בתוך הפונקציה למשל הקוד הזה לא יעבוד:

<?php
function interpertArray($arr = 1) {
        foreach ($my_arr as $key) {
            $result .= "$key<br />";
        }
    return $result;
}

$my_arr = array(2,4,6,8,10);

print interpertArray();

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

אם אני כן רוצה להשתמש ב-my_arr, אני יכול להשתמש במילה global ליד המשתנה וכך לרמוז לפונקציה שלי לרעות בשדות זרים ולחפש את המשתנה מחוץ לעולם המוגן שלה:

<?php
function interpertArray($arr = 1) {
        global $my_arr;
        foreach ($my_arr as $key) {
            $result .= "$key<br />";
        }
    return $result;
}

$my_arr = array(2,4,6,8,10);

print interpertArray();

הקוד הזה יעבוד.

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

עד כאן בנוגע לפונקציות.

קוד PHP שמשולב ב-HTML

הפונקציות האלו מאפשרות לנו לכתוב קוד PHP נקי יחסית (עד כמה שקוד PHP יכול להיות נקי) שמשולב ב-HTML. PHP  שמשולב ב-HTML לא שונה באופן מהותי ממה שעשינו עד עכשיו, רק שאנו סוגרים את תגית ה<?php- באמצעות תגית <?. כך למשל, אם ניצור באמצעות ה-WebMatrix דף PHP חדש, נוכל לשלב בתוך ה-HTML המובנה שלו PHP:

<?php
function generateMultipleBoard() {
    $result = '<table border='1'>';
    for($i = 0; $i <= 10; $i++) {
        $result.= '<tr>';
             for ($j=1; $j<=10; $j++) {   
                $number = $i*$j;
                $result.= "<td>$number</td>";
             }
        $result.= '</tr>';
    }
    $result.= '</table>';
    return $result;
}

$title = 'multiple board';

?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title><?php print $title;?></title>
    </head>
    <body>
        <?php print generateMultipleBoard(); ?>
    </body>
</html>

כפי שאנו רואים כאן, קוד ה-PHP נסגר באמצעות ?> ויש הפרדה, פחות או יותר, בין החישוב לבין ה-HTML.

תגיות: , ,

רן בר-זיק

מתכנת PHP מנוסה ובעל ידע רב בפיתוח לאינטרנט על בסיס LAMP. מומחה במערכות דרופל, ג'ומלה ו-וורדפרס. שולט היטב בכל מה שקשור לפרונט אנד: JavaScript: jQuery ו-MooTools,ActionScript 2/3 וכמובן HTML 5 + CSS 3.אינטרנט ישראל: www.internet-israel.com

תגובות בפייסבוק