וובמאסטר - תיכנות ובניית אתרים

מדריך PHP: משפטי תנאי

רן בר-זיק ,‏ אינטרנט ישראל‏ ‏/‏ 12 ינואר, 2011
F+
F-

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

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

אציג בפניכם משפט תנאי פשוט ביותר:

<?php
  $my_var = 5;
  if ($my_var < 6) 
  {
    print 'my_var is smaller than 6';
  }
  else 
  {
    print 'my_var is bigger than 6';   
 
}

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

המילה else מראה את מה שהתוכנה תעשה אם התנאי לא מתקיים. גם פה הקיום של הסוגריים המסולסלות הוא קריטי.

קל לנחש שבמקרה הזה, כיון ש-my_var הוא 5, אז התנאי יתקיים.

אתם יכולים לנחש מה יקרה אם אני אכתוב $my_var = 6? האם התנאי יתמלא? בוודאי שלא, כיוון ש-6 הוא לא קטן מ-6. ואז מה שיקרה אחרי else יתרחש.

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

<?php
  $my_var = 6;
  if ($my_var < 6) 
  {
    print 'my_var is smaller than 6';
  }
  else if ($my_var > 6) 
  {
    print 'my_var is bigger than 6';   
  }
  else 
  {
    print 'my_var is equal to 6';
 
}

אפשר להוסיף if כמה שרוצים ולהמשיך לשרשר עוד ועוד עד אין קץ.

שילוב של כמה תנאים

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

<?php
  $my_var = 5;
  if($my_var > 2 && $my_var < 4) 
  {
      print 'my_var is between 2 and 4';
  }
  else 
  {
      print 'my_var is NOT between 2 and 4';   
 
}

החיבור בין שני תנאים נעשה באמצעות &&, כלומר, גם התנאי הראשון וגם התנאי השני. אני לא חייב לעצור בשני תנאים כמובן אלא לשים 3,4 ואפילו חמישים תנאים.

ואם אני רוצה לעשות 'או' במקום 'וגם'? למשל שהמספר יהיה או גדול מארבע, או קטן משניים? איך אעשה את זה? גם זה פשוט מאד. אשתמש במקום && בסימן || :

<?php
  $my_var = 5;
  if ($my_var < 2 || $my_var > 4) 
  {
      print 'my_var is bigger than 4 and smaller than 4';
  }
  else 
  {
      print 'my_var is between 2 and 4';   
 
}

כמובן שאני יכול לשלב גם את && וגם את ||. למשל:

<?php
  $my_var = 6;
  if ($my_var < 0 || $my_var > 10 && $my_var %2 == 0) 
  {
      print 'my_var is > 2 or < 0 AND is even';
  }
  else 
  {
      print 'my_var is between 0 and 10 OR is odd';   
 
}

יש כאן שני תנאי 'או' - || שאותם אנו מכירים ותנאי 'וגם' - && שגם אותו אנו מכירים. אם אתם זוכרים, במאמר הקודם למדנו על חילוק עם שארית (%) וציינתי שזה יהיה שימושי מתישהו. בתנאי my_var % 2 אני בודק את השארית של חילוק בשניים. אם אין שארית, המספר זוגי, אם יש שארית – המספר אי זוגי. הסימון == שואל על שיוויון.

שיוויון

יותר טוב להסביר עם דוגמא, למשל:

<?php
  $my_var = 6;
  if ($my_var == 6) 
  {
      print 'my_var is 6';
  }
  else 
  {
      print 'my_var is not 6';   
 
}

כמובן שהתוצאה תהיה 6.

אבל מה יקרה אם אני אכתוב את הקוד הבא?

<?php
  $my_var = '6';
  if ($my_var == 6) 
  {
      print 'my_var is 6';
  }
  else 
  {
      print 'my_var is not 6';   
 
}

שימו לב למרכאות סביב 6, שמראות על כך שמדובר במחרוזת טקסט (text string). האם לפי דעתכם PHP תמיר את המחרוזת למספר? אלו מכם שמכירים כמה שפות תכנות, יהמרו שלא, כי מספר לא יכול להיות שווה למחרוזת טקסט! אבל למרבה הצער,התשובה היא כן, והתנאי יתקיים ועל המסך יודפס my_var is 6 למרות שב-my_var הכנסנו מחרוזת טקסט ולא מספר.

אז איך בכל זאת משווים גם סוג? עם הסימן ===:

<?php
  $my_var = '6';
  if ($my_var === 6) 
  {
      print 'my_var is 6';
  }
  else 
  {
      print 'my_var is not 6 or it is a string that is equal 6';
 
}

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

אפשר לשלב את סימן השיוויון עם > או < באופן הבא:

<?php
  $my_var = '6';
  if ($my_var <= 6) 
  {
      print 'my_var is smaller than 6 or equal to 6';
  }
  else 
  {
      print 'my_var is bigger than 6';   
 
}

אי שיוויון

לבסוף, אנו נדון באי שיוויון, הסימן לא שיוויון ב-PHP הוא ! דוגמא שמסבירה הכל:

<?php	
  $my_var = '6';
  if ($my_var != 6) 
  {
      print 'my_var is NOT 6';
  }
  else 
  {
      print 'my_var IS 6';   
 
}

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

רן בר-זיק, אינטרנט ישראל

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

אינטרנט ישראל: www.internet-israel.com
תגיות: PHP‏  /  מדריך‏  /  תנאים‏  

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

תגובות למאמר



עוד במדריך

תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות