Loose and strict comparisons help you check if two values are equal in different ways. Loose comparison is flexible, strict comparison is exact.
Loose comparison vs strict comparison in PHP
$a == $b; // Loose comparison $a === $b; // Strict comparison
Loose comparison (==) converts types if needed before comparing.
Strict comparison (===) checks both value and type without conversion.
$a = 5; $b = '5'; var_dump($a == $b); // true var_dump($a === $b); // false
$x = 0; $y = false; var_dump($x == $y); // true var_dump($x === $y); // false
$m = null; $n = ''; var_dump($m == $n); // false var_dump($m === $n); // false
This program shows how loose comparison (==) treats 10 and '10' as equal, but strict comparison (===) does not because of type difference.
It also shows strict comparison returns true when both value and type match.
<?php $a = 10; $b = '10'; $c = 10; $d = 20; // Loose comparisons var_dump($a == $b); // true var_dump($a == $d); // false // Strict comparisons var_dump($a === $b); // false var_dump($a === $c); // true
Loose comparison can lead to unexpected results if you don't know how PHP converts types.
Use strict comparison when you want to avoid bugs caused by type juggling.
Remember that null, false, 0, and empty strings can behave unexpectedly with loose comparison.
Loose comparison (==) checks if values are equal after converting types.
Strict comparison (===) checks if values and types are exactly the same.
Use strict comparison to avoid surprises and bugs.
Practice
== and === in PHP?Solution
Step 1: Understand loose comparison
Loose comparison (==) converts types if needed and then compares values.Step 2: Understand strict comparison
Strict comparison (===) checks both value and type without conversion.Final Answer:
==compares values after type conversion,===compares value and type exactly -> Option AQuick Check:
Loose == vs Strict === ===compares values after type conversion,===compares value and type exactly [OK]
- Thinking == compares types only
- Confusing assignment (=) with comparison (==)
- Assuming === converts types before comparing
Solution
Step 1: Identify strict comparison operator
Strict comparison uses three equal signs:===.Step 2: Check syntax correctness
$a === $b;is valid syntax for strict comparison.Final Answer:
$a === $b;-> Option DQuick Check:
Strict comparison syntax =$a === $b;[OK]
- Typing == instead of ===
- Using = which is assignment, not comparison
- Confusing == (loose) with === (strict)
$a = 0;
$b = '0';
if ($a == $b) {
echo 'Equal';
} else {
echo 'Not Equal';
}
if ($a === $b) {
echo ' Strictly Equal';
} else {
echo ' Not Strictly Equal';
}
Solution
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'.Step 2: Evaluate strict comparison ($a === $b)
Strict comparison checks type and value. Integer 0 !== string '0', so false, prints ' Not Strictly Equal'.Final Answer:
Equal Not Strictly Equal -> Option CQuick Check:
0 == '0' true, 0 === '0' false = Equal Not Strictly Equal [OK]
- Assuming strict comparison returns true for 0 and '0'
- Confusing output order
- Ignoring spaces in echoed strings
$x = '10';
if ($x = 10) {
echo 'Match';
} else {
echo 'No Match';
}
Solution
Step 1: Check if condition operator
The condition uses=which assigns 10 to $x instead of comparing.Step 2: Understand effect of assignment in if
Assignment returns 10 (truthy), so 'Match' always prints, ignoring original $x value.Final Answer:
Using assignment (=) instead of comparison (==) in if condition -> Option AQuick Check:
Assignment in if condition = Using assignment (=) instead of comparison (==) in if condition [OK]
- Confusing = with == in conditions
- Thinking missing semicolon causes error here
- Assuming quotes affect comparison operator
$input is exactly the integer 0 (zero) and not a string '0' or other falsy value. Which condition is the best to use?Solution
Step 1: Understand the requirement
We want to check if$inputis integer 0 exactly, not string '0' or other falsy values.Step 2: Choose strict comparison
==allows type conversion, so string '0' == 0 is true, which is not desired.===checks type and value strictly.Final Answer:
if ($input === 0)-> Option BQuick Check:
Exact type and value check =if ($input === 0)[OK]
- Using == and getting true for string '0'
- Using != or !== which check for inequality
- Ignoring type differences in comparisons
Ready to prove it?
Pass the test and this pattern moves unknown
