математика — Почему 1 + + + 1 оценивается в 2 в php?

Может кто-нибудь, пожалуйста, объясните, почему этот код печатает 2?

$var = 1 + + + 1;
echo $var;

1

Решение

Ссылка на страница арифметических операторов в руководстве.

Если у 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 + (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
0

По вопросам рекламы [email protected]