Операторы инкремента и декремента
PHP, аналогично C, поддерживает префиксные и постфиксные операторы инкремента и декремента.
Пример | Название | Действие |
---|---|---|
++$a | Префиксный инкремент | Увеличивает $a на единицу и возвращает значение $a. |
$a++ | Постфиксный инкремент | Возвращает значение $a, а затем увеличивает $a на единицу. |
--$a | Префиксный декремент | Уменьшает $a на единицу и возвращает значение $a. |
$a-- | Постфиксный декремент | Возвращает значение $a, а затем уменьшает $a на единицу. |
Приведем пример простого скрипта:
<?php
echo "<h3>Постфиксный инкремент</h3>";
$a = 5;
echo "Должно быть 5: " . $a++ . "<br />\n";
echo "Должно быть 6: " . $a . "<br />\n";
echo "<h3>Префиксный инкремент</h3>";
$a = 5;
echo "Должно быть 6: " . ++$a . "<br />\n";
echo "Должно быть 6: " . $a . "<br />\n";
echo "<h3>Постфиксный декремент</h3>";
$a = 5;
echo "Должно быть 5: " . $a-- . "<br />\n";
echo "Должно быть 4: " . $a . "<br />\n";
echo "<h3>Префиксный декремент</h3>";
$a = 5;
echo "Должно быть 4: " . --$a . "<br />\n";
echo "Должно быть 4: " . $a . "<br />\n";
?>
PHP следует соглашениям Perl (в отличие от С) касательно выполнения арифметических операций с символьными переменными. Например в Perl 'Z'+1 будет вычислено как 'AA', в то время как в C 'Z'+1 будет вычислено как '[' ( ord('Z') == 90, ord('[') == 91 ). Следует учесть, что к символьным переменным можно применять операцию инкремента, в то время как операцию декремента применять нельзя.
Пример #1 Арифметические операции с символьными переменными
<?php
$i = 'W';
for($n=0; $n<6; $n++)
echo ++$i . "\n";
/*
Результат работы будет следующий:
X
Y
Z
AA
AB
AC
*/
?>
Инкрементирование или декрементирование булевых переменных не приводит ни к какому результату.
Коментарии
Note that
$a="9D9"; var_dump(++$a); => string(3) "9E0"
but counting onwards from there
$a="9E0"; var_dump(++$a); => float(10)
this is due to "9E0" being interpreted as a string representation of the float constant 9E0 (or 9e0), and thus evalutes to 9 * 10^0 = 9 (in a float context)