משפטי תנאי בשפת PHP

משפטי תנאי בשפת PHP

  • פרסומת

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

משפטי תנאי

התוכנה הטובה ביותר היא התוכנה שמוכנה לכל תרחיש, ויש לה "תשובה" לכל מקרה.

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

בשפת PHP יש לנו מספר משפטי תנאי:

  • if – השתמש במשפט זה אם אתה רוצה להוציא לפעול קוד אך ורק אם התנאי מאומת.
  • if…else – השתמש במשפט זה אם אתה רוצה להוציע לפועל קוד אם התנאי מאומת, וקוד אחר אם התנאי לא מאומת.
  • if…elseif…else – השתמש במשפט הזה אם אתה רוצה להוציע לפועל קוד שונה על פי מספר תנאים (מתאים למספר קטן של תנאים).
  • switch – השתמש במשפט זה אם אתה רוצה להוציא לפועל קוד שונה על פי מספר גדול של מקרים.

משפט תנאי יחיד if

הוצאה לפועל אך ורק במקרה שהתנאי מאומת. להלן המבנה הכללי של הקוד:

<?php
if (condition) {
    //קוד שיצא לפועל במקרה והתנאי מאומת
}

במקרה הבא, התוכנה תציג את הפלט אך ורק אם המשתנה $age גדול מ- 90:

<?php
$age = 25;
if($age > 90) echo 'נראה לי שאתה זקן מדי בשביל ללמוד PHP';

שימו לב, שבמקרה והגיל יהיה קטן מ- 90, התוכנה לא תציג שום פלט. התוכנה אינה ערוכה לגילאים קטנים מ- 90.

משפט תנאי if…else

<?php
if (condition) {
    //קוד שיצא לפועל במקרה והתנאי מאומת
}
else {
    //קוד שיצא לפועל במקרה והתנאי לא מאומת
}

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

<?php
$age = 25;
if($age > 90) echo 'נראה לי שאתה זקן מדי בשביל ללמוד PHP';
else echo 'אתה בדיוק בגיל המתאים ללמוד PHP';

התוכנה הנ"ל תציג פלט מסויים במקרה והגיל גדול מ- 90, ופלט אחר במקרה והגיל קטן מ- 90. במקרה הזה, התוכנה ערוכה לכל תרחיש, וזוהי תוכנה איכותית.
עם זאת, שימו לב שייתכן מצב בו המשתמש מזין גיל שלילי (5- לדוגמה). במקרה זה התוכנה תציג את הפלט 'אתה בדיוק בגיל המתאים ללמוד PHP' למרות שגיל זה אינו קיים. אז איך פותרים זאת?

משפט תנאי if…elseif…else

<?php
if( /* 1st condition */ ) 
{
    //קוד שיצא לפועל במקרה והתנאי הנ"ל מאומת
}
elseif( /* 2nd condition */ ) 
{
    //קוד שיצא לפועל במקרה והתנאי הראשון לא מאומת, והתנאי הנ"ל מאומת
}
else 
{
    //קוד שיצא לפועל במקרה ושני התנאים אינם מאומתים
}

להלן דוגמה:

<?php
$age = 25;
if($age > 90) echo 'נראה לי שאתה זקן מדי בשביל ללמוד PHP';
elseif($age < 10) echo 'אתה צעיר מדי בשביל ללמוד PHP';
else echo 'אתה בדיוק בגיל המתאים ללמוד PHP';

בדוגמה הנ"ל, הוספנו עוד משפט תנאי שיצא לפועל במקרה והגיל קטן מ- 10. ניתן להמשיך ולהוסיף עוד משפטי תנאי כאלה ללא הגבלה. שימו לב שגם במקרה הזה, התוכנה ערוכה לכל גיל, אך לא לגמרי. מה אם הגיל שלילי? מה אם הגיל מעל 120? בואו נשפר אותה עוד קצת:

<?php
$age = 25;
if($age > 0 && $age < 10) echo 'אתה צעיר מדי בשביל ללמוד PHP'; elseif($age >= 10 && $age < 90) echo 'אתה בדיוק בגיל המתאים ללמוד PHP'; elseif($age >= 90 && $age <= 120) echo 'נראה לי שאתה זקן מדי בשביל ללמוד PHP';
else echo 'אנא הזן גיל אמיתי';

אם נפרק את התוכנה שלנו, נראה שהיא ערוכה היטב לכל תרחיש. כמו שלמדנו בפרק הקודם, && זה 'גם', מה שאומר ששני התנאים צריכים להתקיים. שימו לב שכשמשתמשים בסימן > או < (קטן או גדול מ-) המספר שאליו משווים אינו נכלל. לדוגמה: התנאי $age > 0 && $age < 10 יאומת בתנאי שמשתנה $age קטן מ-10 או גדול מ-0. אם המספר שווה ל-0 או ל-10 התנאי לא יאומת ולכך אנו צריכים להיות ערוכים!

משפטי תנאי מרובים עם switch

השימוש ב-switch יעיל כאשר יש לנו מספר רב של תנאים. המבנה הכללי של המשפט נראה כך:

<?php
switch (n) {
  case 1:
    // n=1 קוד שיוצא לפועל במקרה;
    break;
  case 2:
    // n=2 קוד שיוצא לפועל במקרה;
    break;
  default:
    // קוד שיוצא לפועל במקרה ואף אחד מהתנאים האחרים לא אומתו;
}

כך זה עובד: ראשית מזינים מספר או מחרוזת במקום n. מה שהזנו לאחר מכן מושווה לכל המקרים (case) וברגע שיש התאמה, אותה פיסת קוד יוצאת לפועל. אם אין התאמה בשום מקרה, הברירת מחדל יוצאת לפועל (default). השתמשו ב- break; אם אתם לא רוצים ששני המקרים "יתערבבו" אחד בשני ויצאו לפועל ביחד. והנה הדוגמה:

<?php
$age = 25;
switch($age) {
    case 24:
      echo 'אתה קטן ממני בשנה';
      break;
    case 25:
      echo 'אתה בגילי';
      break;
    case 26:
      echo 'אתה גדול ממני בשנה';
      break;
    default:
      echo 'אני ואתה בעולמות שונים...';
}

במקרה הנ"ל, התוכנה תציג פלט שונה לגילאים 24,25,26 ופלט ברירת מחדל לשאר המספרים.