Simple support question, about object equality
| From: | Pierre | Date: | Fri, 18 Jun 2021 15:56:42 +0000 |
| Subject: | Simple support question, about object equality | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-114958@lists.php.net to get a copy of this message | ||
This code:
<?php
declare(strict_types=1);
class Foo
{
public string $foo;
public function __construct(
string $foo
) {
$this->foo = $foo;
}
}
$a = new Foo('bar');
$b = new Foo('buzz');
$c = new Foo('bar');
echo "\$a == \$b: "; var_dump($a == $b);
echo "\$a == \$c: "; var_dump($a == $c);
echo "\$a != \$b: "; var_dump($a != $b);
echo "\$a != \$c: "; var_dump($a != $c);
echo "\$a === \$b: "; var_dump($a === $b);
echo "\$a === \$c: "; var_dump($a === $c);
echo "\$a !== \$b: "; var_dump($a !== $b);
echo "\$a !== \$c: "; var_dump($a !== $c);
?>
Will output:
<pre>
$a == $b: bool(false)
$a == $c: bool(true)
$a != $b: bool(true)
$a != $c: bool(false)
$a === $b: bool(false)
$a === $c: bool(false)
$a !== $b: bool(true)
$a !== $c: bool(true)
</pre>
Using:
php -v
PHP 8.0.7 (cli) (built: Jun 2 2021 04:04:16) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.7, Copyright (c) Zend Technologies
with Zend OPcache v8.0.7, Copyright (c), by Zend Technologies with Xdebug v3.0.2, Copyright (c) 2002-2021, by Derick RethansHow is that even possible ? - I declared strict_types to avoid type coercion - My data structure is opaque (all properties are private), How does the engine succeeds in comparing my objects ? Isn't it supposed to be always false for == and === and always true for != and !== ? I am missing something ? Regards, -- Pierre