1 programmation web le langage php. 2 1 - le langage php est un langage de script sexécute :...
TRANSCRIPT
1
Programmation Web
Le langage PHP
2
1 - Le langage PHP
• Est un langage de script
• S’exécute : – Dans un serveur, comme dépendance d’une
requête– En ligne de commande comme une alternative
aux scripts système (vs. shell ou perl).
• PHP, Perl et les shell scripts ont une puissance quasiment équivalente
3
2 - Le langage PHP (1)
• Les avantages de PHP :– De très nombreuses bibliothèques– Une communauté de premier ordre :
• Réactivité de l’aide technique
• Rapidité de résolution de problèmes
• Fréquence des correctifs et fiabilité des librairies
– Une gestion pratique et efficace des variables et de la mémoire
– Des structures de données et objets « opportunistes »
4
3 - Le langage PHP (2)
• Les défauts de PHP :– Des premières librairies peu rigoureuses (problème de
l’open-source contributif)
– Une encapsulation faible (modèle objet simple) => réutilisabilité pas évidente à organiser.
– Un langage facile, donc peu élitiste (problème de l’égo des informaticiens, par rapport aux profanes)
– Des limites de performances, dues aux limites architecturales de son environnement
– Des performances faibles comparé à la programmation « lourde »
5
4 - Les fichiers PHP
• Deux grands modes du langage : – La génération de sortie : fonction initiale de son
ancêtre PHP-FI• HTML majoritaire
• La page PHP est une page Web « automatisée »
• Sa structure est celle d’une page WEB
– Le programme-script• Code PHP majoritaire
• Le page Web doit être lue comme un « programme »
• La structure est celle d’un code source qui produit des sorties : echo "…", print("…"), etc.
6
5 - Les fichiers PHP (2)
• Deux modes plus "mineurs" :– Le fichier librairie :
• Destiné à être "inclus" :
include_once "treelib.inc.php";
• NE contient QUE des fonctions :<?phpfunction tree_up($node){ ...
}
function tree_down($node){ ...
}
?>
7
6 - Les fichiers PHP (3)
• Deux modes plus "mineurs" (suite) :– Le fichier de paramètres :
• Destiné à être "inclus" :
include_once "config.inc.php";
• NE contient QUE des déclarations de variables :<?php$CFG['host'] = 'localhost';
$CFG['dblogin'] = 'toto';
$CFG['dbpassword'] = 'monpasse';
?>
8
7 - Les bases du langage• Les commentaires
– Trois formes de base :// commentaires ligne
/* commentaires bloc
*/
# commentaires de type PERL/Shell
– Une forme "collectable" (PhpDoc) :/**
* @uses CFG
* @param object $objvalue definition
* ...
*/
9
8 - Les bases du langage (2)• Les variables
– Modèle unifié de variable : $ + un nom$var = 1;
$var = 3.2E+4;
$var = "du texte";
$var = array();
$var = new Object();
– Une variable peut donc être n'importe quoi, y compris rien du tout :
echo (isset($var)) ? 'initialisée' ; 'rien' ;
– isXXXX() permet de savoir... : ex : isarray($var) ?
10
9 - Les bases du langage (3)• En général :
– Les variables n'ont pas de type déclaré– Les variables ne déclarent pas– Suivant le réglage de PHP, l'utilisation d'une
variable non initialisée : • ne signale rien, la variable vaut 0 ou '' ou null
suivant son utilisation.
• Signale une notice :• Notice: Undefined variable: existepas in D:\wwwroot\WWW-
MOODLE1_8_2-PHP\mod\brainstorm\operators\categorize\organize.php on line 14
11
10 - Les bases du langage (4)• Les chaînes de caractères
– Chaînes littérales$str = 'ne substitue ni $variables ni les \nretour lignes';
echo $str;
ne substitue ni $variables ni les \nretour lignes
– Chaînes "substituantes"$variable = 'VARIABLES';
$str = "substitue les $variables et les \nretour lignes";
echo $str;
substitue les VARIABLES et les
retour ligne
12
11 - Les bases du langage (5)• Cas particulier : les tableaux
– Un tableau s'utilise, – il se déclare mais ne ne s'alloue pas (C)
$var = array();
$var[3] = 4.2;
// le tableau contient 4 cases
– Peut se remplir itérativement (push)$var = array();
for ($i = 0 ; $i < 10 ; $i++){
$var[] = rand();
}
// le tableau contient 10 cases de 0 à 9
13
12 - Les bases du langage (6)
• Tableaux suite : les tableaux associatifs– Les "hashtables" sont des structures ESSENTIELLES à
PHP.
– Une 'hashtable" est un tableau qui associe des clefs à des valeurs :$CFG = array();
$CFG['host'] = 'localhost';
$CFG['login'] = 'toto';
$CFG['maxDelay'] = 2000; // msec
– ou encore :$CFG = array('host' => 'localhost', 'login' => 'toto', 'maxDelay' => 2000);
14
13 - Les bases du langage (7)• Tableaux suite : les tableaux associatifs (2)
• On peut mettre n'importe quoi dans la valeur => des objets ou des autres tableaux ou hashes !!
• Toutes les librairies de tableau tiennent compte de cette ambivalence
'host' 'localhost'
'login' 'toto'
'maxDelay' 2000
$CFG
array_keys($CFG) array_values($CFG)
15
14 - Les bases du langage (8)• Augmentation de la dimension des tableaux
– Pour des tableaux simples, comme en C : $TAB = array();
$TAB[1][0] = 4;
– Les "cases" non initialisées valent 0 ou chaîne vide, etc.
– Un tableau à dimension multiple est TOUJOURS un tableau de tableaux : $TAB = array(1,2,6,array(2,3),array(3,4,7));
– Cas du tableau associatif :$CFG = array('forum' => array('canpost' => 1));
echo $CFG['forum']['canpost'];
– Une construction associative complexe forme un arbre
16
15 - Les bases du langage (9)• Structures et objets
– On parle peu de structures en PHP. Tout ce qui contient des membres est objet.
– Les objets peuvent être construits de façon opportuniste : $obj->nom = 'Champagne Mumm';
$obj->prix = 10.5;
$obj->quantité = 10;
Constitue une instance "à la volée".
– Les membres peuvent être de toute nature :• valeurs
• texte
• tableaux / hashes
• objets
17
16 - Les bases du langage (10)
• Structures et objets– Les objets peuvent être également déclarés en
"classes". – Ceci permet d'ajouter des fonctions dans l'objet
(méthodes -> Cf cours 2° semestre).– Le modèle objet de PHP reste un modèle léger.– En l'absence de persistance mémoire, son usage
reste un "plus" mais accessoire.– Hors sujet pour ce cours.
18
17 - Fonctions
• Fonction PHP– Une fonction est définie par son nom et ses
paramètres :function maFonction($parm1, $parm2 , $parm3=0){
… code de la fonction …
}
– Si des valeurs par défaut sont données on peut appeler la fonction sans ces paramètres : $ret = maFonction($val1, 'toto');
$ret = maFonction(1, 'titi', 4);
sont tous deux valides
19
18 - Fonctions• Une fonction peut être définie "dans le code" :
if ( condition ){
function f(…){… code de la fonction …
}
… suite du if …
}
• Retour de fonction– Une fonction renvoie toujours quelque chose (au pire false)
function maFonction(…){
$valretour = …;
… code de la fonction …
return $valretour;}
20
• La visibilité des variables utilisées dans une fonction est "locale" par défaut$var = 2;
function f(…){
$var = 3;
echo $var."\n";
}
echo $var."\n";
Affiche toujours 3 puis 2.
global $var$var = 2;
function f(…){ global $var;
$var = 3;echo $var."\n";
}echo $var."\n";
19 - Variables globales
Esp
ace
de f
Espace global
Esp
ace
de f
21
• Certaines variables sont "implicitement" accessibles de partout, sans nécessité de faire appel à global.
20 - Variables superglobales
Tableaux liés au contexte Web$_GET$_POST$_COOKIE$_FILES$_REQUEST$_SESSION
Tableaux d'informations d'environnement système$_SERVER$_ENV
22
21 - Variables et fonctions variables• L'utilisation d'une variable correspond, en fait, à
l'utilisation d'une clef dans un hash :$var = 2;
$__['var'] = 2; // représentation virtuelle
• Il est donc possible de mettre le nom d'une variable dans une variable et d'en voir le contenu : $var = 'une variable';
$var1 = 'var';
echo $$var1; // ecrit "une variable"
• On peut faire la même chose avec des fonctions$var = 'unefonction';
$res = $var(); // exécute la fonction unefonction()
23
22 - Fonctions variables (1)• Les fonctions variables permettent de créer de la modularité :
// Dans le module A
function A_create(){return $module;
}
function A_display($module){
}
// Dans l'infradtructure
foreach($modules as $module){
$createfunction = "{$module->name}create";
$displayfunction = "{$module->name}display";
$mod = $createfunction(); $displayfunction($mod);
}
// Dans le module Bfunction B_create(){return $module;}function B_display($module){}
24
23 - Librairies• Le PHP contient de très nombreuses librairies.
• Les librairies, après un début un peu cafouilleux ont tendance à se professionnaliser.
• La plupart des librairies sont disponibles PAR DEFAUT. Les autres doivent être ajoutées dans php.ini.
• Les librairies totalement ESSENTIELLES :
– Vous ne pouvez pas vous en passer : • Tableaux
• Variables
• Les librairies TRES UTILES :• Expressions régulières
• Expr. Régulières Perl
• Chaînes de caractères• Variables
• Calendrier• Mail, Zip
• MySQL• Images
• Dates et heures• Systeme de fichiers
25
24 - Librairie "Variables"• Fonctions d'interrogation de variables
– empty -- Si une variable contient une valeur non nulle – is_array, is_object, is_scalar, is_resource, is_null – isset -- Si une variable est définie (existe)– is_callable -- Si l'argument peut être appelé comme fonction – is_bool, is_float, is_int, is_integer, is_numeric,
is_real, is_string
• Fonctions de lecture de variable (transtypage)– floatval, intval, strval
• Fonctions de manipulation du type (transtypage)– gettype, settype
• Fonctions de conversion de stockage– serialize, unserialize
26
25 - Librairie "Tableaux"• Deux librairies dans une (ancienne et nouvelle
array_XXXX() )• Construction de tableaux
– array, list
• Ajout de données (unitaire)– array_pad, array_pop, array_push, array_shift,
array_unshift
• Opérations• array_diff_assoc, array_diff_uassoc, array_diff,
array_intersect_assoc, array_intersect, array_reduce, array_slice, array_splice, array_sum, array_udiff_uassoc, array_udiff
27
25 - Librairie "Tableaux" (2)• Fonctions de tri
– arsort, asort, sort, uasort, uksort, usort, krsort, ksort, rsort, natcasesort, natsort, array_multisort
– Plus généralement :
• -u- : invoque un "callback utilisateur"
• -a- : tient compte des associations clefs-valeurs
• -r- : reverse
• Inversion clefs-valeurs– array_flip
• Opérations sur les valeurs– array_filter, array_change_key_case, array_reverse,
array_unique
28
26 - Librairie "Tableaux" (3)• De nombreuses autres librairies ont des fonctions
relatives aux tableaux. Exemple :– Dans la librairie "String" : join, split, explode, implode
• De nombreuses autres fonctions sont "array aware" : cela veut dire qu'elles ont un résultat différent selon qu'on leur fournit une valeur scalaire ou un tableau. (type "mixed" dans la doc).
29
27 - Librairie "String"• Près de 90 fonctions de manipulation des chaînes de caractères.
• Une librairie peu structurée.
• Les fonctions POSIX strXXXXX()– strcasecmp, strchr, strcmp, strcoll, strcspn, stripos, stristr, strlen, strncmp, strpos, strrchr, strrev, strripos, strrpos, strstr, strtok, strtolower, strtoupper, strtr
• Les fonctions d'échappement– strip_tags, stripcslashes, stripslashes, trim, html_entity_decode, htmlentities, htmlspecialchars, addcslashes, addslashes
• De très nombreuses autres.
30
Fin du cours