Chapitre II : PHP - Notions de base [Sept 2016]
I. La petite histoire du PHP
Il a été créé en 1994 par Rasmus Lerdorf pour les besoins des pages web personnelles (livre d’or, compteurs, etc.). A l’époque, PHP signifiait Personal Home Page. C’est un langage incrusté au HTML et interprété (PHP3) ou compilé (PHP4) côté serveur. Il dérive du C et du Perl dont il reprend la syntaxe. Il est extensible grâce à de nombreux modules et son code source est ouvert. Comme il supporte tous les standards du web et qu’il est gratuit, il s’est rapidement répandu sur la toile. En 1997, PHP devient un projet collectif et son interpréteur est réécrit par Zeev Suraski et Andi Gutmans pour donner la version 3 qui s’appelle désormais PHP : Hypertext Preprocessor. En 2002, PHP est utilisé par plus de 8 millions de sites Web à travers le monde et en 2007 par plus de 20 millions. La version actuelle est la version 5, sortie le 13 juillet 2004. La dernière mise à jour est la 5.6.14 datant du 1 octobre 2015. La prochaine version : PHP 6 est en développement. Il existe par ailleurs des applications web prêtes à l’emploi (PHPNuke, PHP SPIP, PHPSlash…) permettant de monter facilement et gratuitement son portail. En juillet 2000 plus de 300.000 sites tournaient déjà sous PHP !
II. Modèle
III. Intégration d’un script dans une page
Les pages web sont au format html. Les pages web dynamiques générées avec PHP sont au
format php. Le code source php est directement inséré dans le fichier html grâce au conteneur
de la norme XML : <?php … ?>
Exemple:
1 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
Résultat affiché par le navigateur
<html> <body> <?php
echo "Bonjour";
?> </body> </html>
Exemple de script
<html> <body> </body> </html>
IV. Commentaires
Un script php se commente comme en C :
Exemple :
<?php
// commentaire de fin de ligne
/* commentaire
sur plusieurs
lignes */
commentaire de fin de ligne comme en Shell
?>
Tout ce qui se trouve dans un commentaire est ignoré. Il est conseillé de commenter largement ses scripts.
V. Variables, types et opérateurs
Le typage des variables est implicite en php. Il n’est donc pas nécessaire de déclarer leur type au préalable ni même de les initialiser avant leur utilisation. Les identificateurs de variable sont précédés du symbole « $ » (dollars).
2 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
Exemple : $toto.
Les variables peuvent être de type entier (integer), réel (double), chaîne de caractères (string), tableau (array), objet (object), booléen (boolean). Il est possible de convertir une variable en un type primitif grâce au cast1 (comme en C). Exemple :
$str = "12";
// $str vaut la chaîne "12"
$nbr = (int)$str;
// $nbr vaut le nombre 12
Quelques fonctions :
empty($var) : renvoie vrai si la variable est vide isset($var) : renvoie vrai si la variable existe
unset($var) : détruit une variable gettype($var) : retourne le type de la variable
settype($var, "type") : convertit la variable en type type (cast) is_long(), is_double(), is_string(), is_array(), is_object(), is_bool(), is_float(), is_numeric(), is_integer(), is_int()…
Une variable peut avoir pour identificateur la valeur d’une autre variable.
Syntaxe : ${$var} = valeur;
Exemple :
$toto = "Hello";
${$toto} = 2012; echo $Hello;
// la variable $Hello vaut 2012
La portée d’une variable est limitée au bloc dans lequel elle a été créée. Une variable locale à une fonction n’est pas connue dans le reste du programme. Tout comme une variable du programme n’est pas connue dans une fonction. Une variable créée dans un bloc n’est pas connue dans les autres blocs, mêmes supérieurs.
Opérateurs arithmétiques :
+ (addition), - (soustraction), * (multiplié), / (divisé), % (modulo), ++ (incrément),
-- (décrément). Ces deux derniers peuvent être pré ou post fixés
Opérateurs d’assignement :
= (affectation), *= ($x*=$y équivalent à $x=$x*$y), /=, +=, -=, %=
Publicité
Opérateurs logiques :
and, && (et), or, || (ou), xor (ou exclusif), ! (non)
Opérateurs de comparaison :
== (égalité), < (inférieur strict), <= (inférieur large), >, >=, != (différence)
1 Le cast est une conversion de type. L’action de caster consiste en convertir une variable d’un type à un autre.
3 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
Signalons un opérateur très spécial qui équivaut à une structure conditionnelle complexe if then else à la différence qu’il renvoie un résultat de valeur pouvant ne pas être un booléen : l’opérateur ternaire.
Syntaxe :
(condition)?(expression1):(expression2);
Si la condition est vrai alors évalue et renvoie l’expression1 sinon évalue et renvoie l’expression2.
Exemple :
$nbr = ($toto>10)?($toto):($toto%10);
Dans cet exemple, la variable $nbr prend $toto pour valeur si $toto est strictement supérieur à 10, sinon vaut le reste de la division entière de $toto par 10.
VI. Constantes
L’utilisateur peut définir des constantes dont la valeur est fixée une fois pour toute. Les constantes ne portent pas le symbole $ (dollars) en début d’identificateur et ne sont pas modifiables.
define("var",valeur) : définit la constante var (sans $) de valeur valeur
Exemple 1 :
define("Auteur","Michel");
echo Auteur;
// affiche ‘Michel’
Exemple 2 :
define(MY_YEAR,1980);
echo MY_YEAR;
// affiche 1980
Contrairement aux variables, les identificateurs de constantes (et aussi ceux de fonction) ne sont pas sensibles à la casse.
VII. Références
On peut à la manière des pointeurs en C faire référence à une variable grâce à l’opérateur & (ET commercial).
Exemple 1 :
$toto = 100;
// la variable $toto est initialisée à la valeur 100
$test = &$toto; // la variable $test fait référence à $toto
$toto++;
// on change la valeur de $toto
echo $test;
// qui est répercutée sur $test qui vaut alors 101
Exemple 2 :
4 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
function change($var) {
$var++;
// la fonction incrémente en local l’argument
}
$nbr = 1;
// la variable $nbr est initialisée à 1
change(&$nbr);
// passage de la variable par référence
echo $nbr;
// sa valeur a donc été modifiée
VIII. Mathématiques
Il existe une miriade de fonctions mathématiques.
abs($x) : valeur absolue
ceil($x) : arrondi supérieur
floor($x) : arrondi inférieur
Publicité
pow($x,$y) : x exposant y
round($x,$i) : arrondi de x à la ième décimale
max($a, $b, $c …) : retourne l’argument de valeur maximum
pi() : retourne la valeur de Pi
Et aussi : cos, sin, tan, exp, log, min, pi, sqrt…
Quelques constantes :
M_PI : valeur de pi (3.14159265358979323846)
M_E : valeur de e (2.7182818284590452354)
Nombres aléatoires :
rand([$x[,$y]) : valeur entière aléatoire entre 0 et RAND_MAX si x et y ne sont pas définis, entre x et RAND_MAX si seul x est défini, entre x et y si ces deux paramètres sont définis.
srand() : initialisation du générateur aléatoire
getrandmax() : retourne la valeur du plus grand entier pouvant être généré
L'algorithme utilisé par la fonction rand() - issu de vieilles bibliothèques libcs - est particulièrement lent et possède un comportement pouvant se révéler prévisible. La fonction mt_rand() équivalente à rand() est plus rapide et plus sûre puisque l'algorithme utilisé se base sur la cryptographie.
En cas d’utilisation de la fonction mt_rand(), ne pas oublier d’utiliser les fonctions de la même famille : mt_rand([$x[,$y]]), mt_srand() et mt_getrandmax().
Formatage d’un nombre :
number_format ($nbr[,$dec,[$a,$b]]) : retourne une chaîne de caractères représentant le nombre $nbr avec $dec décimales après formatage. La chaîne $a représente le symbole faisant office de virgule et $b le séparateur de milliers.
5 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
Par défaut, le formatage est anglophone : $a = ''. '' et $b = '', ''.
Très utile pour représenter les nombres élevés au format francophone.
Exemples :
number_format (1000000.3333);
// affiche 1,000,000
number_format (1000000.3333,2);
// affiche 1,000,000.33
number_format (1000000.3333,2,",",".");
// affiche 1.000.000,33
IX. Expressions
Presque tout en php est une expression. On les construit de façon très souple. De façon à réduire la taille du code (comme en C). L’inconvénient est l’illisibilité du code ainsi écrit sauf à le commenter suffisamment. Il faut donc les construire avec parcimonie et ne pas hésiter à les fractionner.
Exemple :
echo change( $nbr += ($toto>0)?(0):(--$toto) );
Attention à utiliser les parenthèses afin de pallier aux priorités des opérateurs.
X. Booléens
Les variables booléennes prennent pour valeurs TRUE (vrai) et FALSE (faux). Une valeur entière nulle est automatiquement considérée comme FALSE. Tout comme une chaîne de caractères vide "". Ou encore comme les chaînes "0" et ‘0’ castées en l’entier 0 lui même casté en FALSE.
Exemple :
if(0) echo 1;
// faux
if('''') echo 2;
if(''0'') echo 3;
if(''00'') echo 4;
// faux
// faux
if('0') echo 5; // faux
if('00') echo 6;
if('' '') echo 7;
Cet exemple affiche 467. Donc l’espace ou la chaîne ‘’00’’ ne sont pas considérés castés en FALSE.
XI. Chaînes de caractères
Une variable chaîne de caractères n’est pas limitée en nombre de caractères. Elle est toujours délimitée par des simples quotes ou des doubles quotes.
Exemples :
6 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
$nom = ''Hugo'';
$prenom = ‘Victor’;
Les doubles quottes permettent l’évaluation des variables et caractères spéciaux contenus dans la chaîne (comme en C ou en Shell) alors que les simples ne le permettent pas.
Publicité
Exemples :
echo ''Nom: $nom''; // affiche Nom: Hugo
echo ’Nom: $nom‘; // affiche Nom: $nom
Quelques caractères spéciaux : \n (nouvelle ligne), \r (retour à la ligne), \t (tabulation horizontale), \\ (antislash), \$ (caractère dollars), \’’ (double quote).
Exemple : echo ''Hello Word !\n'';
Opérateur de concaténation de chaînes : . (point)
Exemple 1 :
$foo = ''Hello'';
$bar = ''Word'';
echo $foo.$bar;
Exemple 2 :
$name = ''Henry'';
$whoiam = $name. ''IV'';
Exemple 3 :
$out = ‘Patati’;
$out .= '' et patata…'';
Affichage d’une chaîne avec echo:
Exemples:
echo ‘Hello Word.’;
echo ''Hello ${name}\n'';
echo ''Nom : '', $name;
echo(''Bonjour'');
Quelques fonctions:
strlen($str) : retourne le nombre de caractères d’une chaîne
strtolower($str) : conversion en minuscules
strtoupper($str) : conversion en majuscules
trim($str) : suppression des espaces de début et de fin de chaîne
7 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur
Chapitre II : PHP - Notions de base [Sept 2016]
substr($str,$i,$j) : retourne une sous chaîne de $str de taille $j et débutant à la position $i
strnatcmp($str1,$str2) : comparaison de 2 chaînes
addslashes($str) : déspécialise les caractères spéciaux (‘, ‘’, \)
ord($char) : retourne la valeur ASCII du caractère $char
On peut délimiter les chaînes de caractères avec la syntaxe Here-doc.
Exemple :
$essai = <<<EOD
Ma chaîne ''essai''
sur plusieurs lignes.
EOD;
echo $essai;
La valeur de la variable $essai est délimitée par un identifiant que vous nommez librement. La première apparition de cet identifiant doit être précédée de 3 signes inférieurs <. Sa deuxième apparition doit se faire en premier sur une nouvelle ligne. Cette valeur chaîne se comporte comme si elle était délimitée par des doubles quotes ‘’ ‘’ dans le sens où les variables seront évaluées. Par contre il est inutile d’échapper les guillemets, c’est-à-dire que la déspécialisation des doubles quotes devient inutile.
XII. Affichage
Les fonctions d’affichage :
echo() : écriture dans le navigateur
print() : écriture dans le navigateur
printf([$format, $arg1, $arg2]) : écriture formatée comme en C, i.e. la chaîne de caractère est constante et contient le format d’affichage des variables passées en argument
Exemples :
echo ''Bonjour $name'';
print(''Bonjour $name'');
printf(''Bonjour %s'', $name);
8 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte Classes : DSI2 Matière : Pgt côté serveur