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)Зголемување и намалување
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Зголемување и намалување
Референца за `language.operators.increment.php` со подобрена типографија и навигација.
Оператори за зголемување/намалување
PHP поддржува претходни и постфиксни оператори за зголемување и намалување. Овие унитарни оператори овозможуваат вредноста да се зголеми или намали за еден.
| Пример | Име | Ефект |
|---|---|---|
| ++$a | Pre-increment | Зголемува $a за еден, потоа враќа $a. |
| $a++ | Post-increment | Патеката до PHP скриптата што треба да се провери. $a, потоа зголемува $a за еден. |
| --$a | Pre-decrement | Намалува $a за еден, потоа враќа $a. |
| $a-- | Post-decrement | Патеката до PHP скриптата што треба да се провери. $a, потоа намалува $a за еден. |
Пример #1 Примери за зголемување/намалување
<?php
echo 'Post-increment:', PHP_EOL;
$a = 5;
var_dump($a++);
var_dump($a);
echo 'Pre-increment:', PHP_EOL;
$a = 5;
var_dump(++$a);
var_dump($a);
echo 'Post-decrement:', PHP_EOL;
$a = 5;
var_dump($a--);
var_dump($a);
echo 'Pre-decrement:', PHP_EOL;
$a = 5;
var_dump(--$a);
var_dump($a);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Post-increment: int(5) int(6) Pre-increment: int(6) int(6) Post-decrement: int(5) int(4) Pre-decrement: int(4) int(4)
Операторите за зголемување и намалување немаат ефект врз вредностите од типот bool. А E_WARNING се емитува од PHP 8.3.0, бидејќи ова имплицитно ќе ја претвори вредноста во int во иднина.
Операторот за намалување нема ефект врз вредностите од типот null. А E_WARNING се емитува од PHP 8.3.0, бидејќи ова имплицитно ќе ја претвори вредноста во int во иднина.
Операторот за намалување нема ефект врз не-
нумерички стринг. А E_WARNING се емитува од PHP 8.3.0, бидејќи а TypeError ќе биде фрлено во иднина.
Забелешка:
Внатрешните објекти што поддржуваат преоптоварување на собирање и/или одземање, исто така можат да бидат зголемени и/или намалени. Еден таков внатрешен објект е GMP.
PERL функција за зголемување на стринг
Оваа функција е меко отпишана од PHP 8.3.0. Функцијата str_increment() треба да се користи наместо тоа.
Можно е да се зголеми не-
нумерички стринг
во PHP. Стрингот мора да биде алфанумерички ASCII стринг. Кој ги зголемува буквите до следната буква, кога ќе се достигне буквата
Z зголемувањето се пренесува на вредноста од левата страна. На пример, $a = 'Z'; $a++; turns $a
into 'AA'.
Пример #2 Пример за зголемување на PERL стринг
<?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;
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
== Alphabetic strings == X Y Z AA AB AC == Alphanumeric strings == A9 B0 B1 B2 B3 B4 A09 A10 A11 A12 A13 A14
Ако алфанумеричкиот стринг може да се толкува како нумерички стринг ќе биде префрлен на int or float. Ова е особено проблем со стрингови кои изгледаат како броеви со пловечка запирка напишани во експоненцијална нотација. Функцијата str_increment() не страда од овие имплицитни префрлања на тип.
Пример #3 Алфанумерички стринг префрлен во float
<?php
$s = "5d9";
var_dump(++$s);
var_dump(++$s);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
string(3) "5e0" float(6)
Ова е затоа што вредноста "5e0" се толкува како float и се префрла на вредноста 5.0
пред да биде зголемена.