אופרטור מקבל ערך אחד או יותר ומייצר ערך חדש: $a + $b מחבר, $a . $b משרשר מחרוזות, $a && $b הוא AND לוגי, $a === $b משווה, $i++ מגדיל.
/ מחזיר float אלא אם שני מספרים שלמים מתחלקים ללא שארית: 17 / 5 הוא 3.4, 10 / 5 הוא המספר השלם 2. כשרוצים רק את החלק השלם, השתמשו ב-intdiv(). עיגול מוסבר בעמוד המתמטיקה.
אופרטורים חשבוניים
| אופרטור | שם | דוגמה | תוצאה |
|---|---|---|---|
+ | חיבור | 7 + 2 | 9 |
- | חיסור | 7 - 2 | 5 |
* | כפל | 7 * 2 | 14 |
/ | חילוק | 7 / 2 | 3.5 |
% | מודולו (שארית) | 7 % 2 | 1 |
** | חזקה | 7 ** 2 | 49 |
-$a | שלילה | -7 | -7 |
מודולו שימושי ל"כל פריט N" ולבדיקות זוגי ואי זוגי. התוצאה שלו מקבלת את הסימן של הצד השמאלי, וחלוקה באפס זורקת שגיאה שאפשר לתפוס:
אופרטורי השמה
= שומר ערך. לכל אופרטור חשבון ומחרוזת יש צורה משולבת שמעדכנת משתנה במקום.
??= שייך למשפחת אופרטור ה-null coalescing. הוא מציב ערך רק כשהמשתנה לא מוגדר או null.
הגדלה והקטנה: ++ ו---
$i++ מחזיר את הערך הנוכחי, ואז מוסיף 1. ++$i מוסיף 1, ואז מחזיר את הערך החדש. ההבדל נראה רק כשמשתמשים בתוצאה באותו ביטוי.
טריק האותיות הוא הדרך שבה נוצרים לעיתים קרובות שמות עמודות בגיליון אלקטרוני (A, B, ... Z, AA).
אופרטורים לוגיים: &&, ||, ! ו-xor
| אופרטור | אמת כאשר |
|---|---|
$a && $b | שניהם אמת |
$a || $b | לפחות אחד אמת |
!$a | $a שקר |
$a xor $b | בדיוק אחד אמת |
$a and $b, $a or $b | כמו && ו-||, עם קדימות נמוכה יותר |
&& ו-|| מקצרים: הצד הימני לא מחושב כשהצד השמאלי כבר מכריע את התוצאה. זה מה שהופך את isset($user) && $user->isAdmin() לבטוח.
and מול &&: מלכודת הקדימות
and ו-or קושרים חלש יותר מ-=, כך שבהשמה הם פועלים אחרי שהערך כבר נשמר. זה באג קלאסי:
הקדימות הנמוכה שימושית בניב אחד, $file = fopen($path, 'r') or die('Cannot open');, שבו רוצים שההשמה תקרה קודם. בכל מקום אחר, השתמשו ב-&& וב-||.
אופרטורי מחרוזות: . ו-.=
ל-PHP יש שני אופרטורי מחרוזות: . משרשר שתי מחרוזות ("Grace" . " " . "Hopper") ו-.= מוסיף למשתנה ($html .= "<li>"). + אף פעם לא משרשר מחרוזות: "3" + "4" הוא המספר 7, בעוד "3" . "4" הוא המחרוזת "34". עמוד המחרוזות מסביר אינטרפולציה ומירכאות.
השוואה ואופרטור ספינת החלל <=>
== משווה אחרי המרת טיפוסים, === בודק גם את הטיפוס, ו-<=> מחזיר -1, 0 או 1, וזה בדיוק מה שפונקציות callback למיון צריכות. הפרטים וטבלת ההשוואה הרופפת המלאה נמצאים בעמוד אופרטורי ההשוואה.
אופרטורי מערכים
+ על מערכים הוא איחוד: מפתחות מהמערך השמאלי מנצחים ורק מפתחות חסרים נוספים מהימני. זה מפתיע את מי שמצפה שהוא יוסיף לסוף. == בודק אותם זוגות של מפתח וערך, ו-=== דורש גם אותו סדר ואותם טיפוסים.
כדי להוסיף רשימה אחת לסוף אחרת, השתמשו ב-array_merge() או בתחביר הפיזור [...$a, ...$b].
קדימות אופרטורים
כשביטוי מערבב אופרטורים, PHP מפעילה אותם בסדר קבוע. אלה שמכשילים אנשים, עם מה ש-PHP 8.3 מדפיסה:
echo 2 + 3 * 4; // 14: * before +
echo (2 + 3) * 4; // 20
echo 2 ** 3 ** 2; // 512: right to left, 2 ** 9
echo -2 ** 2; // -4: ** before unary minus
echo "Sum: " . 2 + 3; // Sum: 5, since PHP 8 + runs before .
כשיש ספק, הוסיפו סוגריים. הם לא עולים כלום, ומי שיקרא את השורה הבאה לא יצטרך לזכור את הטבלה.
שאלות נפוצות
מה ההבדל בין and ל-&& ב-PHP?
שניהם AND לוגי, אבל ל-and יש קדימות נמוכה מזו של =. לכן $x = true and false; שומרת true ב-$x (ההשמה קורית קודם), בעוד $x = true && false; שומרת false. השתמשו ב-&& וב-|| בביטויים והשאירו את and/or מחוץ להשמות.
מה עושה % ב-PHP?
% הוא אופרטור המודולו: הוא מחזיר את השארית של חלוקה בשלמים, כך ש-10 % 3 הוא 1. התוצאה מקבלת את הסימן של האופרנד השמאלי (-7 % 3 הוא -1). ל-floats השתמשו ב-fmod(), ו-% 0 זורקת DivisionByZeroError.
איך מעלים מספר בחזקה ב-PHP?
השתמשו באופרטור **: 2 ** 10 הוא 1024. הוא אסוציאטיבי מימין, כך ש-2 ** 3 ** 2 הוא 2 ** 9 = 512, והוא קושר חזק יותר ממינוס אונרי, כך ש--2 ** 2 הוא -4. הפונקציה pow(2, 10) עושה אותו דבר.
מה ההבדל בין $i++ ל-++$i ב-PHP?
שניהם מוסיפים 1 ל-$i. $i++ (הגדלה מאוחרת) מחזיר את הערך הישן ואז מגדיל; ++$i (הגדלה מוקדמת) מגדיל קודם ומחזיר את הערך החדש. בשורה נפרדת, כמו צעד בלולאת for, אין הבדל.