Вопрос по php – Инкрементный символ работает, но добавление - нет. Зачем?

6
<code>$a = 'a';
print ($a+1);
print ($a++);
print $a;
</code>

Выход:1 a b

Таким образом, ясно, что оператор приращения выполнил свою работу, но я не понимаю, почему вывод равен «1». в случае$a+1, Кто-нибудь может объяснить?

Ваш Ответ

4   ответа
0

в целое число. Так же, как если бы вы использовали atoi в C, 'a'; интерпретируется как 0. Следовательно, 0 + 1 равно 1.

Инкремент - это не та же операция, что и сложение. PHP следует соглашению Perl. Видеть это:php.net/manual/en/language.operators.increment.php
Да, но почему$a++ изменить значение$a вb и не1?
1

что PHP обрабатывает переменные в специфическом контексте. Это немного похоже на Visual Basic.

Выражение'a' + 1 использует математическое сложение. В данном контекстеa интерпретируется как число, поэтому оно будет считаться 0 (если вы знакомы с C, это похоже на подачу строки "a" вatoi()).

Если вы используете выражение'a' . 1 результат будетa1 из-за этого с помощью конкатенации строк.

Чтобы получить ожидаемый результат (b), вы должны использоватьchr(ord('a') + 1), гдеord() явно возвращает значение ASCII (первого) символа.

$a++ это особый случай, по сути, перегрузка, которая рассматривает значение ascii вместо самого значения в качестве переменной.

1

http://php.net/manual/en/types.comparisons.php«a» +1 выполняется как 0 + 1. Там, где некоторые языки (C #) переводят (строка) + (int) в (строку) + (строка), PHP делает обратное: (int) + (int).

Для принудительной конкатенации строк:"a" . 1 дает "a1".

7

'a' + 1 не является'b'.

'a' в числовом контексте0, а также0+1 = 1.

php> echo (int)'a';
0

Дело в том, что постфиксный / префиксный оператор приращенияdo работать так, как если бы это был символ C, похоже, неприятная "особенность" PHP. Тем более что операторы декремента в этом случае не используются.

Когда вы увеличиваете'z' становится еще хуже:

php> $a = 'z';
php> echo ++$a
aa
@Shubham & quot; No-op & quot; означает «нет операции», то есть ничего не происходит. Это объяснено здесь прямо перед первым примером:php.net/manual/en/language.operators.increment.php
PHP чертовски странно! Спасибо за объяснение! Shubham
На самом деле, я бы не назвал это странным. Он по существу следует стандартным математическим правилам, используя основание 25 (с буквами вместо цифр).
Что вы подразумеваете под? : "Тем более, что операторы декремента в этом случае не используются". Shubham
Между прочим, даже в с 'a' +1 не является 'b'; но символ ("+1")! Я говорю о верхнем гипсе.

Похожие вопросы