if (condition) { ... } מריץ את הבלוק שלו רק כשהתנאי מתקיים. הוסיפו elseif (other condition) { ... } למקרים נוספים ו-else { ... } לכל מה שנשאר. PHP בודקת את התנאים מלמעלה ומריצה רק את הבלוק הראשון שמתאים.
שנו את $temperature והריצו שוב. כיוון שהבדיקות עוברות מלמעלה למטה, 24 נעצר בתנאי השני ולא מגיע ל->= 10, למרות שגם הוא מתקיים. סדרו את התנאים מהספציפי ביותר לכללי ביותר.
elseif מול else if
עם סוגריים מסולסלים, elseif ו-else if עושים אותו דבר. מבחינה טכנית else if הוא else שהגוף שלו הוא if חדש, אבל התוצאה זהה.
ההבדל מופיע רק בתחביר הנקודתיים שמשמש בתבניות (בסעיפים הבאים). שם, else if שובר את הקוד:
<?php $score = 72; ?>
<?php if ($score >= 90): ?>
<p>A</p>
<?php else if ($score >= 60): ?>
<p>Passed</p>
<?php endif; ?>
PHP Parse error: syntax error, unexpected token "if", expecting ":" in /home/index.php on line 4
כתבו elseif כמילה אחת ולא תפגשו את השגיאה הזו לעולם.
כמה תנאים עם && ו-||
&& (וגם) צריך ששני הצדדים יתקיימו, || (או) צריך לפחות אחד, ו-! הופך תנאי. PHP מפסיקה לחשב ברגע שהתשובה ידועה, ולכן ב-$user !== null && $user['active'] החלק השני רץ רק כשיש משתמש.
כשאתם מערבבים && ו-||, הוסיפו סוגריים: && נקשר חזק יותר, והסוגריים הופכים את הכוונה לברורה לקורא הבא. ב-PHP יש גם את מילות המפתח and ו-or, אבל הקדימות שלהן נמוכה מזו של =, ולכן $ok = true and false; מציב ב-$ok את true. היצמדו ל-&& ול-||.
מה נחשב אמת בתוך if
התנאי לא חייב להיות בוליאני. PHP ממירה אותו, וקומץ ערכים נחשבים שקר: false, 0, 0.0, "", "0", [] ו-null. כל השאר אמת, כולל "false", " " ו-"0.0".
| $x | bool | empty |
|---|---|---|
| false | ||
| 0 | ||
| 0.0 | ||
| "" | ||
| "0" | ||
| null | ||
| [] | ||
| " " | ||
| "0.0" | ||
| "a" | ||
| [0] | ||
| 1 |
לכן if ($items) היא דרך נפוצה לומר "המערך לא ריק". השורה של "0" היא זו שעוקצת: שדה טופס שמישהו הקליד בו 0 הוא מחרוזת לא ריקה, ובכל זאת if ($_POST['qty']) מתייחס אליו כשקר. השוו במפורש (if ($qty !== '')) כשאפס הוא תשובה תקינה. אותם כללים קובעים מה empty() מחזירה.
if else ב-HTML עם if: ו-endif;
בין תגיות HTML קל לאבד את הסוגריים המסולסלים. ל-PHP יש תחביר חלופי: נקודתיים אחרי התנאי, elseif ...: ו-else: לענפים האחרים, ו-endif; בסוף. הריצו את הבלוק, ואז לחצו על הציונים בלשונית Page: כל קישור מריץ את אותו סקריפט שוב עם $_GET['score'] חדש.
<?= $score ?> הוא קיצור של <?php echo $score; ?>. אותו סגנון נקודתיים קיים גם ללולאות (foreach: endforeach;, while: endwhile;), ובו משתמשות רוב תבניות ה-PHP.
if בשורה אחת והאופרטור הטרנרי
פקודה אחת יכולה לבוא אחרי התנאי בלי סוגריים מסולסלים. זה עובד, אבל השורה הבאה שתוסיפו לא תהיה בתוך ה-if, ולכן מדריכי סגנון רבים דורשים סוגריים תמיד. כדי לבחור אחד משני ערכים, האופרטור הטרנרי קצר יותר מ-if/else מלא.
כשיש הרבה ערכים מדויקים להשוות מולם משתנה אחד, ביטוי match נקרא טוב יותר משרשרת elseif ארוכה.
חזרו מוקדם במקום לקנן
בלוקים מקוננים עמוק של if קשה לעקוב אחריהם. בתוך פונקציה, בדקו קודם את מקרי הכישלון ועשו return מיד. הלוגיקה הראשית נשארת אז בלי הזחה.
טעות נפוצה: = במקום == בתנאי
= בודד מציב. if ($role = 'admin') שומר את 'admin' ב-$role ואז בודק את המחרוזת הזו, שהיא אמת. הבלוק רץ לכל משתמש, וגם $role שגוי עכשיו.
השתמשו ב-=== להשוואות אלא אם יש לכם סיבה לרצות המרת טיפוסים. יש מי שכותבים את הקבוע קודם (if ('admin' === $role)), כך ש-= חסר הופך לשגיאה במקום להצבה שקטה.
שאלות נפוצות
מה ההבדל בין elseif ל-else if ב-PHP?
עם סוגריים מסולסלים הם מתנהגים אותו דבר: else if הוא else שהגוף שלו הוא if נוסף. בתחביר הנקודתיים (if (...): ... endif;) רק elseif עובד, ו-else if היא שגיאת תחביר. שימוש ב-elseif בכל מקום חוסך את ההבדל.
איך בודקים כמה תנאים במשפט if ב-PHP?
חברו אותם עם && (כולם חייבים להתקיים) או עם || (לפחות אחד): if ($age >= 18 && $hasTicket) { ... }. השתמשו בסוגריים כשאתם מערבבים את השניים, למשל if ($isAdmin || ($isOwner && $isActive)).
איך כותבים משפט if בשורה אחת ב-PHP?
פקודה אחת יכולה לבוא אחרי התנאי בלי סוגריים מסולסלים: if ($debug) echo 'debug mode';. כדי לבחור בין שני ערכים בשורה אחת, השתמשו באופרטור הטרנרי: $label = $count === 1 ? 'item' : 'items';.
איך משתמשים ב-if else בתוך HTML ב-PHP?
השתמשו בתחביר החלופי, שנקרא היטב בין תגיות HTML: <?php if ($loggedIn): ?> <p>Welcome back</p> <?php else: ?> <a href="/login">Log in</a> <?php endif; ?>.