2010-08-25 7 views
0

Je viens de demander un question on SO et découvert que je peux faire usage de ++ pour incrémenter des lettres. J'ai maintenant essayé:Incrément lettres: problème étrange

$last_id = get_last_id(); 

echo gettype($last_id); //string 

echo 'L_ID ->'.$last_id.'<br />'; //AAF 

$next_id = $last_id++; 

echo 'N_ID ->'.$next_id.'<br />';//AAF 

L'exemple suivant qui m'a donné fonctionne très bien:

$x = 'AAZ'; 
$x++; 
echo $x;//ABA 

Que se passe-t-il? Doit être la fin de la journée de travail ...

Merci à tous pour toute aide

Répondre

9

++ est un post increment operator, ainsi

$next_id = $last_id++; 

affecte la valeur actuelle de last_id $ à next_id $ et puis l'incrémente. Ce que vous voulez est un pré-incrément

$next_id = ++$last_id; 
+0

Ou il pourrait le diviser en deux déclarations: '$ last_id ++; $ next_id = $ last_id; ' – FrustratedWithFormsDesigner

+1

Ah je ne savais pas, ça. Chaque fois que je pose une question sur SO, cela met en évidence le peu que je sais de PHP! Merci Paul. – Abs

+1

@Abs: En outre, ces opérateurs existent dans un certain nombre d'autres langues, et leur comportement est similaire. – FrustratedWithFormsDesigner

3

Mettre ++ après une variable incrémente quand la déclaration qu'elle fait partie de finalise. Vous attribuez à $next_id la valeur $last_id avant de l'incrémenter. Au lieu de cela, utilisez ++$last_id, qui s'incrémente avant que la valeur de la variable soit utilisée.

+0

Ce n'est pas correct - l'incrément se produit après l'évaluation, pas quand l'instruction entière se termine. Donc $ x = 1; echo ($ x ++) * ($ x ++); rendements '2' –

+0

En outre, la priorité de l'opérateur montre l'ordre d'évaluation: http://www.php.net/manual/fr/language.operators.precedence.php –

+0

Je suis corrigé. Merci pour la clarification. –