LearnAI ToolsCareerPractice BuildsPlayContact
Lesson 1320 min read

Operators

Learn PHP's arithmetic, assignment, comparison, logical, and string operators, including the critical difference between == and ===.

Introduction

Operators are the symbols PHP uses to perform actions on values — adding numbers, comparing them, combining strings, or checking logical conditions. You already saw a few in the last lesson while exploring type casting; this lesson covers the full set you will use in almost every PHP script you write.

What You Will Learn
  • Arithmetic operators for doing math.
  • Assignment operators, including shorthand forms like += and -=.
  • Comparison operators, and the crucial difference between == and ===.
  • The spaceship operator <=> for combined comparisons.
  • Logical operators (&&, ||, !) and their word-based equivalents.
  • String concatenation with . and .=

Arithmetic Operators

PHP supports the standard set of arithmetic operators, plus a dedicated exponentiation operator and a modulus (remainder) operator.

OperatorNameExampleResult
+Addition5 + 27
-Subtraction5 - 23
*Multiplication5 * 210
/Division5 / 22.5
%Modulus (remainder)5 % 21
**Exponentiation5 ** 225
arithmetic.php
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13
echo "\n";
echo $a - $b; // 7
echo "\n";
echo $a * $b; // 30
echo "\n";
echo $a / $b; // 3.3333333333333
echo "\n";
echo $a % $b; // 1
echo "\n";
echo $a ** $b; // 1000
?>
Output

Click Run to see what this code prints.

Assignment Operators

The basic assignment operator = stores a value in a variable. PHP also offers compound assignment operators that combine an arithmetic operation with assignment in a single step.

OperatorEquivalent ToExample
x = yx = y$x = 5;
x += yx = x + y$x += 3;
x -= yx = x - y$x -= 3;
x *= yx = x * y$x *= 3;
x /= yx = x / y$x /= 3;
x %= yx = x % y$x %= 3;
x **= yx = x ** y$x **= 2;
assignment.php
<?php
$score = 10;
$score += 5; // $score is now 15
$score -= 2; // $score is now 13
$score *= 2; // $score is now 26
echo $score;
?>
Output

Click Run to see what this code prints.

Comparison Operators

Comparison operators check the relationship between two values and always produce a boolean result — true or false.

OperatorNameDescription
==Equal (loose)True if values are equal after type conversion.
===Identical (strict)True if values are equal AND of the same type.
!= or <>Not equal (loose)True if values are not equal after type conversion.
!==Not identicalTrue if values differ in value or type.
>Greater thanTrue if left is greater than right.
<Less thanTrue if left is less than right.
>=Greater than or equalTrue if left is greater than or equal to right.
<=Less than or equalTrue if left is less than or equal to right.

== vs === (Loose vs Strict)

This is one of the most important distinctions in all of PHP. The == operator ("loose equality") converts both sides to a common type before comparing, which can lead to surprising results. The === operator ("strict equality") requires both the value and the type to match exactly, with no conversion at all.

loose-vs-strict.php
<?php
var_dump(0 == "abc"); // In PHP 8+: false (fixed from older PHP versions)
var_dump(0 == ""); // false
var_dump("1" == "01"); // true - both convert to the number 1
var_dump("10" == "1e1"); // true - both convert to the number 10
var_dump(100 == "1e2"); // true - both convert to the number 100
var_dump(0 == "0"); // true - both convert to the number 0
var_dump("1" === "01"); // false - different strings, no conversion
var_dump(100 === "1e2"); // false - int vs string, no conversion
var_dump(0 === "0"); // false - int vs string
var_dump(1 === 1.0); // false - int vs float, different types
?>
Output

Click Run to see what this code prints.

Always Prefer === in Practice

Loose equality (==) has historically produced confusing results when comparing numeric strings, so most modern PHP style guides recommend defaulting to === (and !==) unless you have a specific, deliberate reason to allow type conversion.

The Spaceship Operator

The spaceship operator <=> compares two values and returns -1, 0, or 1 depending on whether the left side is less than, equal to, or greater than the right side. It is especially useful inside custom sorting functions.

spaceship.php
<?php
echo 1 <=> 2; // -1 (1 is less than 2)
echo "\n";
echo 2 <=> 2; // 0 (equal)
echo "\n";
echo 3 <=> 2; // 1 (3 is greater than 2)
// A common use case: sorting an array of numbers
$numbers = [5, 3, 8, 1];
usort($numbers, fn($a, $b) => $a <=> $b);
print_r($numbers);
?>
Output

Click Run to see what this code prints.

Logical Operators

Logical operators combine or invert boolean expressions. PHP offers both symbol-based operators and word-based equivalents, which have subtly different precedence but behave the same in most everyday code.

SymbolWord FormMeaning
&&andTrue if both sides are true.
||orTrue if at least one side is true.
!(no word form)Inverts a boolean: true becomes false and vice versa.
(none)xorTrue if exactly one side is true, but not both.
logical.php
<?php
$isLoggedIn = true;
$isAdmin = false;
var_dump($isLoggedIn && $isAdmin); // false - both must be true
var_dump($isLoggedIn || $isAdmin); // true - at least one is true
var_dump(!$isLoggedIn); // false - inverts true
var_dump($isLoggedIn xor $isAdmin); // true - exactly one is true
?>
Output

Click Run to see what this code prints.

&& vs and, || vs or

The symbol forms (&&, ||) have higher precedence than the word forms (and, or). In practice this rarely matters, but it can cause subtle bugs when mixed with the = assignment operator, so most style guides recommend sticking to && and || consistently.

String Concatenation Operators

PHP uses the dot (.) operator to join strings together, and the .= operator to append a string onto an existing variable — the string equivalent of +=.

concatenation.php
<?php
$first = "Hello";
$last = "World";
$greeting = $first . ", " . $last . "!";
echo $greeting; // "Hello, World!"
echo "\n";
$message = "Loading";
$message .= "...";
$message .= " done";
echo $message; // "Loading... done"
?>
Output

Click Run to see what this code prints.

Operator Precedence

When an expression mixes multiple operators, PHP evaluates them in a fixed order of precedence — similar to the order of operations in math class. Parentheses always override the default order, so use them freely to make your intent explicit.

precedence.php
<?php
echo 2 + 3 * 4; // 14 - multiplication happens before addition
echo "\n";
echo (2 + 3) * 4; // 20 - parentheses force addition first
?>
Output

Click Run to see what this code prints.

Common Mistakes

Avoid These Mistakes
  • Using == when you actually need === — this is the single most common source of subtle PHP bugs.
  • Confusing the concatenation operator (.) with the addition operator (+) — PHP does not use + for strings.
  • Forgetting that / can return a float even when both operands are integers, such as 5 / 2.
  • Mixing the symbol and word forms of logical operators (&& vs and) without understanding their different precedence.

Best Practices

  • Default to === and !== unless you have a specific reason to allow type conversion.
  • Use parentheses to make precedence explicit in any non-trivial expression.
  • Prefer && and || over and/or for consistency and to avoid precedence surprises.
  • Reach for the spaceship operator (<=>) when writing custom sort comparisons.

Frequently Asked Questions

== ("loose equality") converts both values to a common type before comparing, while === ("strict equality") requires both the value and the type to already match, with no conversion performed.

In most modern PHP code, yes. Strict comparison avoids the surprising type-conversion behavior of loose comparison and is generally considered the safer default.

It returns an integer: -1 if the left operand is smaller, 0 if they are equal, and 1 if the left operand is larger — perfect for use inside functions like usort().

PHP's division operator always performs real division and returns a float when the result is not a whole number. Use intdiv() if you specifically need integer division.

Key Takeaways

  • Arithmetic operators include +, -, *, /, %, and ** for exponentiation.
  • Assignment operators like += and -= combine an operation with assignment.
  • == compares values loosely (with type conversion); === compares strictly (value and type).
  • The spaceship operator <=> returns -1, 0, or 1 for use in comparisons and sorting.
  • Logical operators && and || (or and/or) combine boolean expressions; ! inverts them.
  • The . operator concatenates strings, and .= appends to an existing string variable.

Summary

Operators are the building blocks of every expression you will write in PHP. Of everything covered here, the == vs === distinction is the one worth committing to memory first, since it quietly causes more bugs than almost anything else in beginner PHP code.

Lesson 13 Completed
  • You can perform arithmetic, assignment, and comparison operations confidently.
  • You understand the critical difference between == and ===.
  • You know how to use the spaceship operator for comparisons and sorting.
  • You can combine logical conditions with && and ||, and strings with . and .=.
Next Lesson →

User Input