Может кто-нибудь, пожалуйста, объясните, почему этот код печатает 2
?
$var = 1 + + + 1;
echo $var;
Ссылка на страница арифметических операторов в руководстве.
Если у php есть две сущности для выполнения арифметики / математики, он будет расставлять приоритеты для этого действия, а не для идентификации / отрицания. +
а также -
Символ (ы) будут обрабатываться как операторы идентификации / отрицания, когда математическая операция уже определена между двумя объектами или когда существует только один объект.
Код: (демонстрация)
$var4 = 0 - - 4; // zero minus negated 4
var_export($var4);
echo "\n";
$var5 = - 5; // negated 5
var_export($var5);
echo "\n";
$var6 = - - 6; // negated negated 6
var_export($var6);
echo "\n";
$var7 = - - - 7; // negated negated negated 7
var_export($var7);
echo "\n";
$var8 = - - - - 8; // negated negated negated negated 8
var_export($var8);
Выход:
4
-5
6
-7
8
Операторы не плюс / не минус, а именно: *
, /
, %
, а также **
— иметь только одну интерпретацию и, таким образом, вызывать ошибку разбора, когда предшествующая математическая операция уже определена.
Ниспадающие арифметические операторы справа не могут использоваться как сложение, вычитание, идентификация, отрицание и т. Д., Что может привести к ошибке разбора. Например 8 - -
https://3v4l.org/qr2D8
Более того…
echo 1 + - 2; // -1 (1 plus neg 2)
echo "\n";
echo 1 - + 2; // -1 (1 minus pos 2)
echo "\n";
echo 1 + - - 3; // 4 (1 plus neg neg 3)
echo "\n";
echo 1 - + + 3; // -2 (1 minus pos pos 3)
echo "\n";
echo 1 - - - 3; // -2 (1 minus neg neg 3)
echo "\n";
echo 1 + + + 3; // 4 (1 plus pos pos 3)
echo "\n";
echo 1 + + - - 4; // 5 (1 plus pos neg neg 4)
echo "\n";
echo 1 - - + + 4; // 5 (1 minus neg pos pos 4)
echo "\n";
echo 1 - - - - 4; // 5 (1 minus neg neg neg 4)
echo "\n";
//echo 1 - - * + 4; // parse error
//echo "\n";
Это основная математика. То, что вы рассчитываете, в основном просто
1 + (++1)
и знаки плюс (не операторы плюс) являются необязательными. Так что это просто
1 + (1)
который 2.
Если вы сделали 1 + + - 1
результат будет 0, потому что вы рассчитываете
1 + (+-1)
и + и — могут быть сокращены до просто —
так что вы рассчитываете
1 + (-1)
или просто
1 - 1
Как вы видете Вот +
Знак может иметь два разных значения. Первый — это «идентичность», а второй — «дополнение».
Arithmetic Operators
Example Name Result
+$a Identity Conversion of $a to int or float as appropriate.
-$a Negation Opposite of $a.
$a + $b Addition Sum of $a and $b.
Это означает
1 + + + 1
^ ^ ^ ^ ^
| | | | `- int
| | | `- identity operator
| | `- identity operator
| `- addition operator
`- int