How does the PHP spaceship operator <=> handle incomparable operands?

A spaceship operator will be added to PHP. I am not sure how it works in some cases.

$a <=> $b will return:

  • 1 if $ a> $ b
  • 0 if $ a == $ b
  • -1 if $ a <$ b li>

What happens if the values ​​are not comparable?

What types of variables can be compared?

+4
source share
1 answer

Simple! , , compare_function PHP, compare_function 200- - C, . 4 , , ; !

...

, , , . .

<, == > , <=>

PHP . , , <, == >.

, int:

php > var_dump(3 < 'bla');
bool(false)
php > var_dump(3 == 'bla');
bool(false)
php > var_dump(3 > 'bla');
bool(true)
php > var_dump(3 <=> 'bla');
int(1)

null :

php > $fp = fopen('test', 'r');
php > var_dump(null > $fp);
bool(false)
php > var_dump(null == $fp);
bool(false)
php > var_dump(null < $fp);
bool(true)
php > var_dump(null <=> $fp);
int(-1)

:

php > var_dump(1.0 > []);
bool(false)
php > var_dump(1.0 == []);
bool(false)
php > var_dump(1.0 < []);
bool(true)
php > var_dump(1.0 <=> []);
int(-1)

$a <=> $b - , docs: -1 if $a < $b, 0 if $a == $b 1, $a > $b.

<, == > true, 1

, $a < $b, $a == $b $a > $b, , . $a <=> $b 1, .

, :

php > class Foo {}
php > class Bar {}
php > $a = new Foo;
php > $b = new Bar;
php > var_dump($a < $b);
bool(false)
php > var_dump($a == $b);
bool(false)
php > var_dump($a > $b);
bool(false)
php > var_dump($a <=> $b);
int(1)
php > var_dump($b <=> $a);
int(1)

, , :

php > $a = ['foo' => 'bar'];
php > $b = ['bar' => 'foo'];
php > var_dump($a < $b);
bool(false)
php > var_dump($a == $b);
bool(false)
php > var_dump($a > $b);
bool(false)
php > var_dump($a <=> $b);
int(1)
php > var_dump($b <=> $a);
int(1)

<=>

int, , :

php > $a = new stdclass;
php > var_dump($a <=> 1);
PHP Notice:  Object of class stdClass could not be converted to int in php shell code on line 1
int(0)

, , , , . , , .

+9

All Articles