Incrementing/Decrementing Operators

Оновлено: 11.05.2023

PHP підтримує оператори інкременту та декременту в стилі C до та після інкременту та декременту.

Примітка: Оператори інкременту/декременту впливають лише на числа та рядки. Масиви, об'єкти, булеві функції та ресурси не впливають на них. Зменшення нульових значень також не має ефекту, але їх збільшення призводить до отримання 1.

Increment/decrement Operators Example Name Effect ++$a Pre-increment Increments $a by one, then returns $a. $a++ Post-increment Returns $a, then increments $a by one. --$a Pre-decrement Decrements $a by one, then returns $a. $a-- Post-decrement Returns $a, then decrements $a by one.

Ось простий приклад скрипта:

<?php
echo "<h3>Postincrement</h3>";
$a = 5;
echo "Should be 5: " . $a++ . "<br />\n";
echo "Should be 6: " . $a . "<br />\n";

echo "<h3>Preincrement</h3>";
$a = 5;
echo "Should be 6: " . ++$a . "<br />\n";
echo "Should be 6: " . $a . "<br />\n";

echo "<h3>Postdecrement</h3>";
$a = 5;
echo "Should be 5: " . $a-- . "<br />\n";
echo "Should be 4: " . $a . "<br />\n";

echo "<h3>Predecrement</h3>";
$a = 5;
echo "Should be 4: " . --$a . "<br />\n";
echo "Should be 4: " . $a . "<br />\n";
?>

PHP дотримується домовленостей Perl, коли має справу з арифметичними операціями над символьними змінними, а не C. Наприклад, в PHP і Perl $a = 'Z'; $a++; перетворює $a в 'AA', тоді як в C a = 'Z'; a++; перетворює a в '[' (ASCII значення 'Z' - 90, ASCII значення '[' - 91). Зверніть увагу, що символьні змінні можна інкрементувати, але не декрементувати, і навіть у цьому випадку підтримуються лише звичайні літери та цифри ASCII (a-z, A-Z та 0-9). Збільшення/зменшення інших символьних змінних не має ніякого ефекту, вихідний рядок залишається незмінним.

Приклад #1 Арифметичні операції над символьними змінними

<?php
echo '== Alphabetic strings ==' . PHP_EOL;
$s = 'W';
for ($n=0; $n<6; $n++) {
    echo ++$s . PHP_EOL;
}
// Alphanumeric strings behave differently
echo '== Alphanumeric strings ==' . PHP_EOL;
$d = 'A8';
for ($n=0; $n<6; $n++) {
    echo ++$d . PHP_EOL;
}
$d = 'A08';
for ($n=0; $n<6; $n++) {
    echo ++$d . PHP_EOL;
}
?>

Збільшення або зменшення булеанів не має ніякого ефекту.