On Fri, Jun 18, 2021 at 5:57 PM Pierre <pierre-...@processus.org> wrote:
> 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 Rethans > > How is that even possible ? > > - I declared strict_types to avoid type coercion > strict_types applies to type checks only. It has no impact on other type coercions. - My data structure is opaque (all properties are private), > == comparison on objects is a == comparison on the properties. Whether the properties are private doesn't (and shouldn't) matter. Regards, Nikita