3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Role { public $public; protected $protected; private $private; public function __construct($prop) { $this->public = $prop; $this->protected = $prop; $this->private = $prop; } } $test = [(new Role(false)), (new Role(1)), (new Role(null)), (new Role("1")), (new Role(2)), (new Role(0))]; var_export( array_unique($test, SORT_REGULAR) ); echo "\n---\n"; var_export( array_filter( $test, fn($o, $k) => array_search($o, $test, true) === $k, ARRAY_FILTER_USE_BOTH ) );
Output for 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
array ( 0 => \Role::__set_state(array( 'public' => false, 'protected' => false, 'private' => false, )), 1 => \Role::__set_state(array( 'public' => 1, 'protected' => 1, 'private' => 1, )), 4 => \Role::__set_state(array( 'public' => 2, 'protected' => 2, 'private' => 2, )), ) --- array ( 0 => \Role::__set_state(array( 'public' => false, 'protected' => false, 'private' => false, )), 1 => \Role::__set_state(array( 'public' => 1, 'protected' => 1, 'private' => 1, )), 2 => \Role::__set_state(array( 'public' => NULL, 'protected' => NULL, 'private' => NULL, )), 3 => \Role::__set_state(array( 'public' => '1', 'protected' => '1', 'private' => '1', )), 4 => \Role::__set_state(array( 'public' => 2, 'protected' => 2, 'private' => 2, )), 5 => \Role::__set_state(array( 'public' => 0, 'protected' => 0, 'private' => 0, )), )
Output for 8.1.0 - 8.1.33
array ( 0 => Role::__set_state(array( 'public' => false, 'protected' => false, 'private' => false, )), 1 => Role::__set_state(array( 'public' => 1, 'protected' => 1, 'private' => 1, )), 4 => Role::__set_state(array( 'public' => 2, 'protected' => 2, 'private' => 2, )), ) --- array ( 0 => Role::__set_state(array( 'public' => false, 'protected' => false, 'private' => false, )), 1 => Role::__set_state(array( 'public' => 1, 'protected' => 1, 'private' => 1, )), 2 => Role::__set_state(array( 'public' => NULL, 'protected' => NULL, 'private' => NULL, )), 3 => Role::__set_state(array( 'public' => '1', 'protected' => '1', 'private' => '1', )), 4 => Role::__set_state(array( 'public' => 2, 'protected' => 2, 'private' => 2, )), 5 => Role::__set_state(array( 'public' => 0, 'protected' => 0, 'private' => 0, )), )

preferences:
63.78 ms | 411 KiB | 5 Q