2008-10-28 6 views
7

J'ai une variable qui est construite en boucle. Quelque chose comme:PHP: Bonne façon de déclarer la variable avant utilisation dans la boucle

$str = ""; 
for($i = 0; $i < 10; $i++) $str .= "something"; 

Si $ str = « » est omises, je reçois un avis variable non définie, mais je pensais que php auto-déclarer une variable la première fois qu'il voit un non déclaré?

Comment est-ce que je fais cela correctement?

Répondre

14

Vous obtenez la variable indéfinie parce que vous concaténez la valeur de lui-même avec une autre valeur.

L'équivalent de

$str = $str . "something";

Ainsi, il ne peut pas dire quelle est la valeur initiale est. Il est l'équivalent de ceci:

$str = [undefined value] . "something";

Quel est le résultat d'un enchaînement de [undefined value] et "something"? L'interpréteur ne peut pas dire ...

Donc, vous devez d'abord mettre "" dans la variable pour lancer la valeur de la variable, comme vous l'avez fait.

HTH

+0

Je supposais que la portée variable s'appliquait aussi aux boucles, mais oui, vous avez raison, la même chose m'est arrivée et je comprends maintenant la raison. +1 – Tarik

4

Il est plus sûr de ne pas utiliser la fonction auto-déclarer - c'est la raison pour laquelle il émet un avis. Un avis est le plus bas niveau d'avertissement et ne sera pas affiché par défaut. La plupart des applications PHP plus anciennes émettront beaucoup d'avis si vous deviez les activer.

8

Si vous avez vraiment besoin d'en faire un plus propre que vous pourriez faire:

for($i = 0, $str = ''; $i < 10; $i++) $str .= "something"; 

Mais ce que vous avez est ce que je fais normalement. VlceBerg l'explique bien.

+1

Juste une pensée ... pouvez-vous faire ceci: pour ($ i = 0, $ str = ''; $ i <10; $ i ++, $ str. = "Quelque chose"); ? Je n'ai pas de boîte PHP en ce moment pour tester .... – vIceBerg

+1

Apparemment oui: zsh% echo ' '| php Quelque chose qui se soitompris au cours de cesdeuxsoinsd'autrescommentairesd'autrescommentaires –

+0

Yep vlceBerg - vous n'avez même pas besoin du contenu de la boucle. Je trouve plus facile à comprendre en utilisant le contenu, mais vu que c'est une ligne que vous n'avez pas besoin. – Ross

2

Les variables PHP auto-déclarées sont enregistrées comme non définies, c'est pourquoi vous recevez la notification.

Il est généralement préférable de déclarer les variables PHP avant de les utiliser, même si beaucoup de paresseux parmi nous, moi-même inclus, ne le font pas toujours.

Questions connexes