Sont PHP les variables déclarées à l'intérieur d'une boucle foreach détruit et recréé à chaque itération?
Si je déclare une variable à l'intérieur d'une boucle foreach, tels que:
foreach($myArray as $myData) {
$myVariable = 'x';
}
N'PHP détruire, et recrée à chaque itération ? En d'autres termes, serait-il plus intelligent de performance à faire:
$myVariable;
foreach($myArray as $myData) {
$myVariable = 'x';
}
Merci d'avance pour vos idées.
peut être comme le global et le local et variable
Non, il n'en est rien; et la variable existe toujours à l'extérieur de la boucle bafter vous avez fini de l'itération. Il n'est "détruit" lorsque vous quittez la fonction de l'endroit où la boucle est définie.... même votre $myData variable continue d'exister après la boucle est terminée, le maintien de la valeur du dernier élément de $myData.... cela peut être particulièrement difficile si vous l'avez déjà utilisé par référence
Variable peut être _destroyed par
Les Variables en PHP sont ni détruits ni créé. Ils ont peut-être pas défini, mais qui ne sont pas PHP empêcher de les utiliser. Aussi les règles communes à la portée appliquer, et
Non, il n'en est rien; et la variable existe toujours à l'extérieur de la boucle bafter vous avez fini de l'itération. Il n'est "détruit" lorsque vous quittez la fonction de l'endroit où la boucle est définie.... même votre $myData variable continue d'exister après la boucle est terminée, le maintien de la valeur du dernier élément de $myData.... cela peut être particulièrement difficile si vous l'avez déjà utilisé par référence
Variable peut être _destroyed par
unset
ting.Les Variables en PHP sont ni détruits ni créé. Ils ont peut-être pas défini, mais qui ne sont pas PHP empêcher de les utiliser. Aussi les règles communes à la portée appliquer, et
foreach
est rien de spécial ici.OriginalL'auteur Alexandre Bourlier | 2012-11-29
Vous devez vous connecter pour publier un commentaire.
Dans votre premier exemple:
$myVariable
est créé lors de la première itération et que écrasée à chaque itération. Il ne sera pas détruit à tout moment avant de sortir de la portée de votre script, la fonction, méthode, ...Dans votre deuxième exemple:
$myVariable
est créé avant toute itération et la valeur null. Lors de chaque itération s'est écrasé. Il ne sera pas détruit à tout moment avant de sortir de la portée de votre script, la fonction, méthode, ...Mise à jour
J'ai manqué de mentionner la principale différence. Si
$myArray
est vide (count($myArray) === 0
)$myVariable
sera pas être créé dans votre premier exemple, mais dans la seconde, il sera avec une valeur null.En outre, si vous avez besoin de détruire une variable dans une boucle comme cela, vous pouvez utiliser
unset()
: php.net/manual/en/function.unset.phpCe ne sont pas mes exemples, ce sont les exemples de la question!
Merci beaucoup les gars
Pas défini les variables en PHP ont toujours la valeur de
NULL
. Vous devez expliquer pourquoi cela devrait être spécial avecforeach
parce que c'est pas.OriginalL'auteur eisberg
Selon le débogueur dans mon IDE (NuSphere PHPed) dans votre premier exemple:
$myVariable
est créée une seule fois.OriginalL'auteur Jeremy1026
Selon mon expérience, c'est la même chose:
imprime: int(2)
imprime: int(2)
Étonnamment, il ne jette pas une erreur (l'avis) pour moi. Est-il pour vous?
ah, non, il ne le fait pas, désolé. J'ai pensé qu'il serait. C'est intéressant.
Peut-être que vous n'avez pas toutes les erreurs allumé? Quand j'ai couru le premier extrait avec
for($i = 0; $i < 0; $i++)
il a généré l'erreur "notice: Undefined variable: mavariable en - ligne 6' comme prévu.Oui, je n'ai pas d'avis allumé. PHP va définir cette variable à la volée.
OriginalL'auteur user4035
Le problème est de $mavariable est pas vraiment locale foreach. De sorte qu'il peut tabasser une variable globale du même nom.
Un moyen de contourner cela est de faire de votre foreach une ligne de fonction anonyme.
E. g.
De cette façon, vous garantie qu'il ne sera pas marcher sur les autres globals.
OriginalL'auteur user603749