Programmation Web Le langage PHP
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
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 »
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 »
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.
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 : <?php function tree_up($node){ ... } function tree_down($node){ ... ?>
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'; ?>
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 * ...
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) ?
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
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"; substitue les VARIABLES et les retour ligne
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) for ($i = 0 ; $i < 10 ; $i++){ $var[] = rand(); } // le tableau contient 10 cases de 0 à 9
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);
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 $CFG 'host' 'localhost' 'login' 'toto' 'maxDelay' 2000 array_keys($CFG) array_values($CFG)
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
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
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.
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
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 = …; return $valretour;
19 - Variables globales La visibilité des variables utilisées dans une fonction est "locale" par défaut $var = 2; function f(…){ $var = 3; echo $var."\n"; } Affiche toujours 3 puis 2. Espace global Espace de f global $var $var = 2; function f(…){ global $var; $var = 3; echo $var."\n"; } Espace de f
20 - Variables superglobales Certaines variables sont "implicitement" accessibles de partout, sans nécessité de faire appel à global. Tableaux liés au contexte Web $_GET $_POST $_COOKIE $_FILES $_REQUEST $_SESSION Tableaux d'informations d'environnement système $_SERVER $_ENV
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()
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 B function B_create(){ return $module; } function B_display($module){
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 Dates et heures Systeme de fichiers Calendrier Mail, Zip MySQL Images
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
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
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
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).
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.
Fin du cours