Почему 1 + + + 1 оценивается в 2 в php? - PullRequest
0 голосов
/ 27 апреля 2018

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

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

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Обратитесь к странице арифметических операторов в руководстве .

Если в 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";
0 голосов
/ 27 апреля 2018

Это базовая математика. То, что вы рассчитываете, в основном просто

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...