Valid XHTML    Valid CSS2    

Listing du fichier l2aprog02.php

 

00001     <?php
00002     
00003     
# (gH) -_- l2aprog02.php ; TimeStamp (unix) : 20 Février 2013 vers 16:00
00004     
00005     
error_reporting(E_ALL | E_NOTICE | E_STRICT ) ;
00006     
00007     
###########################################################################
00008     # #
00009     # exemple de programme php pour le cours Développement Web Avancé en L2 #
00010     # #
00011     ###########################################################################
00012     # #
00013     # #
00014     # Tests et Boucles #
00015     # #
00016     # #
00017     ###########################################################################
00018     
00019     # variables utilisées dans les tests
00020     
00021     
$varA
= 0 ; # un nombre, pas forcément entier ou réel
00022     
$varB
= "1" ; # une chaîne qui peut parfois être interprétée comme un nombre
00023     
$varC
= "essai" ; # une chaîne de caractères
00024     
$varD
= TRUE ; # constante prédéfinie dans le coeur (CORE)
00025     
$varE
= array() ; # un tableau (déclaration non obligatoire mais conseillée)
00026     
define
("varF" ,1) ; # noter que la variable est "guillemetisée"
00027     
00028     # utilisation de if, == et ===
00029     
00030     
if (
$varA==1) {
00031      echo
" ok, A vaut 1.\n" ;
00032     } else {
00033     
# si on arrive ici, c'est que A ne vaut pas 1 (c'est ce qui se passe)
00034     
echo
" A ne vaut pas 1.\n" ;
00035     }
# fin si
00036     
00037     # avec une constante, pas de $ devant le nom de la variable
00038     
00039     
if (
$varB==varF) { echo " égalité entre B et F \n" ; } ; # ce "alors" est exécuté
00040     
00041     # attention, une erreur classique : (on rentre toujours dans le si)
00042     
00043     
if (
$varA=1) {
00044      echo
" Attention : utiliser = dans un test au lieu de == n'est pas considéré comme une erreur.\n" ;
00045     } ;
# finsi
00046     
00047     # écriture anti-naturelle proposée par certains programmeurs pour éviter ce problème
00048     
00049     
if (
1==$varA) {
00050      echo
" on ne risque pas d'exécuter if (1=\$varA) car ce n'est pas une affectation valide.\n" ;
00051     } ;
# finsi
00052     
00053     # il faut se méfier de la pré- et de la post-incrémentation intégrée au test
00054     
00055     
echo
" avant, A vaut $varA \n" ; # affiche avant, A vaut 1
00056     
if (
$varA++==1) {
00057      echo
" mode var++ : A vaut
$varA \n "; # affiche mode var++ : A vaut 2
00058     
} ; # finsi
00059     
00060     
if (++
$varA==2) {
00061      echo
" mode ++var : A vaut
$varA \n "; # non affiché
00062     
} ; # finsi
00063     
echo
" après, A vaut $varA \n" ; # affiche après, A vaut 3
00064     
00065     
00066     # écriture conseillée :
00067     
00068     
$varA
++ ; # tout seul sur une ligne, et donc équivalent à ++$varA ;
00069     # if ($varA==...){ ...
00070     
00071     
if (
"1"==1) {
00072      echo
" PHP ne distingue pas \"1\" et 1 dans les tests avec == (deux signes égales)\n"
; # affiché
00073     
} ; # fin de si
00074     
00075     
if (
"1"===1) {
00076     
# non !
00077     
} else {
00078      echo
" mais PHP distingue \"1\" et 1 dans les tests avec === (trois signes égale)\n"
; # affiché
00079     
} ; # fin de si
00080     
00081     
if (!
0) {
00082      echo
" PHP considère 0 comme FAUX, et d'ailleurs FALSE*FALSE vaut "
.(FALSE*FALSE)."\n" ; # affiché
00083     
} ; # fin de si
00084     
00085     
if (!
"") {
00086      echo
" PHP considère aussi la chaîne vide comme FAUX\n"
; # affiché
00087     
} ; # fin de si
00088     
00089     # structures de cas (1) ATTENTION, ceci n'est PAS conseillé
00090     
00091     
$jour
= "lundi" ; # par exemple
00092     
00093     
switch (
$jour) {
00094      case
"dimanche" :
00095      echo
" V1 pas de cours \n" ;
00096      case
"samedi" :
00097      echo
" V1 début de week-end \n" ;
00098      default :
00099      echo
" V1 ce n'est pas le week-end.\n"
; # affiché
00100     
} ; # fin de switch
00101     
00102     # structures de cas (2) ATTENTION ceci est mal conçu (légal, mais pas de break, d'où problème)
00103     
00104     
$j
= 1 ; # par exemple
00105     
00106     
switch (
$j) {
00107      case
0 :
00108      echo
" V2 pas de cours \n" ;
00109      case
1 :
00110      echo
" V2 début de week-end \n"
; # affiché
00111     
$j
= 2 ;
00112      case
2 :
00113      echo
" V2 pas de chance \n"
; # affiché aussi
00114     
$j
= 2 ;
00115      default :
00116      echo
" V2 ce n'est pas le week-end.\n"
; # hélas, affiché aussi
00117     
} ; # fin de switch
00118     
00119     # structures de cas (3) : il faut utiliser break ! ici, c'est bien
00120     
00121     
$j
= 1 ; # par exemple
00122     
00123     
switch (
$j) {
00124      case
0 :
00125      echo
" V3 pas de cours \n" ;
00126      break ;
00127      case
1 :
00128      echo
" V3 début de week-end \n"
; # seul affichage, c'est bien !
00129     
$j
= 2 ;
00130      break ;
00131      case
2 :
00132      echo
" V3 pas de chance \n" ;
00133     
$j
= 2 ;
00134      break ;
00135      default :
00136      echo
" V3 ce n'est pas le week-end.\n" ;
00137      break ;
00138     } ;
# fin de switch
00139     
00140     # la boucle pour (1)
00141     
00142     
for (
$idb=1;$idb<=10;$idb++) {
00143      if (
$idb
==1) { echo " début " ; } ;
00144      echo
"
$idb " ;
00145      if (
$idb
==10) { echo " fin \n" ; } ;
00146     }
# fin de pour sur idb
00147     
00148     # la boucle pour (2)
00149     
00150     
$ideb
= 1 ;
00151     
$ifin
= 10 ;
00152     for (
$idb
=$ideb;$idb<=$ifin;$idb++) {
00153      if (
$idb
==$ideb) { echo " début " ; } ;
00154      echo
"
$idb " ;
00155      if (
$idb
==$ifin) { echo " fin \n" ; } ;
00156     }
# fin de pour sur idb
00157     
00158     # la boucle pour (3)
00159     
00160     
$ideb
= 1 ;
00161     
$ifin
= 5 ;
00162     for (
$idb
=$ideb;$idb<=$ifin;$idb++) {
00163      if (
$idb
==$ideb) { echo " début " ; } ;
00164      echo
"
$idb " ;
00165      if (
$idb
==$ifin) { echo " fin \n" ; } ;
00166     
$ifin
= 10 ; # maladroit mais cela fonctionne et force ifin à 10
00167     
} # fin de pour sur idb
00168     
00169     # la boucle tant que (1)
00170     
00171     
$n1
= 1 ;
00172     
$n2
= $n1/10 ;
00173     while (
abs
($n1-$n2)>0) {
00174     
$n1
= $n2 ;
00175     
$n2
/= 10 ;
00176     }
# fin de tant que
00177     
echo
"donc $n1 et $n2 sont considérés comme égaux " ;
00178     
00179     
# la boucle tant que (2)
00180     
00181     ## une demande classique en ligne de commande
00182     
00183     # première demande
00184     
00185     
echo
"Donnez un nombre " ;
00186     
$n
= fgets(STDIN) ;
00187     
00188     
# relance si chaîne vide
00189     
00190     
while (
strlen(trim(chop($n))==0)) {
00191      echo
"non, pas de chaîne vide ou blanche, redonnez un nombre : " ;
00192     
$n
= fgets(STDIN) ;
00193     } ;
# fin de tant que
00194     
echo
" Merci, vous avez fourni ".nl2br($n)." comme nombre." ; # affiche <br /> à la place du retour-chariot
00195     
00196     # remarques
00197     #
00198     # selon les "règles du p'tit gros", on met toujours des accolades,
00199     # même pour une seule instruction
00200     #
00201     # selon les "règles du p'tit gros", il faut toujours commenter les fins de...
00202     #
00203     # selon les "règles du p'tit gros", jamais plus de trois niveaux d'imbrication
00204     #
00205     # il existe aussi une boucle foreach pour les tableaux
00206     #
00207     
00208     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)