Initiation au PHP5
HyperText Preprocessor
C’est un langage de script HTML dont la syntaxe est emprunté au C, au Java et au PERL.
Les Tags
<?php ?> : La balise conseillée par PHP
<? ?> : Short tag, à éviter
<?= ?> : Revient à faire un echo
<% %> : ASP Tag
<script language= »PHP »></script>
Les shorts open tags peuvent etre désactivés dans le php.ini :
short_open_tag = Off
De même pour les ASP tags :
asp_tags = Off
On evite ces deux derniers car peuvent avoir un probleme d’interpretation avec du xml. Ils ne sont pas standards W3C malgré qu’ils soient toujours actifs
Important aussi :
on peut fermer une balise <?php par %> par exemple
on peut ne pas fermer la balise php si et seulement si on n’est pas dans du HTML. PHP recommande de ne pas fermer la balise : pour eviter d’introduire des caracteres avant un include qui peut etre interprété comme un entete vide.
Les elements qui consituent un script
Les instructions
Les instructions simples sont toujours terminés par un « ; » sauf pour la derniere ligne de code parceque la balise de fermeture introduit automatiquement une fin
Les instructions composées sont composées d’instructions simples mais mise entre {}
<?php echo 'Bonjour'; { echo 'Instruction 1<br/>'; echo 'Instruction 2'; } ?>
NB : oublier un « ; » sera interprété comme une erreur par PHP
Expressions
Expression : Toute chôse ayant une valeur. (constante, 1+1, variable, etc)
Les espaces
On peut ommetre les espaces en PHP, sous certaines conditions.
Commentaires
/* plusieurs lignes */ //Une ligne #Une ligne #! /bin/
Attention, sous UNIX, on peut faire un #! qui permet de faire appel à un executable externe.
On peut imbriquer des commentaires. Il existe une syntaxe de comentaires qui permet de générer une documentation technique : PhpDoc.
/**
* Projet A
* @author M. X.
* @version 1.0
*/Les types de données
En php, toute valeur à un type. PHP utilise un type typage dynamique: il n’est pas nécéssaire de préciser le type.
Les types sont définis par familles :
- Les types scalaires :
- entiers (12, 014, 0xC)
<?php echo $a=12; echo '<br/>'; echo $b=014; echo '<br/>'; echo $c=0xc; ?>
affichera 12 12 12
Attention : pour la certification, il faut connaitre l’octale et l’héxadécimal.
- reels (1.5, 15E2 => 15E+2, 15E-2) (E étant la puissance)
- booleen (0,1,true,false)
- chaines
une chaine permet de contenir une suite d’octet quelconque : en php, un caractere est un octet. Il existe plusieurs syntaxe pour créer une chaine de caractere :
- simple quote (caractere d’echapement : ,\)
<?php echo 'C\'est un test'; ?>
- double quote (caractere d’echapement : ,\ & caractere de subtitution : n)
Escaped characterssequence meaning n linefeed (LF or 0x0A (10) in ASCII) r carriage return (CR or 0x0D (13) in ASCII) t horizontal tab (HT or 0×09 (9) in ASCII) v vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5) f form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5) \ backslash $ dollar sign » double-quote [0-7]{1,3} the sequence of characters matching the regular
expression is a character in octal notationx[0-9A-Fa-f]{1,2} the sequence of characters matching the regular
expression is a character in hexadecimal notationDans une chaine « double quote », il est possible de faire référence à une variable :
$a = 10; echo "a vaut : $a"; echo "Il vous reste \"{$a}minutes\""; echo "051"; //affichera : 051 echo "\051"; //affichera ) => on est en hexa, on echappe la chaine
heredoc : on utilise un token (separateur)
$a = <<<monToken Ligne1 Ligne2 Ligne3 MonToken; echo $a;
- simple quote (caractere d’echapement : ,\)
- Les types composés
- Tableaux : un tableau peut contenir plusieurs valeures accessibles a l’aide d’une clé.
$tab = array(12,13,'B'); echo $tab[1]; //affichera 13;
- Classes :
class maclasse { public $var1; protected $var2; private $var3; public function mamethode() { } } $monobjet = new maclasse();
- Tableaux : un tableau peut contenir plusieurs valeures accessibles a l’aide d’une clé.
- Les types spéciaux
- Les ressources : ce sont des extensions qui vont gérér les ressources (ex: gestion des images par php_gd2.dll)
- Le NULL est une absence de valeur. Une variable, constante est considérée comme nulle si et seulement si elle assignée à NULL et quand la variable/constante à été détruite.
$a = NULL; unset($a);
Conversion de types
En PHP, la conversion peut être implicite. Ou explicite : le développeur demande la conversion.
$a = 12+"12"; $a = 12+(int)"12";
| Syntaxe | Description |
| (int) | convertit la valeur en entier |
| (float) | convertit la valeur en reel |
| (bool) | converti la valeur en booleeen |
| (string) | convertit la valeur en chaine |
| (array) | convertit la valeur en tableau |
| (object) | convertit la valeur en objet d’instance stdClass |
$a = (int) 5.2*12.4; // float(62) $b = (int) 'Bonjour 027'; // int(0) $c = (array) '12'; // array(1) { [0]=> string(2) "12"} $d = (string) 124; // string(3) "124" $e = (int) '007 bonjour'; // int(7) $f = (float) '007 bonjour'; // float(7) $g = (object) 5.2; // object(stdClass)#1 (1) { ["scalar"]=> float(5.2)}
Exemples
| Valeur | Type | Resultat |
|---|---|---|
| [0] | (int) |
int(0) |
| [0] | (float) |
float(0) |
| [0] | (array) |
array(1) {
[0]=>
int(0)
}
|
| [0] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
int(0)
}
|
| [0] | (bool) |
bool(false) |
| [0] | (string) |
string(1) "0" |
| Valeur | Type | Resultat |
|---|---|---|
| [1] | (int) |
int(1) |
| [1] | (float) |
float(1) |
| [1] | (array) |
array(1) {
[0]=>
int(1)
}
|
| [1] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
int(1)
}
|
| [1] | (bool) |
bool(true) |
| [1] | (string) |
string(1) "1" |
| Valeur | Type | Resultat |
|---|---|---|
| [0] | (int) |
int(0) |
| [0] | (float) |
float(0) |
| [0] | (array) |
array(1) {
[0]=>
string(1) "0"
}
|
| [0] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(1) "0"
}
|
| [0] | (bool) |
bool(false) |
| [0] | (string) |
string(1) "0" |
| Valeur | Type | Resultat |
|---|---|---|
| [0.0] Attention | (int) |
int(0) |
| [0.0] | (float) |
float(0) |
| [0.0] | (array) |
array(1) {
[0]=>
string(3) "0.0"
}
|
| [0.0] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(3) "0.0"
}
|
| [0.0] | (bool) |
bool(true) |
| [0.0] | (string) |
string(3) "0.0" |
| Valeur | Type | Resultat |
|---|---|---|
| [] | (int) |
int(0) |
| [] | (float) |
float(0) |
| [] | (array) |
array(1) {
[0]=>
string(0) ""
}
|
| [] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(0) ""
}
|
| [] | (bool) |
bool(false) |
| [] | (string) |
string(0) "" |
| Valeur | Type | Resultat |
|---|---|---|
| [true] | (int) |
int(0) |
| [true] | (float) |
float(0) |
| [true] | (array) |
array(1) {
[0]=>
string(4) "true"
}
|
| [true] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(4) "true"
}
|
| [true] | (bool) |
bool(true) |
| [true] | (string) |
string(4) "true" |
| Valeur | Type | Resultat |
|---|---|---|
| [false] | (int) |
int(0) |
| [false] | (float) |
float(0) |
| [false] | (array) |
array(1) {
[0]=>
string(5) "false"
}
|
| [false] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(5) "false"
}
|
| [false] | (bool) |
bool(true) |
| [false] | (string) |
string(5) "false" |
| Valeur | Type | Resultat |
|---|---|---|
| [les 3 mousquetaires] | (int) |
int(0) |
| [les 3 mousquetaires] | (float) |
float(0) |
| [les 3 mousquetaires] | (array) |
array(1) {
[0]=>
string(19) "les 3 mousquetaires"
}
|
| [les 3 mousquetaires] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(19) "les 3 mousquetaires"
}
|
| [les 3 mousquetaires] | (bool) |
bool(true) |
| [les 3 mousquetaires] | (string) |
string(19) "les 3 mousquetaires" |
| Valeur | Type | Resultat |
|---|---|---|
| [12,24] | (int) |
int(12) |
| [12,24] | (float) |
float(12) |
| [12,24] | (array) |
array(1) {
[0]=>
string(5) "12,24"
}
|
| [12,24] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
string(5) "12,24"
}
|
| [12,24] | (bool) |
bool(true) |
| [12,24] | (string) |
string(5) "12,24" |
| Valeur | Type | Resultat |
|---|---|---|
| [] | (int) |
int(0) |
| [] | (float) |
float(0) |
| [] | (array) |
array(0) {
}
|
| [] | (object) |
object(stdClass)#1 (0) {
}
|
| [] | (bool) |
bool(false) |
| [] | (string) |
string(0) "" |
| Valeur | Type | Resultat |
|---|---|---|
| [12.7] | (int) |
int(12) |
| [12.7] | (float) |
float(12.7) |
| [12.7] | (array) |
array(1) {
[0]=>
float(12.7)
}
|
| [12.7] | (object) |
object(stdClass)#1 (1) {
["scalar"]=>
float(12.7)
}
|
| [12.7] | (bool) |
bool(true) |
| [12.7] | (string) |
string(4) "12.7" |
Conclusion :
Pour la conversion d’un entier en booleen, 0 donne false, et pour tout les autres entiers on obtient true.
Pour la conversion d’un float en entier, on a une simple concatenation : 12.24 devient 12.
Pour la conversion d’un booleen false en chaine, se converti en « » et pour un booleen true, on obtient « 1″.
Pour la conversion d’un booleen il n’a que les chaines 0 et vides qui sont considérés en tant que false.
Pour la conversion d’une chaine en float ou en entier, si les chiffres dans une chaine sont au début, php transforme cette chaine en nombre. Sinon, on obtient 0.
Variables et Constantes
En constante et en variable, il existe des mots clés qui ne peuvent pas etre utilisés par le developpeur comme par exemple : E_ALL
On appele identifiant les variables et constantes. Ces identifiants sont soumis aux contraintes suivantes :
- On ne commence jamais une constante ou variable par un chiffre : [a-z_]. Les caracteres suivant peuvent etre [a-z0-9_]*
- Les variables et les constantes sont sensibles a la casse.
Les variables
Une variable commence toujours par le signe $. Il n’est pas obligé de déclaré une variable avant utilisation
Il est possible d’utiliser des variables variable
$a= 'b'; $b = 'c' $c ='Hello'; $Hello = 'Bonjour'; echo $$$$a; //affichera Bonjour => il faut lire de droite a gauche : $a vaut b qui vaut c qui vaut Hello qui vaut 'Bonjour'
Il est possible de déclarer une variable avec des {}
${'78abc15'} = 5; echo ${78abc15} = 5; //Utilisé pour créer des variables dynamique
Les constantes
Pour assigner une constante, on emploie le mot cle define(‘CONSTANTE’,'Valeur’,'SENSIBILITIE_CASE’) où SENSIBILITIE_CASE est par defaut à true.
define('TVA',19.6,1); echo tva; define ('TR',39.9); echo TR;
Attention : on peut assigner à une constante, uniquement les valeurs scalaires.
Une constante non définie vaut sont propre nom
En PHP, il existe des constantes dites « constantes magiques » qui sont propres à PHP
| Constante magique | Description |
| __FILE__ | Le fichier dans lequel onse trouve |
| __LINE__ | Ligne dans laquelle on se trouve |
| __FUNCTION__ | Fonction dans laquelle on se trouve |
| __CLASS__ | La classe dans laquelle on se trouve |
| __METHOD__ | Methode dans laquelle on se trouve |
Il faut eviter les « nombres magiques », il faut les remplacer par des constantes :
$a = 15 * $b ; //doit etre remplacer par $a = $CONSTANTE * $b;
Les opérateurs
Le fonctionnement des opérateurs dépend de leur priorité.
- Les + et – : l’ordre est de gauche à droite ( 5 + 3 – 2 )
- Les = : l’ordre est de droite à gauche ( $a = $b = 5; )
- Les opérateurs arithmetiques :
Opérations élémentairesExemple Nom Résultat -$a Négation Opposé de $a. $a + $b Addition Somme de $a et $b. $a – $b Soustraction Différence de $a et $b. $a * $b Multiplication Produit de $a et $b. $a / $b Division Quotient de $a et $b. $a % $b Modulo Reste de $a divisé par $b. - Opérateurs d’affectation (=,+=,-=,*=,/=,%=)
$a = 22; // a = 22 $a +=5; // a = 27; $a -= 5; // a = 22 $a *=5; // a = 110 $a /= 5; //a = 22 $a %= 5; // a = 2 echo $a;
Une affectation se fait soit par copie soit par référence. Sauf pour les classes et les ressources en PHP5.
$a = 5; $b = $a; $a = 7; echo $b; //affiche 5
La modification de a n’influe pas sur b.
$a = 5; $b = &$a; $a = 7; echo $b; //affiche 7
Création d’un alias de a sur b.
En PHP4, alors que les objets et ressources sont affectés par copie, en PHP5 ils le sont par référence. - Les opérateurs bit à bit (bitwise) permettent de travailler sur la représentation binaire d’une valeur.
Les opérateurs sur les bitsExemple Nom Résultat $a & $b ET (And) Les bits positionnés à 1 dans $a ET dans
$b sont positionnés à 1.$a | $b OU (Or) Les bits positionnés à 1 dans $a OU $b sont positionnés à 1.
$a ^ $b Xor Les bits positionnés à 1 dans $a OU dans
$b mais pas dans les deux sont positionnés à 1.~ $a NON (Not) Les bits qui sont positionnés à 1 dans $a sont positionnés à 0, et vice versa.
$a << $b Décalage à gauche Décale les bits de $a, $b fois
sur la gauche (chaque décalage équivaut à une multiplication par 2).$a >> $b Décalage à droite Décalage des bits de $a, $b fois
par la droite (chaque décalage équivaut à une division par 2).Rappels :
& 0 1 0 0 0 1 0 1 | 0 1 0 0 1 1 1 1 ^ 0 1 0 0 1 1 1 0 $a = 13; //=> 1101 $b = 7; //=> 0111 $res = $a & $b = 1101 & 0111 = 0101; $res = &a | $b = 1101 | 0111 = 1111; $res = &a ^ $b = 1101 | 0111 = 1010; $res = ~$a = 0010 $res = $a >> $b = $a / 2E$b; $res = $a << $b = $a * 2E$b; 5 << 2 = 101 * 2E2 = 101 * 100 = 10100 = 20; 5 >> 2 = 101 / 2E2 = 101 / 100 = 1;
Utilisation : cf. PHP.ini :
Show only errors
error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
Show all errors, except for notices
error_reporting = E_ALL & ~E_NOTICE | E_STRICT
Exercice : créer une variable entiere contenant une date avec le format suivant :
31 jours 12 mois 1999
Realiser 2 fonctions :
- Retourner un entier contenant une date au format compacte (binaire) param : annee, mois, jour, nom : creerdate
- Retourne une chaine contenant la date sous forme YYYY-MM-DD
define('BITS_ANNEE',9); define('BITS_MOIS',5); define('MASQUE_MOIS',480); define('MASQUE_JOUR',31); function creerDate($iAnnee,$iMois,$iJour){ return ($iJour | ($iMois << BITS_MOIS) | ($iAnnee << BITS_ANNEE)); } function str2date($iDate) { $iAnnee = $iDate >> BITS_ANNEE; $iMois = ($iDate & MASQUE_MOIS) >> BITS_MOIS ; $iJour = $iDate & MASQUE_JOUR; return sprintf('%d-%02d-%02d',$iAnnee,$iMois,$iJour); } $date = creerDate(1999,12,31); echo str2date($date);
Commentaires récents