Skip to content

Instantly share code, notes, and snippets.

@pascal08
Last active September 25, 2018 18:09
Show Gist options
  • Save pascal08/8a7c79266dcc83f528e5f3c562a09f97 to your computer and use it in GitHub Desktop.
Save pascal08/8a7c79266dcc83f528e5f3c562a09f97 to your computer and use it in GitHub Desktop.
Loose comparison vs. strict comparison in PHP
<?php
class A {
public $val;
}
class B {
public $val;
}
class C {
public $val;
}
echo '
Example 1:
Compare two objects with properties containing scalar values
';
$a1 = new A;
$a2 = new A;
echo '$a1: ';
var_dump($a1);
echo '$a2: ';
var_dump($a2);
echo '$a1 == $a2: ';
var_dump($a1 == $a2); // true
echo '$a1 === $a2: ';
var_dump($a1 === $a2); // false
echo PHP_EOL;
echo '
Example 2:
Compare two objects with properties containing scalar values
';
$a1 = new A;
$a2 = new A;
$c1 = new C;
$c1->val = 1;
$a1->b = $c1;
$c2 = new C;
$c2->val = 2;
$a2->b = $c2;
echo '$a1: ';
var_dump($a1);
echo '$a2: ';
var_dump($a2);
echo '$a1 == $a2: ';
var_dump($a1 == $a2); // false
echo '$a1 === $a2: ';
var_dump($a1 === $a2); // false
echo PHP_EOL;
echo '
Example 3:
Compare two objects with properties containing objects
';
$a1 = new A;
$a2 = new A;
$b1 = new B;
$c1 = new C;
$c1->val = 1;
$b1->val = $c1;
$a1->val = $b1;
$b2 = new B;
$c2 = new C;
$c2->val = 2;
$b2->val = $c2;
$a2->val = $b2;
echo '$a1: ';
var_dump($a1);
echo '$a2: ';
var_dump($a2);
echo '$a1 == $a2: ';
var_dump($a1 == $a2); // false
echo '$a1 === $a2: ';
var_dump($a1 === $a2); // false
echo PHP_EOL;
echo '
Example 4:
Compare two objects with circular dependencies
';
$a1 = new A;
$a2 = new A;
$b1 = new B;
$a1->val = $b1;
$b1->val = $a1;
$b2 = new B;
$a2->val = $b2;
$b2->val = $a2;
echo '$a1: ';
var_dump($a1);
echo '$a2: ';
var_dump($a2);
// echo '$a1 == $a2: ';
// var_dump($a1 == $a2); // false (fatal error, nesting level too deep)
echo '$a1 === $a2: ';
var_dump($a1 === $a2); // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment