• Aucun résultat trouvé

print "i égale 1";

break;

case 2:

print "i égale 2";

break;

}

Il est important de comprendre que l'instruction switch exécute chacune des clauses dans l'ordre.

L'instruction switch est exécutée ligne par ligne. Au début, aucun code n'est exécuté. Seulement lorsqu'un case est vérifié, PHP exécute alors les instructions correspondantes. PHP continue d'exécuter les instructions jusqu'à la fin du bloc d'instructions du switch, ou bien dès qu'il trouve l'instruction break. Si vous ne pouvez pas utiliser l'instruction break à la fin de l'instruction case, PHP continuera à exécuter toutes les instructions qui suivent. Par exemple :

switch ($i) {

case 0:

print "i égale 0";

case 1:

print "i égale 1";

case 2:

print "i égale 2";

}

Dans cet exemple, si $i est égal à 0, PHP va exécuter quand même toutes les instructions qui suivent. Si $i est égal à 1, PHP exécutera les deux dernières instructions. Et seulement si $i est égal à, vous obtiendrez le résultat escompté, c'est-à-dire, l'affiche de "i égal 2. Donc, l'important est de ne pas oublier l'instruction break (même si il est possible que vous l'omettiez dans certaines circonstances).

Dans une commande switch, une condition n'est évaluée qu'une fois, est le résultat est comparé à chaque case. Dans une structure elseif, les conditions sont évaluées à chaque comparaisons. Si votre condition est plus compliquée qu'une simple comparaison, ou bien fait partie d'une boucle, switch sera plus rapide. La liste de commande d'un case peut être vide, auquel cas PHP utilisera la liste de commande du cas suivant.

switch ($i) {

case 0:

case 1:

case 2:

print "i est plus petit que 3 mais n'est pas négatif";

break;

case 3:

print "i égale 3";

}

Un case spécial est default. Ce cas est utilisé lorsque tous les case ont échoués. Par exemple :

switch ($i) {

case 0:

print "i égale 0";

break;

case 1:

print "i égale 1";

break;

case 2:

print "i égale 2";

break;

default:

print "i n'est ni égal à 2, ni à 1, ni à 0.";

}

Une autre chose à mentionner est que l'instruction case peut être une expression à de type scalaire, c'est-à- dire nombre entier, nombre à virgule flottante et chaîne de caractère. Les tableaux sont sans interêt dans ce contexte-là.

La syntaxe alternative pour cette structure de contrôle est la suivante : (Pour plus d'informations, voir

9.3.4 Syntaxe alternative

).

case 0:

print "i égale 0";

break;

case 1:

print "i égale 1";

break;

case 2:

print "i égale 2";

break;

default:

print "i n'est ni égal à 2, ni à 1, ni à 0";

endswitch;

9.3.12 require()

La commande

require()

se remplace elle même par le contenu du fichier spécifié, comme les préprocesseurs C le font avec la commande #include.

Il est important de noter que lorsqu'un fichier est

include()

ou

require()

, les erreurs d'analyse apparaîtront en HTML tout au début du fichier, et l'analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier doit être placé entre

9.1.1 Le passage du HTML au

PHP

.

require()

n'est pas vraiment une fonction PHP : c'est plus un instruction du langage. Elle ne fonctionne pas comme les fonctions standards. Par exemple,

require()

ne peut pas contenir d'autres structures de contrôle. De plus, il ne retourne aucune valeur. Lire une valeur retournée par un

require()

retourne une erreur d'analyse.

Contrairement à

include()

,

require()

va toujours lire dans le fichier cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une inclusion conditionnelle, utilisez

include()

. La condition ne va jamais affecter

require()

. Cependant, si la ligne de

require()

n'est jamais exécutée, le code du fichier ne le sera jamais non plus.

Les boucles n'affectent pas le comportement de

require()

. Même si le code contenu dans le fichier source est appelé dans la boucle,

require()

n'est exécuté qu'une fois.

Cela signifie qu'on ne peut pas mettre un

require()

dans une boucle, et s'attendre à ce qu'il inclue du code à chaque itération. Pour cela, il faut utiliser

include()

.

require ('header.inc');

Attention :

include()

et

require()

ajoute le contenu du fichier cible dans le script lui-même. Elle n'utilise pas le protocole HTTP ou tout autre protocole. Toute variable qui est dans le champs du script sera

accessible dans le fichier d'inclusion, et vice versa.

require ("file.inc?varone=1&vartwo=2"); /* Ne fonctionne pas. */

$varone = 1;

$vartwo = 2;

require ("file.inc"); /* $varone et $vartwo seront accessible à file.inc */

Ne vous laissez pas abuser par le fait que vous pouvez requérir ou inclure des fichiers via HTTP en utilisant la fonctionnalité de

8.8 Utilisation des fichiers à distance

ce qui est au dessus reste vrai.

En PHP3, il est possible d'exécuter une commande return depuis un fichier inclus, tant que cette commande intervient au niveau global du fichier inclus. Elle ne doit intervenir dans aucun bloc (entre accolade {}). En PHP4, cette possibilité a été supprimée. Si vous en avez besoin, utilisez plutôt

include()

.

9.3.13 include()

La fonction

include()

inclus et évalue le fichier spécifié en argument.

Il est important de noter que lorsqu'un fichier est

include()

ou

require()

, les erreurs d'analyse apparaîtront en HTML tout au début du fichier, et l'analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier doit être placé entre

9.1.1 Le passage du HTML au

PHP

.

fonction

include()

dans une boucle pour inclure un nombre infini de fois un fichier, ou même des fichiers différents.

$files = array ('first.inc', 'second.inc', 'third.inc');

for ($i = 0; $i < count($files); $i++) {

include $files[$i];

}

include()

diffère de

require()

car le fichier inclus est ré-évaluée à chaque fois que la commande est exécutée, tandis que

require()

est remplacée par le fichier cible lors de la première exécution, que son contenu soit utilisé ou non. De plus, cela se fait même si il est placé dans une structure conditionnelle, comme dans un

9.3.1 if

).

Parce que la fonction

include()

nécessite une construction particulière, vous devez l'inclure dans un bloc si elle est inclue dans une structure conditionnelle.

/* Ceci est faux, et ne fonctionnera pas ce qu'on attend. */

if ($condition)

include($file);

else

include($other);

/* Ceci est CORRECT. */

if ($condition) {

include($file);

} else {

include($other);

}

En PHP3, il est possible d'exécuter une commande return depuis un fichier inclus, tant que cette commande intervient au niveau global du fichier inclus. Elle ne doit intervenir dans aucun bloc (entre accolade {}). En PHP4, cette possibilité a été supprimée. Cependant, PHP4 vous autorise à retourner des valeurs d'un fichier inclus. Vous pouvez traiter

include()

comme une fonction normale, qui retourne une valeur. Mais cela génère une erreur d'analyse en PHP3.

On suppose que le fichier `test.inc' existe, et est placé

dans le même dossier que le fichier principal :

<?;php

echo "Avant le retour<br>\n";

if (1) {

return 27;

}

echo "Après le retour <br>\n";

?>

On suppose que le fichier `main.html' contient ceci :

<?;php

$retval = include ('test.inc');

echo "Fichier inclus: '$retval'<br>\n";

?>

Lorsque `main.html' est appelé en PHP3, il va générer une

erreur d'analyse (parse error) à la ligne 2; vous ne pouvez pas vous attendre à un

retour sur une fonction include() en PHP3. En PHP4, cependant,

le résultat sera :

Avant le retour

Ficher inclus : '27'