Intereting Posts
Как расширить несколько классов полезности Codeigniter Download Helper повреждает .7z и .rar файлы помощи или альтернативных решений? mysqli_query () возвращает «Таблица не существует» для известной таблицы – Разрешения выдаются? время работы ресторана с таблицей базы данных в формате для чтения человеком с использованием php Отправка файла вместе с данными формы через сообщение ajax Как выйти из системы и переадресовать ее на страницу входа в систему с помощью Laravel 5.3? PHP нажимает значение на массив во время рекурсивного поиска Войдите в Gmail Inbox с помощью Curl? ZMQ REP REQ – Отправка Получать не работает Symfony2 – Как использовать __construct () в контроллере и получить доступ к Securty.Context? Laravel Hash :: check () allways возвращает false Валидаторы Zend и сообщения об ошибках: addValidator и addErrorMessage Разрешение: эта таблица не содержит уникальный столбец. Редактирование сетки, флажок, редактирование, копирование и удаление недоступны Возвращенный JSONObject всегда равен нулю. Получение отрывка из HTML в PHP

Странное поведение оператора ++ в PHP 5.3

Смотреть следующий код:

$a = 'Test'; echo ++$a; 

Это приведет к выводу:

 Tesu 

Вопрос в том, почему?

Я знаю, что «u» после «t», но почему он не печатает «1» ???

EDIT: Becouse Книги Zend учат:

Кроме того, переменная, увеличивающаяся или уменьшенная, будет преобразована в соответствующий тип числовых данных, поэтому следующий код вернет 1, потому что строка Test сначала преобразуется в целое число 0, а затем увеличивается.

Related of "Странное поведение оператора ++ в PHP 5.3"

В PHP вы можете увеличивать строки (но вы не можете «увеличивать» строки с помощью оператора сложения, так как оператор добавления приведет к тому, что строка будет передана в int , вы можете использовать оператор increment для «увеличения» строк! … см. последний пример):

Итак, "a" + 1"b" после того, как "z" приходит "aa" и так далее.

Поэтому после того, как "Test" приходит "Tesu"

Вы должны следить за приведенным выше при использовании автоматического принуждения типа PHP.

Автоматическое принуждение типа:

 <?php $a="+10.5"; echo ++$a; // Output: 11.5 // Automatic type coercion worked "intuitively" ?> 

Нет автоматического принуждения типа! (приращение строки):

 <?php $a="$10.5"; echo ++$a; // Output: $10.6 // $a was dealt with as a string! ?> 


Вам нужно сделать дополнительную работу, если вы хотите иметь дело с ординалами букв ASCII.

Если вы хотите конвертировать буквы в свои ASCII-ординалы, используйте ord () , но это будет работать только по одной букве за раз.

 <?php $a="Test"; foreach(str_split($a) as $value) { $a += ord($value); // string + number = number // strings can only handle the increment operator // not the addition operator (the addition operator // will cast the string to an int). } echo ++$a; ?> 

живой пример

В приведенном выше примере используется тот факт, что строки могут быть только добавлены в PHP. Они не могут быть увеличены с помощью оператора сложения. Использование оператора сложения в строке приведет к тому, что оно будет передано в int , поэтому:

Строки нельзя «увеличить» с помощью оператора сложения:

 <?php $a = 'Test'; $a = $a + 1; echo $a; // Output: 1 // Strings cannot be "added to", they can only be incremented using ++ // The above performs $a = ( (int) $a ) + 1; ?> 

Вышеприведенное будет пытаться применить « Test » к (int) перед добавлением 1 . Кастинг « Test » на (int) приводит к 0 .


Примечание. Вы не можете уменьшать строки :

Обратите внимание, что символьные переменные могут увеличиваться, но не уменьшаться, и поэтому поддерживаются только простые символы ASCII (az и AZ).

Предыдущее означает, что echo --$a; на самом деле напечатает Test без изменения строки.


PHP следует за соглашением Perl при работе с арифметическими операциями над символьными переменными, а не с C. Например, в Perl 'Z' + 1 превращается в 'AA', а в C 'Z' + 1 превращается в '[' (ord ('Z') == 90, ord ('[') == 91) , Обратите внимание, что символьные переменные могут увеличиваться, но не уменьшаться, и поэтому поддерживаются только простые символы ASCII (az и AZ).

Источник: http://php.net/operators.increment

Оператор приращения в PHP работает с порядковыми значениями строк внутри. Строки не добавляются к целым числам до приращения.