Menu

אופרטורים ב-PHP: חשבון, לוגיקה, מחרוזות ועוד

אופרטורים ב-PHP פועלים על ערכים: +, -, *, /, %, ** לחשבון, =, +=, .=, ??= להשמה, &&, ||, ! ו-xor ללוגיקה, . לשרשור מחרוזות, ==, ===, <=> להשוואה ו-++, -- להגדלה. כאן תלמדו כל קבוצה עם דוגמאות להרצה, וגם את מלכודת הקדימות של and מול &&.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

אופרטור מקבל ערך אחד או יותר ומייצר ערך חדש: $a + $b מחבר, $a . $b משרשר מחרוזות, $a && $b הוא AND לוגי, $a === $b משווה, $i++ מגדיל.

/ מחזיר float אלא אם שני מספרים שלמים מתחלקים ללא שארית: 17 / 5 הוא 3.4, 10 / 5 הוא המספר השלם 2. כשרוצים רק את החלק השלם, השתמשו ב-intdiv(). עיגול מוסבר בעמוד המתמטיקה.

אופרטורים חשבוניים

אופרטורשםדוגמהתוצאה
+חיבור7 + 29
-חיסור7 - 25
*כפל7 * 214
/חילוק7 / 23.5
%מודולו (שארית)7 % 21
**חזקה7 ** 249
-$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, אין הבדל.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל