PHP Conference Nagoya 2025

Artırım ve Eksiltim İşleçleri

PHP, önceden ve sonradan artırım ve eksiltim işleçlerini destekler. Bunlar değeri bir artıran veya eksilten tek terimli işleçlerdir.

Arttırım ve Eksiltim İşleçleri
Örnek İsim Etkisi
++$a Önceden artırım $a bir artırıldıktan sonra döndürülür.
$a++ Sonradan artırım $a döndürüldükten sonra değeri bir artırılır.
--$a Önceden eksiltim $a bir eksiltildikten sonra döndürülür.
$a-- Sonradan eksiltim $a döndürüldükten sonra değeri bir eksiltilir.

Basit bir betik örneği:

<?php
echo "Sonradan artırım\n";
$a = 5;
var_dump($a++);
var_dump($a);

echo
"Önceden artırım\n";
$a = 5;
var_dump(++$a);
var_dump($a);

echo
"Sonradan eksiltim\n";
$a = 5;
var_dump($a--);
var_dump($a);

echo
"Sonradan eksiltim\n";
$a = 5;
var_dump(--$a);
var_dump($a);
?>

Yukarıdaki örneğin çıktısı:

Sonradan artırım:
int(5)
int(6)
Önceden artırım:
int(6)
int(6)
Sonradan eksiltim:
int(5)
int(4)
Sonradan eksiltim:
int(4)
int(4)
Uyarı

Artırım ve eksiltim işleçlerinin bool türündeki değerler üstünde etkisi yoktur. İleri sürümlerde değer örtük olarak int türüne dönüşüm uygulanacağından PHP 8.3.0 ve sonrasında bir E_WARNING çıktılanır.

Eksiltim işlecinin null türünde değerler üzerinde etkisi yoktur. İleri sürümlerde değer örtük olarak int türüne dönüşüm uygulanacağından PHP 8.3.0 ve sonrasında bir E_WARNING çıktılanır.

Değer sayısal dizge değilse eksiltim işleci etkisizdir. İleri sürümlerde TypeError oluşturacak olan bu durum PHP 8.3.0 ve sonrasında bir E_WARNING çıktılanmasına sebep olur.

Bilginize:

Aşırı yüklemeyi destekleyen dahili nesnelerin toplama ve çıkarma işlemlerinde de artırım ve eksiltim yapılabilir. Böyle bir dahili nesneye örnek olarak GMP verilebilir.

PERL dizge artırım özelliği

Uyarı

Bu özelliğin PHP 8.3.0 ve sonrasında kullanımı bazı durumlarda önerilmemekte olup böyle bir durumun ortaya çıkmaması için bu özellik yerine str_increment() işlevi kullanılmalıdır.

Değer sayısal dizge değilse dizgeye artırım uygulanabilir. Bunun için dizgenin abecesaysal ASCII dizge olması gerekir. Harflerin bir sonraki harfe kadar artırılması durumunda, Z harfine ulaşıldığında artış soldaki değere taşınır. Örneğin, $a = 'Z'; $a++; için $a değeri 'AA' olur.

Örnek 1 - PERL dizge artırım örneği

<?php
echo '== Abecesel dizgeler ==' . PHP_EOL;
$i = 'W';
for (
$n=0; $n<6; $n++) {
echo ++
$s . PHP_EOL;
}
// Sayısal dizgeler farklı davranır
echo '== Sayısal dizgeler ==' . 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;
}
?>

Yukarıdaki örneğin çıktısı:

== Abecesel dizgeler ==
X
Y
Z
AA
AB
AC
== Sayısal dizgeler ==
A9
B0
B1
B2
B3
B4
A09
A10
A11
A12
A13
A14
Uyarı

Abecesayısal dizge, sayısal dizge olarak yorumlanırsa değer int veya float türüne dönüştürülür. Bu özellikle üstel gösterimle yazılmış gerçel bir sayı gibi görünen dizgelerde ortaya çıkar. str_increment() işlevi böyle örtük tür dönüşümlerinden etkilenmez.

Örnek 2 - float türüne dönüştürülen abecesayısal dizge

<?php
$s
= "5d9";
var_dump(++$s);
var_dump(++$s);
?>

Yukarıdaki örneğin çıktısı:

string(3) "5e0"
float(6)

Bunun nedeni, "5e0" değerinin float olarak yorumlanması ve artırılmadan önce 5,0 değerine dönüştürülmesidir.

add a note

User Contributed Notes 1 note

up
71
hartmut at php dot net
12 years ago
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)
To Top