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

Reply via email to