Avant d'aller plus loin, votre serveur Apache doit être opérationnel.
Aujourd'hui, jour J.
Tous les langages informatiques ne sont pas des langages de programmation. Le HTML et CSS sont de langages descriptifs.
Rappel : Tous les langages de programmation ont 4 points communs :
Langages de programmation : le C (le "père" de (quasi) tous les langages), le C++, Java, JavaScript, PHP, ...
- Les variables (et la super variable : tableau)
- Les conditions (if ... else)
- Les boucles (for, while)
- Les fonctions (function, return)
Et quelques instructions communes : break, continue, ...
Comme vous connaissez déjà ces notions. L'étude du PHP va donc aller très vite !
Les mot-clés, le nom des classes, fonctions, et fonctions créées par le développeur sont sensibles aux majuscules/minuscules. echo = eCHo = ... Cependant, les noms de variables sont case-sensitive
Les commentaires
Dans tous les langages de programme, il est possible de placer des commentaires
// Commentaire sur une ligne (comme en C, C++) # Commentaire sur une ligne (propre au PHP) single-line comment /* Commentaire sur plusieurs lignes (comme en C, C++) */
Les variables
Tous les langages de programmation utilisent des variables. Après avoir étudié JavaScript, vous savez ce qu'est une variable.
En PHP, pour créer une variable,
- Le signe dollar ($), précède (sans espace) le nom de la variable.
- Le nom doit commencer par une lettre (même accentuées !) ou un underscore (_).
=> il ne doit pas commencer par un chiffre
Le nom d'une variable est sensitive-case. $age =!
$aGE
Plus
d'info
Une lettre = a-z, A-Z et les octets de 127 à 255 (0x7f-0xff)
La plupart des éditeurs de code PHP ne colorient pas les noms de variables lorsqu'elles
contiennent des caractères accentués.
Il n'est pas recommandé d'utiliser dans le nom des lettres accentuées, ni d'utiliser
des mot-clés (if, for, ...) comme nom de variables. Il est recommandé que la
première lettre soit une minuscule. $this
est le seul nom de
variable interdit.
En PHP, les types de variables sont les mêmes qu'en JavaScript (sauf "undefined" et "NaN"
qui sont propres à JavaScript). Une variable peut donc contenir un nombre (avec ou sans
décimale), un caractère, une chaîne de caractères, un booléen. Comme en JavaScript (en C,
C++, ...), le séparateur décimal est le point, .
, et le signe
d'échappement est : \
Comme dans tous les langages de programmation, il est recommandé de les initialiser dès
la déclaration. Exemple : $nom="BACH";
Comme en JavaScript, en PHP, une variable peut changer de type. Être initialisée avec un nombre, puis recevoir une chaîne de caractères. Mais, ce n'est pas recommandé.
En PHP, une variable peut être de type NULL
(l'équivalent de
"undefined" en JavaScript).
Exemple : $x = NULL;
(ou $x = null;
)
Particularité en PHP. Le nom d'une variable peut être une variable.
Exemple : $nom="maVariable"; $$nom="valeur"; echo $maVariable; //
affichera "valeur"
Cette façon de coder n'est pas recommandée.
Déclaration
Une variable commence son existence à partir de sa première affectation.
$a = 0; $b = 0; $c = 0;
Toutefois, si la valeur initiale est la même, il est possible d'affecter plusieurs variables, en une seule instruction.
$a = $b = $c = 0;
Type de variables
En PHP, une variable n'est pas "fortement" typée, contrairement en C => $a=8;$a="xxx";echo $a;
qui affichera au final : xxx
Une variable est fortement typée lorsqu'elle ne peut plus changer de type une fois déclarée. En C, les variables sont fortement typées.
Bien qu'en PHP, une variable peut changer de type. Il existe 8 types.
-
String : Elle peut être entourée de deux guillemets ou de deux
apostrophes. Le caractère d'échappement est le même qu'en JS. Particularité du PHP,
avec des guillemets la valeur de la variable sera automatiquement concaténée avec le
reste de la string.
$a="aaa \" bbb"; echo "$a <br>"; /* affiche : aaa " bbb */ $b='ccc \' ddd'; echo $b."<br>"; /* affiche : ccc ' ddd */
-
Integer : un nombre entier allant de -2.147.483.648 à
2.147.483.647
entre -2 milliards et +2 milliardsDonc, en PHP, un nombre entier prend 4 octets en mémoire.
232 = environ 4 milliards.Le nombre entier peut être écrit dans 3 formats : décimal, hexadécimal (avec le préfixe 0x ou en octal (avec le préfixe 0).
$a=010; echo $a; /* affiche : 8 et non 10 !*/
-
Float : un nombre avec un point décimal ou un exposant
$a = 1.234; echo "$a <br>"; /* affiche 1.234 */ $b = 1.2e3; echo "$b <br>"; /* affiche 1200 */ $c = 7E-10; echo "$c <br>"; /* affiche 7E-10 */
En PHP, un nombre décimal prend 8 octets en mémoire (comme le double en C)
-
Boolean :
true
oufalse
(0 = false, comme en C) - Array : (notion abordée dans un prochain chapitre)
- Object : (notion abordée dans un prochain chapitre)
-
NULL est insensitive case
$x = "Hello world!"; $x = null; /* contenu vidé */ var_dump($x); echo "<br>--|$x|--<br>"; /*$y; En PHP, une variable DOIT recevoir une affectation pour exister */ $z = NuLL; var_dump($z); echo "<br>--|$z|--<br>";
La fonction var_dump() affiche le contenu de la variable dont le nom est passé en paramètre ou NULL (si le contenu est vide). La "fonction" echo n'affiche rien (pas même NULL) si le contenu de la variable est vide.
- Resource : (notion abordée dans un prochain chapitre)
Portée
La variable a une portée :
- globale => "déclarée" hors d'une fonction et utilisable qu'en dehors d'une fonction.
-
locale => "déclarée" dans une fonction et utilisable que dans la
fonction qui l'a créé.
-
static
est un mot-clé qui précède sa "déclaration" dans la fonction et qui empêchera le contenu de la variable d'être effacé à la fin de l'exécution de la fonction.<?php function myTest() { static $x = 0; echo $x; $x++; } myTest(); /* affiche 0 */ myTest(); /* affiche 1 */ myTest(); /* affiche 2 */ ?>
-
global
est un mot-clé qui précède sa "déclaration" dans la fonction et qui permet d'avoir accès au contenu de la variable globale de même nom (déclarée hors de cette fonction).<?php $x = 5; $y = 10; function myTest() { global $x, $y; $y = $x + $y; } myTest(); echo $y; /* outputs 15 */ ?>
$GLOBALS[index]
est LE tableau des variables globales, où index est le nom de la variable.
-
Les constantes : define()
Une constante est une variable qui ne varie pas !
Par tradition, pour tous les langages, le nom d'une constante est écrit en majuscule.
define(nom, valeur [, case-insensitive]);
Paramètres :
- nom : nom de la constante (par tradition, en majuscule. Et, non préfixé par $)
- valeur : valeur de la constante (correspondant à un type "simple")
- case-insensitive : Par défaut,
false
(true
= le nom est insensitive case. Notez que si le troisième paramètre vauttrue
, la tradition n'est plus respectée.)
Particularité. En PHP, une constante est, ipso facto, connue dans toute fonction même si elle a été déclarée hors d'une fonction.
Logiquement, les constantes sont déclarées au début du script (comme en C)
define("HELLO", "Bonjour !"); echo "HELLO <br>"; /* affiche : HELLO */ echo HELLO."<br>"; /* affiche : Bonjour ! */ /*pi = π = 3,1415926535897932384626433832 */ define("PI", 3.1415926535); echo "Surface d'un cercle d'un rayon de 2 m = ".(4*PI)." m²<br>"; /* affiche : Surface d'un cercle d'un rayon de 2 m = 12.566370614 m² */ define("TVA",21); echo "Montant de 97.99 € HTVA = ".( round(97.99*(100+TVA)) /100 )." € TVAc<br>"; /* affiche : Montant de 97.99 € HTVA = 118.57 € TVAc */ define("CARS", [ "Alfa Romeo", "BMW", "Toyota" ]); echo CARS[1]; /* affiche : BMW */
En JS, le mot-clé const est utilisé (à la place de var)
La string
Ce type de variable est si important que nous aborderons ici quelques fonctions. Le nom de ces fonctions sont généralement préfixée par str.
strlen()
strlen() est une fonction qui retourne un nombre entier représentant le nombre de caractères contenus dans la string passée en paramètre.
En JS, nb_carac=chaine.length;
strrev()
strrev() est une fonction qui retourne les caractères de la string passée en paramètre dans l'ordre inverse.
strpos()
strpos() est une fonction qui retourne, dans la string passée
en premier paramètre, le nombre de caractères précédant la première
string passée en second paramètre; ou false
.
La position du premier caractère dans une string = 0 (et non 1)
Avertissement. Cette fonction peut retourner false
, mais elle peut aussi
retourner une valeur équivalent à false
. Utilisez l'opérateur
===
pour tester la valeur de retour exacte de cette fonction.
$mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); /* Notez notre utilisation de ===. == ne fonctionnerait pas comme attendu car la position de 'a' est la 0-ième (premier) caractère. */ if ($pos === false) { echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'"; } else { echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring'"; echo " et débute à la position $pos"; }
str_replace()
str_replace() est une fonction qui remplace toutes les occurrences de la string passée en premier paramètre par la string passée en second paramètre dans la string passée en troisième paramètre.
echo str_replace("world", "Dolly", "Hello world!"); // affiche : Hello
Dolly!
mb_strtoupper()
mb_strtoupper() est une fonction qui remplace toutes les lettres (y compris les caractères accentués et ligatures), passées en paramètre, par leur majuscule.
echo mb_strtoupper("Thibaut àâçéèêëîïôùûüÿæœ"); // affiche : THIBAUT
ÀÂÇÉÈÊËÎÏÔÙÛÜŸÆŒ
strtoupper() est une fonction qui remplace que les lettres (a-z), passées en paramètre, par leur majuscule.
echo strtoupper("Thibaut"); // affiche : THIBAUT
Les opérateurs
En PHP, les opérateurs sont regroupés en :
-
arithmétiques : + - * / % **
$x = 10; $y = 3; echo $x ** $y; /* affiche 1000 */
Depuis PHP 5.6,base ** exp
est équivalent àpow(base,exp)
-
d'affectation : = += -= *= /= %=
x += y
est équivalent àx = x + y
-
de comparaison : == (égal), === (identique), != (pas égal), <> (pas égal, !== (pas identique), > (supérieur), < (inférieur), >= (supérieur ou égal), <= (inférieur ou égal), <=> (depuis 7.0)
Est identique si la valeur et le type de la variable sont égaux.
-
d'incrémentation et de décrémentation : ++$i, $i++, --$i et $i--
-
logiques : and équivalent à &&, or équivalent à ||, xor et !
En JS 2015, xor n'existe pas (encore). Son XOR, noté ^, n'est utilisé que dans des opérations binaires (comme en C)
- de la string (= la concaténation) : . et .=
- du tableau : +, ==, ===, != équivalent à <> et !==
- d'affectation conditionnelle (= opérateur ternaire) : ?: et ?? (depuis 7.0)
La concaténation
L'opérateur .
sert à la concaténation de deux expressions.
Différence. En JavaScript, l'opérateur + sert à la concaténation.
Exemples :
$resultat = "Bonjour," . " tout le monde";
$prenom = "Jean"; $resultat = "Bonjour, " . $prenom;
$prenom = "Albert"; $nom="EINSTEIN"; $nomComplet = $prenom . " " . $nom;
L'opérateur .
et le point décimal .
ne seront pas confondus (par l'interprétateur), car lorsqu'il s'agit de l'opérateur, il
est suivi et/ou précédé, hormis espace ( , soit du
caractère : guillemet (
"
), ou dollar ($
); tandis que s'il s'agit d'un point décimal, il est précédé et/ou suivi
que d'un chiffre.
echo()
La fonction echo() sert à afficher une chaîne de caractères.
Souvent, cette chaîne de caractères est du code HTML.
Exemple : <?php echo("<strong>" . $resultat .
"</strong>"); ?>
. Ce résultat sera mis en gras dans la
page web.
Particularité. Cette "fonction" est si souvent utilisée qu'elle est la
seule qui ne requiert pas d'indiquer les parenthèses !
Exemples : <?php echo "<strong>" . $resultat .
"</strong>"; ?>
<?php echo $resultat; ?>
<?php echo $a + $b ; ?>
Autre particularité. Avec echo(), la concaténation se fait
automatiquement si la variable, ici $resultat
, se trouve dans la
string, ici résultat = $resultat
, entourée de guillemets
(mais pas si elle est entourée d'apostrophes)
Exemple :
<?php echo "résultat = $resultat";
?>
affichera, avec $resultat valant 4, : résultat = 4
.
<?php echo "résultat = " . $resultat;
?>
affichera, avec $resultat valant 4, : résultat = 4
.
<?php echo 'résultat = $resultat';
?>
affichera : résultat = $resultat
.
Autre particularité. Elle est même si souvent utilisée qu'elle peut
être remplacée par le signe = si elle suit immédiatement la balise ouvrante de
PHP.
Exemple : <?=$a?>
. Cet exemple est extrême car
<?php
a été remplacé par <?
, suivi (sans espace) par le
raccourci exceptionnel de la fonction echo(), suivi (sans espace du nom de la
variable), sans point-virgule puisque c'est la seule instruction, suivi (sans espace)
de la balise de fermeture de PHP.
Plus d'info sur echo()
print = print() et se comporte comme echo. La différence entre echo et print est que print n'accepte qu'un seul paramètre et retourne toujours 1.
echo et print n'est pas vraiment une fonction. C'est techniquement une structure de langage. Cela fait que vous n'êtes pas obligé d'utiliser des parenthèses.
Les conditions
En PHP, les conditions sont comme en JavaScript. Fin du chapitre !
Cependant, notons une particularité propre à PHP. Du code HTML peut être inséré ainsi :
if.php :
... <p>Début de la page codée en HTML</p> <?php if($condition){ ?> <p>Milieu de la page codée en HTML</p> <?php } ?> <p>Fin de la page codée en HTML</p> ...
Le milieu de la page ne s'affichera que si $condition est true
.
Comme en C, 0 vaut false.
Et, comme en PHP, une variable peut être de type NULL, on peut aussi avoir comme
condition tel que :
if ( $maVariable == NULL) { ... }
Les trois opérateurs logiques - ||, &&, ! - en PHP, sont
identiques à ceux utilisés en JavaScript (en C, en C++ et en Java)
Toutefois, en PHP, ||
peut s'écrire OR
et
&&
peut s'écrire AND
.
Quant aux six opérateurs conditionnels - ==, !=, <, <=, >, >= - ils sont identiques en PHP et en JavaScript (en C, en C++ et en Java)
Autre particularité de PHP : La clause else if peut aussi être écrite elseif. Toutefois, si vous codez ou coderez dans d'autres langages mieux vaut utiliser la clause commune au plus grand nombre de langages, soit else if (utilisable en C, C++, JS, ...)
switch
switch équivaut à une série d'if.
switch (expression) { case label1: /* code exécuté si n=label1; */ break; case label2: /* code exécuté si n=label2; */ break; case label3: /* code exécuté si n=label3; */ break; ... default: /* code exécuté dans les autres cas */ }
L'expression
, souvent une variable, une fois évaluée doit
correspondre à un nombre entier ou une string
Les boucles
En PHP, les boucles - while, do while et for - sont comme en JavaScript. Fin du chapitre !
Ces boucles - while et for - fonctionnent de la même façon en C, en C++ et en Java. Et, quelque soit le langage, il est recommandé de choisir la boucle for lorsqu'on sait, avant d'entrer dans la boucle, le nombre de tours qu'elle devra faire.
Cependant, notons une particularité propre à PHP. Du code HTML peut être inséré ainsi :
for.php :
... <p>Début de la page codée en HTML</p> <?php for($i=0; $i<10; $i++){ ?> <p>code HTML à répéter</p> <?php } ?> <p>Fin de la page codée en HTML</p> ...
Le code HTML sera répété, ici, 10 fois.
Les tableaux
En PHP, les tableaux, appelés array, sont comme en JavaScript. Fin du chapitre !
Petit rappel. Un tableau est une super-variable. Une variable qui contient des variables (de même type *). Chaque variable "simple" est identifiée par un index qui commence à zéro. Cet index est mis entre crochets. Cet index peut être le nom d'une variable (souvent $i). Chaque variable simple peut être un tableau. Tout cela vous le saviez déjà.
*) En PHP, une variable n'est pas typée, il est possible qu'un tableau contienne des données de tout type. Mais, ... coder ainsi est-il justifié ?
Attention. En PHP, la déclaration d'un tableau passe par une fonction,
array() :
$prenoms = array("François", "Michel", "Nicole");
En JavaScript : var prenoms=["François", "Michel", "Nicole"];
Cependant, l'utilisation est identique, donc avec des crochets.
Ajout d'un élément (en fin de tableau) :
$prenoms[] = "toto";
count()
En PHP, la fonction count() retourne le nombre d'éléments dans un tableau (passé comme paramètre).
$nb = count($tableau);
En JavaScript, la taille du tableau est donnée par la propriété
.length
for(var i=0; i<prenoms.length; i++) { document.write(prenoms[i]); }
for ($i=0; i$<count($prenoms); $i++) { echo $prenoms[$i]; }
Attention. L'utilisation d'un index n'existant pas provoque une erreur (Undefined offset).
array_search()
La fonction array_search() retourne la clé de la valeur cherchée
(premier paramètre de la fonction) dans le tableau (second paramètre de la fonction), ou
false
si cette valeur n'existe pas dans le tableau.
Dans une condition, il faut utiliser l'opérateur === pour distinguer 0
(la
valeur est le premier élément du tableau) de false
(la valeur n'existe pas
dans le tableau).
$position = array_search("Michel",
$prenoms);
L'équivalent en JavaScript est la méthode .indexOf(). Cette méthode s'applique aux tableaux.
var position = prenoms.indexOf("Michel");
Voir aussi :
- array_key_exists() - Vérifie si une clé existe dans un tableau
- in_array() - Indique si une valeur appartient à un tableau
foreach
La boucle foreach
n'a pas été abordée lors de l'étude du mini-cours de
JavaScript.
foreach
est un mot clé permettant de faire, plus facilement, une boucle dans
un tableau. En effet, ce type de boucle, conçue pour parcourir les
tableaux, ne requiert plus de connaître préalablement le nombre d'éléments dans
le tableau.
foreach(...) n'est pas une fonction car ce qui entre les parenthèses ne sont pas des paramètres. foreach(...){...} est une structure de contrôle, comme for(...){...}, while(...){...}
$prenoms = array("François", "Michel", "Nicole"); foreach($prenoms as $prenom){ if ($prenom=="Michel") { echo "Bonjour, $prenom"; break; } }
foreach($tableau as $element){...}
L'instruction break;
permet de quitter une boucle
prématurément, comme
en JavaScript.
$prenoms = array(...); foreach($tableau as $value){ ... } foreach($tableau as $key => $value){ ... }
$prenom est une variable représentant un élément du tableau.
Il est de coutume de mettre un (s) à la fin du nom d'un tableau et de donner comme nom de
l'élément celui du tableau sans ce (s).
Si vous souhaitez parfaire votre connaissance en JavaScript, sachez qu'il existe une méthode .foreach() et une bouche for/in.
6 fonctions PHP pour trier les tableaux :
- sort() : tri [des valeurs dans l'ordre croissant]
- rsort() : tri inverse [à sort()]
- asort() : Pour un tableau associatif, tri des valeurs [dans l'ordre croissant]
- ksort() : Pour un tableau associatif, tri des clés [dans l'ordre croissant]
- arsort() : Pour un tableau associatif, tri inverse [à asort()]
- krsort() : Pour un tableau associatif, tri inverse [à ksort()]
"r" signifie "reverse" (inverse, en français)
"k" signifie "key" (clé, en français; donc pour tableau associatif)
"a" signifie "associative" ([pour tableau] associatif, en français)
Enfin, sachez aussi que la valeur d'un tableau peut être un tableau ...
Les fonctions
En PHP, les fonctions sont comme en JavaScript. Fin du chapitre !
Depuis PHP 5.3, toute fonction native de PHP (built-in) retourne
NULL0
si l'erreur provient des paramètres.
function myFunction($param1,$param2 = 50,...) { /* code */
"; }
Les paramètres facultatifs ne peuvent pas être suivi d'un paramètre qui n'est pas facultatifs. Ainsi, tous les paramètres facultatifs sont les derniers. La valeur par défaut est alors indiquée après le signe =.
Depuis PHP 7, il est possible d'être plus strict au niveau du type des paramètres.
declare(strict_types=1); // au début du code PHP function myFunction(int $param1, string $param2,...) { /* code */ }
Et/ou au niveau du type de retour
declare(strict_types=1); // au début du code PHP function myFunction() : float { /* conversion de type pas obligatoire, mais est fortement recommandée */ return (float)($a + $b); }
Une fonction ne retourne rien ou une seule variable. Mais, n'oubliez pas que cette variable peut être une super-variable (un tableau).
NB : Un paramètre peut aussi être une super-variable.
Un nom de fonction ne peut pas commencer par un chiffre (comme en C, JavaScript,
...).
Mais, en PHP, le nom d'une fonction est insensitve case.
JavaScript est côté client (navigateur) et donc se doit d'être léger. Le PHP
est côté serveur et donc peut être plus lourd (contenir plus de fonctions natives (ou pré-définies) et de
méthodes toutes faites).
JavaScript 6.0 : 13 fonctions natives + beaucoup de méthodes. Voir
liste des méthodes
PHP 7.0 : + de 1.000 fonctions ! Voir Liste des fonctions et méthodes
Les variables super-globales
Particularité du PHP. Introduites depuis le PHP 4.1, elles sont tableaux associatifs disponibles partout dans le script (y compris à l'intérieur de fonctions).
-
$x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z;
- $_POST
- $_GET
- $_SERVER
- $_COOKIE
- $_SESSION
- $_REQUEST
- $_FILES
- $_ENV
Seules les plus courantes seront abordées dans ce mini-cours.
$GLOBALS
est la seule super-globable à ne pas contenir l' underscore (_)
dans son nom.
Voilà, vous connaissez déjà les bases du PHP.
La force de PHP est qu'il est sur un serveur et qu'il dispose d'un nombre impressionnant de fonctions très utiles.
- Liste des fonctions liées aux String
- Liste des fonctions mathématiques
- Liste des fonctions liées aux tableaux
- Liste des fonctions liées aux dates/heures
- ...
Inutile de toutes les étudier ! Sachez simplement que si vous souhaitez faire quelque chose avec une String, un nombre, une date ou une heure, un tableau, ... il existe une fonction pour vous aider.