מדריך PHP: include, require ו-goto
include
עד כה נגענו רק בסקריפט שנמצא על קובץ אחד, אך אם אנו בונים מערכת שיותר גדולה מכמה דפים, אנו נרצה לבודד חלק מהפונקציות החשובות שלנו בקבצים נפרדים ולטעון אותם לפי הצורך. זה נעשה עם include.
לשם הדוגמא נניח שיש לי שני קבצים, שמו בישראל של אחד מהם הוא otherpage.php ובו יש פונקציה חשובה מאד:
הפונקציה היא:
<?php function otherFileFunction() { return 'Hello, I am from otherfile.php!'; }
נניח שמדובר בפונקציה חשובה מאין כמותה, שאני רוצה להפעיל אותה בדף אחר בשם PHPPage.php, כיצד אוכל לעשות זאת? נכון, תמיד אפשר לעשות copy&paste, אבל אני רוצה לפתור את זה באופן יותר אלגנטי. פקודת include תסייע לי, היא מקבל ארגומנט אחד – שם הקובץ שאותו אני רוצה לכלול, למשל:
Include('otherfile.php');
ברגע שעשיתי את זה, אני יכול להשתמש בפונקציות שיש ב-otherfile.php! למשל:
<?php Include('otherfile.php'); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <?php print otherFileFunction();?> </body> </html>
וזה גם יעבוד!
אני יכול גם להשתמש בתיקיות – רק עלי לזכור להשתמש בשם התיקיה ביחס לקובץ שבו אני משתמש. אם אני אעביר את otherfile.php לתיקיה בשם my_folder:
אני יכול להכניס את התיקיה ל-include באופן הבא:
<?php Include('my_folder/otherfile.php'); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <?php print otherFileFunction();?> </body> </html>
שימו לב שהסלאש (/) הוא הפוך וזה בסדר גמור, זה עובד גם בחלונות וגם בלינוקס. תשתמשו תמיד בסלאש הפוך על מנת למנוע מצב שאם יריצו את הקוד הזה על שרת לינוקס אז הוא לא יעבוד.
על מנת למנוע שגיאות שנובעות מהכנסה בטעות של אותו קובץ פעמיים (ואז, כיון שלא ניתן להגדיר שם של פונקציה פעמיים, תהיה לנו הודעת שגיאה ודאית) מומלץ מאד להשתמש ב include_once, הוא זהה כמעט לחלוטין ל-include אבל מונע שגיאות. הנה דוגמא לשימוש בו:
<?php include_once('my_folder/otherfile.php'); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <?php print otherFileFunction();?> </body> </html>
require
אם הקובץ שאנו מנסים לעשות לו include לא נמצא, דבר רע לא יקרה, פשוט הפונקציה לא תהיה זמינה ובמקרה שלנו לא תודפס. אבל אם לצורך העניין הקובץ שאנו רוצים לעשות לו include הוא חיוני, אנו נשתמש ב-require. Require זהה כמעט לחלוטין ל-include רק שאם הקובץ לא קיים – תהיה לנו שגיאת הרצה (במקרה של ההרצה ב-Webmatrix נקבל שגיאה 500). גם במקרה הזה מקובל להשתמש ב-require_once:
<?php require_once('my_folder/otherfile.php'); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <?php print otherFileFunction();?> </body> </html>
Goto
מדובר באחת מטכניקות התכנות הנלוזות ביותר. אני באופן אישי לא משתמש ב-goto לעולם, ולא משנה באיזו שפת תכנות אני משתמש. כפי שמישהו חכם אמר פעם – goto זה כמו חגורת ציפה במטוסים – טוב שזה שם אך עדיף לא להגיע לסיטואציה שצריך את זה.
אבל, לשם הסיכוי הקטן שתתקלו בזה, נעבור על זה.
הריצה של כל קוד היא לפי השורות – מהשורה הראשונה עד השורה האחרונה. כאשר אנחנו יכולים לבלגן את הסדר מעט עם פונקציות (אם לא יקראו לפונקציה היא לא תרוץ, גם אם היא כתובה בשורה הראשונה) אבל סדר ההרצה קבוע.
<?php print 'hello '; print 'world!';
פה למשל אני יודע בוודאות שקודם יודפס ה-hello ורק אחרי כן ה-world.
Goto נותנת לי אפשרות לדלג קדימה בקוד, כך למשל:
<?php goto a; print 'hello '; a: print 'world!';
מה שיודפס הוא world ואילו ה-hello המסכן יופקר לגורלו ולא ירוץ.
רק תזכרו שמדובר במנהג מאד מאד רע, ושנו רבותינו מ-xkcd:
מקור: HTTP://IMGS.XKCD.COM/COMICS/GOTO.PNG מופץ תחת רשיון CREATIVE COMMONS
תגובות בפייסבוק