Bird
Raised Fist0
PHPprogramming~3 mins

Loose comparison vs strict comparison in PHP - When to Use Which

Choose your learning style10 modes available
The Big Idea

Discover why '5' == 5 can be true but '5' === 5 is false, and how this saves your code from hidden bugs!

The Scenario

Imagine you are checking if a user's input matches a stored value, but the input might be a number or a string. You try to compare them manually by writing many if-else checks to cover all cases.

The Problem

This manual way is slow and confusing because you have to guess all possible types and conversions. It's easy to make mistakes and miss cases, causing bugs that are hard to find.

The Solution

Using loose and strict comparison operators in PHP lets you handle these checks clearly and correctly. Loose comparison (==) lets PHP convert types automatically, while strict comparison (===) checks both value and type, avoiding surprises.

Before vs After
✗ Before
$a = '5';
if ($a == 5) {
  echo 'Match';
}
✓ After
$a = '5';
if ($a === 5) {
  echo 'Match';
} else {
  echo 'No match';
}
What It Enables

This concept lets you control how PHP compares values, making your code more reliable and easier to understand.

Real Life Example

When checking a password or user ID, strict comparison ensures you don't accept '123' as equal to 123, protecting your app from errors or security issues.

Key Takeaways

Loose comparison converts types before checking equality.

Strict comparison checks both value and type exactly.

Choosing the right comparison avoids bugs and confusion.

Practice

(1/5)
1. What is the main difference between == and === in PHP?
easy
A. == compares values after type conversion, === compares value and type exactly
B. == compares only types, === compares only values
C. == is used for assignment, === is used for comparison
D. == compares memory addresses, === compares values

Solution

  1. Step 1: Understand loose comparison

    Loose comparison (==) converts types if needed and then compares values.
  2. Step 2: Understand strict comparison

    Strict comparison (===) checks both value and type without conversion.
  3. Final Answer:

    == compares values after type conversion, === compares value and type exactly -> Option A
  4. Quick Check:

    Loose == vs Strict === = == compares values after type conversion, === compares value and type exactly [OK]
Hint: Remember: === means exactly equal type and value [OK]
Common Mistakes:
  • Thinking == compares types only
  • Confusing assignment (=) with comparison (==)
  • Assuming === converts types before comparing
2. Which of the following is the correct syntax for strict comparison in PHP?
easy
A. $a = $b;
B. $a !== $b;
C. $a == $b;
D. $a === $b;

Solution

  1. Step 1: Identify strict comparison operator

    Strict comparison uses three equal signs: ===.
  2. Step 2: Check syntax correctness

    $a === $b; is valid syntax for strict comparison.
  3. Final Answer:

    $a === $b; -> Option D
  4. Quick Check:

    Strict comparison syntax = $a === $b; [OK]
Hint: Use three equal signs for strict comparison [OK]
Common Mistakes:
  • Typing == instead of ===
  • Using = which is assignment, not comparison
  • Confusing == (loose) with === (strict)
3. What will be the output of the following PHP code?
$a = 0;
$b = '0';
if ($a == $b) {
echo 'Equal';
} else {
echo 'Not Equal';
}
if ($a === $b) {
echo ' Strictly Equal';
} else {
echo ' Not Strictly Equal';
}
medium
A. Equal Strictly Equal
B. Not Equal Strictly Equal
C. Equal Not Strictly Equal
D. Not Equal Not Strictly Equal

Solution

  1. Step 1: Evaluate loose comparison ($a == $b)

    $a is integer 0, $b is string '0'. Loose comparison converts types, so 0 == '0' is true, prints 'Equal'.
  2. Step 2: Evaluate strict comparison ($a === $b)

    Strict comparison checks type and value. Integer 0 !== string '0', so false, prints ' Not Strictly Equal'.
  3. Final Answer:

    Equal Not Strictly Equal -> Option C
  4. Quick Check:

    0 == '0' true, 0 === '0' false = Equal Not Strictly Equal [OK]
Hint: Loose ignores type, strict checks type too [OK]
Common Mistakes:
  • Assuming strict comparison returns true for 0 and '0'
  • Confusing output order
  • Ignoring spaces in echoed strings
4. Find the error in this PHP code snippet:
$x = '10';
if ($x = 10) {
echo 'Match';
} else {
echo 'No Match';
}
medium
A. Using assignment (=) instead of comparison (==) in if condition
B. Missing semicolon after echo statement
C. Using double quotes instead of single quotes
D. Variable $x is not defined

Solution

  1. Step 1: Check if condition operator

    The condition uses = which assigns 10 to $x instead of comparing.
  2. Step 2: Understand effect of assignment in if

    Assignment returns 10 (truthy), so 'Match' always prints, ignoring original $x value.
  3. Final Answer:

    Using assignment (=) instead of comparison (==) in if condition -> Option A
  4. Quick Check:

    Assignment in if condition = Using assignment (=) instead of comparison (==) in if condition [OK]
Hint: Use == or === for comparison, not = [OK]
Common Mistakes:
  • Confusing = with == in conditions
  • Thinking missing semicolon causes error here
  • Assuming quotes affect comparison operator
5. You want to check if a user input variable $input is exactly the integer 0 (zero) and not a string '0' or other falsy value. Which condition is the best to use?
hard
A. if ($input == 0)
B. if ($input === 0)
C. if ($input != 0)
D. if ($input !== 0)

Solution

  1. Step 1: Understand the requirement

    We want to check if $input is integer 0 exactly, not string '0' or other falsy values.
  2. Step 2: Choose strict comparison

    == allows type conversion, so string '0' == 0 is true, which is not desired. === checks type and value strictly.
  3. Final Answer:

    if ($input === 0) -> Option B
  4. Quick Check:

    Exact type and value check = if ($input === 0) [OK]
Hint: Use === to check exact type and value [OK]
Common Mistakes:
  • Using == and getting true for string '0'
  • Using != or !== which check for inequality
  • Ignoring type differences in comparisons
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard