hmm zastanowiło mnie to i zrobiłem kilka testów:
Test 1:
<?php
function getMicrotime(){
return ((float)$usec + (float)$sec);
}
$h=0;
$start = getMicrotime();
for ( $i=0; $i<10000; $i++){
for ( $j=0; $j<10000; $j++){
$h++;
}
}
$wynik = getMicrotime() - $start;
echo "$h++, czas: ".$wynik; $h=0;
$start = getMicrotime();
for ( $i=0; $i<10000; $i++){
for ( $j=0; $j<10000; $j++){
++$h;
}
}
$wynik = getMicrotime() - $start;
echo "\n++$h, czas: ".$wynik; ?>
output:
Kod
$h++, czas: 17.7393829823
++$h, czas: 16.5931489468
Czyli jak widać minimalnie szybszy jest ++$h, (oczywiście testy powtarzałem, wynik relatywnie zawsze był taki sam)
Test2:
<?php
function getMicrotime(){
return ((float)$usec + (float)$sec);
}
$temp = 0;
$h=0;
$start = getMicrotime();
for ( $i=0; $i<10000; $i++){
for ( $j=0; $j<10000; $j++){
$temp = $h++;
}
}
$wynik = getMicrotime() - $start;
echo "$h++, czas: ".$wynik; $temp = 0;
$h=0;
$start = getMicrotime();
for ( $i=0; $i<10000; $i++){
for ( $j=0; $j<10000; $j++){
$temp = ++$h;
}
}
$wynik = getMicrotime() - $start;
echo "\n++$h, czas: ".$wynik; ?>
output:
Kod
$h++, czas: 19.8630981445
++$h, czas: 24.9836299419
czyli ++$h jest zdecydowanie wolniejszy... (oczywiście tu również testy powtarzałem, i wyniki zawsze były relatywnie takie same)
Wniosek,
jeśli robimy zwykłą incrementację to lepiej użyć pre-. Natomiast jeśli przepisujemy to zdecydowanie lepiej $h++. I wiem, że w przypadku post-incrementacji przypisanie jest najpierw (a potem incrementacja), ale to i tak jest w pętli, więc wynik myślę, że nie jest przekłamany. Oczywiście jeśli macie jakieś inne zdanie to proszę o komentarz.
Nie wiem jak Was, ale mnie wyniki zaskoczyły.

Jeśli chodzi o spekulacje na temat tego skąd ukradłem ten temat powiem, że szukałem czegoś o takich sztuczkach na tym forum i nie znalazłem. Dlatego zacząłem szukać w googlu. Znalazłem kilka ciekawych, ale chciałbym się dowiedzieć, czy jeszcze jakieś znacie, dlatego rozpocząłem ten temat i nie uważam tego za jakieś przestępstwo.
Pozdrawiam