2010-02-21 7 views
4

En PHP, comment est la portée des variables traitées dans les états de commutation?instruction switch PHP portée des variables

Par exemple, prenez cet exemple hypothétique:

$someVariable = 0; 

switch($something) { 

    case 1: 
     $someVariable = 1; 
     break; 

    case 2: 
     $someVariable = 2; 
     break; 
} 

echo $someVariable; 

Est-ce que cette impression 0 ou 1/2?

+16

Pourquoi ne pas simplement l'essayer? – Gumbo

Répondre

6

La variable sera la même dans votre partie entière du code: il n'y a pas portée variable « par bloc » en PHP.

Donc, si $something est 1 ou 2, vous entrez dans l'un des case du switch, votre code renverrait 1 ou 2.

D'autre part, si $something n'est pas 1 ni 2(par exemple, si elle est considérée comme 0, ce qui est le cas avec le code affiché, comme il est pas initialisé à quoi que ce soit), vous n'entrer dans aucun des blocs case; et le code sortira 0.

+1

Même si PHP avait une portée lexicale, '$ someVariable' serait toujours accessible dans le bloc' switch'. –

1

Il imprimera 1 ou 2. Les variables en PHP ont la portée de l'ensemble de la fonction.

1

Il imprimera 1 ou 2 si vous modifiez la valeur de $someVariable dans l'instruction switch, et 0 si vous ne le faites pas.

5

PHP ne global and function/method scope seulement. Donc $someVariable à l'intérieur du bloc switch fait référence à la même variable qu'à l'extérieur.

Mais depuis $something n'est pas défini (au moins pas dans le code que vous avez fourni), l'accès soulève une Undefined variable de avis, aucun match des cas (variables non définies égaux null), $someVariable restera inchangé et 0 volonté être imprimé.