PHP>!оператор не легален, но работает - PullRequest
0 голосов
/ 25 октября 2018

Итак, я использовал >! оператор сравнения в PHP 5.6, и он работает.Его нет в документации операторов, и я запутался, почему он работает и почему PHPStorm не жалуется на это?Даже если !($foo > $bar) будет правильным синтаксисом.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Ваш >! оператор на самом деле два оператора: > и !.! применяется ко второму аргументу:

var_dump(!4);     // `false`
var_dump(3 >! 4); // `true`

Почему последний случай это true:

var_dump(3 >! 4) совпадает с var_dump(3 >(! 4)) из-за приоритета операторов

  • во-первых, применение ! к 4 дает вам false
  • секунду, сравнение 3 и false дает вам true, потому что3 - это truthy значение, которое всегда больше , чем любое falsy / false значение.

На практике вы можете понять такие хитрые случаи:

var_dump(0 > !0);   // false
var_dump(-3 > !0);  // false
0 голосов
/ 25 октября 2018

Кажется, это не работает для меня, как оператор сравнения переменных.В php 5.6 результаты противоречивы:

$a = 10;
$b = 5;

var_dump($a >! $b);

возвращает true

, но

$a = 10;
$b = 11;

var_dump($a >! $b);

возвращает true снова

Как и другиезаявили, что ваша переменная оценивается как false, что делает оператор if возвращает true в приведенном выше коде

...