Version en ligne

Tutoriel : Amusons-nous avec le PHP

Table des matières

Amusons-nous avec le PHP
Introduction
PHP, le Web, qu'est-ce donc ?
La programmation, c'est quoi ?
Pour apprendre, quelle attitude adopter ?
La boîte à outils du programmeur
L'invité surprise : l'éditeur de code
Apache et PHP sous Windows
Apache et PHP sous GNU/Linux, Mac OS X et les autres
Configurer pour mieux régner
Premiers pas…
Les balises PHP
Les commentaires
Les variables, le cœur du PHP
Première approche
Les variables à la sauce PHP
Valeurs et opérateur d'affectation
Une histoire de typage
Les types primitifs
Quel est ton type ?
Les opérateurs : partie I
Retour de l'opérateur d'affectation et introduction des expressions
Les opérateurs arithmétiques
Calculs complexes et modulo
Les expressions, un peu de pratique !
Les opérateurs : partie II
Opérateurs arithmétiques d'affectation et opérateurs d'incrémentation
Opérateurs de comparaison
Opérateurs logiques
Les structures de contrôle
Structures conditionnelles
Évaluation
Autre structure conditionnelle
Structure de boucle : partie I
Structure de boucle : partie II
Les fonctions
Première approche
Votre première fonction
Souvenir, souvenir
Les fonctions, c'est trop fort !
Les chaînes de caractères, un casse-tête
Bref rappel et nouvelle structure
Différence entre guillemets et apostrophes
Nouvel opérateur : concaténation
Le type manquant : les arrays
Faisons connaissance
Qui es-tu vraiment ?
Tu commences à me plaire…
Des fonctions et structures bien pratiques
Derniers mots et structure de contrôle
Les faux jumeaux
Bons plans
Présenter son code, tout un art
La bible du codeur PHP
Le transtypage, c'est pratique
Transmettre des variables
35, rue machin
Gardons la forme !
Never Trust User Input
L'enfer des guillemets magiques
Je suis perdu !
Premier TP : une calculatrice
Objectifs
Quelques conseils
Correction !
Peut mieux faire !
MySQL, qui es-tu ?
Parle-moi de toi...
On s'organise ?
La console à tout âge
Créons une base de données et une table pas à pas
La base avant tout
On passe à table ?
Le plat de résistance !
Gérons nos tables !
Une histoire d'entiers
Des types en pagaille
Et la gestion ?
SELECT, ou comment récupérer des données
MySQL et les types
Les données venant d'une table
Tri, ordre et limitation
Supprimer, modifier et insérer des données
DELETE s'exhibe
UPDATE en folie
INSERT sous les feux de la rampe
PHP et MySQL : des alliés de poids
Retour en arrière
Dis bonjour à MySQL !
Exploiter les ressources
Second TP : un visionneur de bases de données et de leurs tables
Objectifs et cycle de développement
L'étape d'algorithmie
Quelques outils
Correction
Fonctions, conditions et quelques opérateurs SQL
Les fonctions, de bons souvenirs
Un cas particulier : NULL
Les conditions
Un peu de repos avec les opérateurs
La gestion des dates
Qui peut me donner la date ?
Formatage et opérateurs simples
Des fonctions, en veux-tu en voilà !
Bataillons, à vos rangs... fixe !
Les intérêts et les limitations du regroupement
La clause magique
Les fonctions d'agrégation
ROLLUP et HAVING
L'ordre d'exécution des clauses
Troisième TP : un livre d'or
Les spécifications
La boîte à outils !
Correction
Discussion
Les index et sous-requêtes
Un index, pourquoi ?
Les différents index et leur gestion
Où placer des index ?
Surveiller les index
Les sous-requêtes
Retour sur les fonctions et les tableaux
Des fonctions à nombre de paramètres variable
Les fonctions, des valeurs
Les tableaux
Au cœur des variables
Des noms à dormir dehors
Les références
La portée des variables
Au cœur du PHP
Pour terminer
Fragmenter son code
Des scripts dans le script
Les espaces de noms
Utiliser les espaces de noms
Les nombres
Comment écrire un nombre ?
Des nombres équivalents
Les opérateurs bits à bits
Les flags
PHP et les erreurs
Les erreurs
Gérer les erreurs
Affiner la gestion
Histoire de ce tutoriel
Remerciements
Historique des mises à jour
Suite du tutoriel

Amusons-nous avec le PHP

Vous avez cinq minutes à perdre ?
Vous voulez lire ?
Vous voulez apprendre le PHP ?
Si la réponse à au moins une de ces questions est positive, vous êtes au bon endroit :) .
Ce tutoriel n'a pas la prétention de faire de vous des pros du PHP, il n'est là que comme base, comme un point de départ et un soutien qui vous permettra, je l'espère, d'évoluer ensuite par vous-mêmes.
Mais on ne se limitera pas à des choses simples pour autant, et je ne vous ménagerai pas, il faudra s'accrocher pour suivre sans quoi vous serez totalement largués :p .
Un petit détail qui vaut son pesant d'or : ce tutoriel n'engage que moi ; je vous montrerai ma vision du PHP, elle n'est pas universelle mais personnelle. Par conséquent, certaines parties de ce tutoriel pourraient s'opposer à d'autres tutoriels, articles ou autres textes.

Il est très fortement conseillé d'avoir des bases en (X)HTML avant de s'engager dans ce tutoriel ; si vous n'en avez pas, je vous conseille de lire le tutoriel de M@teo21 qui en parle.

Introduction

PHP, le Web, qu'est-ce donc ?

Avant d'entamer une lutte sans merci, il est de bon usage de s'informer et de se préparer. Comme l'a probablement dit un très grand homme dont j'ignore le nom et dont je ne peux prouver l'existence, « la moitié du combat se joue pendant sa préparation ».
Au menu du jour, vous trouverez une courte introduction sur PHP et surtout sur le fonctionnement global de celui-ci. Le tout sera agrémenté de quelques lignes sur ce qu'est la programmation et en ce qui concerne dessert, je vous laisse le découvrir.

PHP, le Web, qu'est-ce donc ?

Introduction La programmation, c'est quoi ?

PHP, le Web, qu'est-ce donc ?

Le PHP, pour PHP : Hypertext Preprocessor est un langage de programmation. Il y en a beaucoup d'autres, comme le C, le Java, l'OCaml,… mais on peut dire du PHP que c'est un langage de programmation orienté pour le Web, ou encore pour les sites internet.
Pour la petite histoire, le PHP est né de la main de Rasmus Lerdorf en 1994. Au départ très basique, il n'a été rendu public qu'en 1995 sous le nom de PHP/FI. Par la suite, le développement passa des mains de Rasmus Lerdorf à celles de deux étudiants — Zeev Suraski et Andi Gutmans — qui fondèrent par la suite Zend Technologies pour promouvoir PHP. Si vous développez des applications avec PHP, vous entendrez sans aucun doute parler de Zend, que ce soit via leur framework, leur environnement de développement ou encore leur serveur, respectivement Zend Framework, Zend Studio et Zend Server.

Non content d'être un langage de programmation, PHP est un langage interprété. Quand vous utilisez une application, sous Windows par exemple, vous double-cliquez sur le programme pour qu'il se lance ; le programme s'exécute alors, votre ordinateur peut directement exécuter le programme. Pour le PHP, c'est un peu différent. En effet, votre ordinateur ne comprend pas le PHP, il ne sait pas l'exécuter comme vous pouvez le voir à la figure 1.1. Pour que le PHP soit exécuté, il faut que le fichier qui contient le code PHP soit interprété par… l'interpréteur PHP.

Concrètement, l'interpréteur, c'est quoi ? Comme je l'ai dit, votre ordinateur ne peut pas exécuter de code PHP comme il exécute une application classique. Pour que votre code prenne vie, l'interpréteur — qui lui est une application exécutable — va le lire, le traduire en un dialecte intermédiaire — l'Opcode — et finalement demander à votre ordinateur d'exécuter les instructions correspondant à l'Opcode généré comme c'est illustré à la figure 1.2. Vous entendrez à nouveau parler d'Opcode dans la suite de ce cours, ne vous arrêtez donc pas là-dessus pour le moment, sachez juste que ça existe.

Image utilisateur

Figure 1.1 — Sans interpréteur, le code ne peut être exécuté

Image utilisateur

Figure 1.2 — Avec l'interpréteur, tout va bien !

Le Web, comment est-ce que ça fonctionne ?

Avant tout, qu'est-ce que le Web ? Le Web — ou World Wide Web de son nom complet —, c'est le système qui vous permet de lire ce cours, qui vous permet d'accéder à du contenu, des pages d'un site, généralement accessible via Internet. Le Web est souvent confondu avec Internet, mais Internet ne se résumé définitivement pas au Web : bon nombre d'autres systèmes, applications et protocoles utilisent Internet. Il est d'ailleurs assez triste que certaines entités — des entreprises par exemple — se basent sur cette confusion pour faire des offres plus attractives en nous martelant de slogans similaires à « Internet illimité » alors qu'en fait, ils ne nous offrent qu'un accès au Web, et encore, pas toujours très « illimité »… Mais je m'égare, ça n'est pas le sujet.

Le Web fonctionne sur un modèle dans lequel se trouvent deux intervenants : le client et le serveur. Vous pouvez parfaitement faire une comparaison avec un restaurant, c'est tout à fait pertinent et ça donne du bon goût. Quand vous êtes dans un restaurant, tranquillement assis, vous choisissez un plat, sifflez le serveur puis lui dites ce que vous désirez. Une fois la requête du client reçue, le serveur va faire sa popote interne pour finalement délivrer ce que vous avez commandé. Il y a donc deux messages, d'abord une requête du client vers le serveur, puis une réponse du serveur vers le client. Pour un site Web, c'est pareil. Votre navigateur — il joue le rôle de client — va envoyer une requête à un serveur — et plus exactement un serveur Web — qui y répondra après l'avoir traitée. Vous avez une illustration de ce dialogue à la figure 1.3.

Image utilisateur

Figure 1.3 — Le modèle client-serveur

Le serveur Web et l'interpréteur PHP, une histoire d'amour ?

Comme nous l'avons dit précédemment, pour que le PHP puisse vivre, il a besoin de son interpréteur. Un serveur Web n'étant pas un interpréteur PHP, ces deux éléments doivent entrer en relation à un moment donné. Mais non, malheureusement pour nos deux amis, ce n'est pas vraiment une relation amoureuse qu'ils entretiennent, ça serait plutôt une relation maître-esclave, l'esclave étant le pauvre interpréteur.
En fait, le serveur Web peut gérer différentes requête. Vous pouvez par exemple lui demander une image, une page Web statique — c'est-à-dire ne contenant par exemple que du XHTMLet du CSS —, une page Web dynamique — contenant du PHP, du Python, etc. —, un document PDF et bien d'autres choses encore. Lorsque vous lui demanderez ce qui nous intéresse, une page Web contenant du PHP, le serveur Web le saura, il déterminera le type de contenu demandé à partir de la requête. Lorsque le serveur Web recevra une requête faisant intervenir PHP, il appellera l'interpréteur en lui donnant le fichier à interpréter et attendra la réponse de celui-ci qui sera ensuite transmise au client. Tout le monde est ainsi content à la figure 1.4 : le client a reçu ce qu'il attendait, le serveur a délivré le contenu, et l'interpréteur a été sauvagement abusé par le serveur. ^^

Image utilisateur

Figure 1.4 — Les interactions entre le client, le serveur et l'interpréteur

De ces interactions, nous pouvons déduire quelque chose qui a son importance : le PHP s'exécute du côté du serveur, il ne travaille que quand le serveur doit répondre à la requête, et jamais quand le serveur a déjà répondu à la requête. Si vous désirez afficher une horloge sur votre site Web, horloge qui se mettrait à jour toutes les secondes, serait-ce possible avec PHP ? Non, car l'horloge ne serait visible par le visiteur — l'utilisateur du navigateur Web — que quand le serveur a déjà envoyé la réponse, PHP ne pourrait donc plus intervenir. Pour réaliser cela, et plus généralement pour toutes les interactions entre le visiteur et une page Web déjà envoyée à celui-ci, on passera par un autre langage, le Javascript.

Après ce petit tour d'horizon de ce qu'est le PHP, du fonctionnement du Web et de l'interaction entre le serveur Web et l'interpréteur PHP, passons à ce dont nous aurons besoin pour travailler. Que chacun d'entre vous possède un serveur dédié en antarctique est un peu utopique, nous allons donc installer le serveur Web et PHP sur votre ordinateur. Oui, ça fonctionne, ne vous en faites pas.

Comme serveur Web, nous allons choisir le plus répandu et connu actuellement : Apache HTTP Server ou encore Apache HTTPD. Ce logiciel, ce serveur Web est édité par l'organisation à but non-lucratif éponyme, l'Apache Software Foundation. Cette organisation est également connue pour d'autres projets ainsi que pour leur licence, la licence Apache qui est libre et open-source. Mais avant de procéder à l'installation de ces logiciels, prenons le temps de faire connaissance avec la programmation.


Introduction La programmation, c'est quoi ?

La programmation, c'est quoi ?

PHP, le Web, qu'est-ce donc ? Pour apprendre, quelle attitude adopter ?

La programmation, c'est quoi ?

La programmation, tantôt qualifiée de mystique, tantôt qualifiée d'incroyablement compliquée, qu'est-ce donc vraiment ? Pour ma part, la programmation, c'est le quotidien. Non pas parce que j'ai le nez collé à mon PC huit heures par jour, mais bien parce que de la programmation, vous en faites au quotidien. Prenons un exemple qui devrait parler à tout le monde : la conduite d'une voiture. Avec une voiture, vous pouvez effectuer quelques opérations de bases, notamment :

Il y a d'autres opérations, mais celles-ci suffiront pour l'exemple. Bien heureux dans votre voiture, vous arrivez au boulot, à l'école ou ailleurs si vous le désirez, dans tous les cas l'heure de se garer est arrivée. Par chance, vous trouvez une petite place entre deux voitures comme illustré à la figure 1.5.

Image utilisateur

Figure 1.5 — Une jolie place où se garer
Vous voilà face à un problème, comment rentrer élégamment dans cet emplacement ? Résoudre un problème, y apporter une solution, c'est de la programmation. Et résoudre ce genre de problème, vous le faites tous les jours consciemment ou pas. C'est pour cela que j'aime dire que la programmation, c'est notre quotidien à tous. Pour résoudre ce problème, qu'avons-nous à notre disposition ? À vrai dire, pas grand chose, mais c'est amplement suffisant. Nous disposons en effet de quelques opérations de bases nous permettant de nous déplacer et nous possédons également quelques informations sur le problème, la principale étant que nous avons effectivement la place pour nous garer. Le tout est donc de parvenir à utiliser, à manipuler nos quelques opérations pour résoudre le problème. Le but n'étant pas de faire de vous des as du volant, voici les étapes de la solution représentée à la figure 1.6 :

  1. nous avançons jusqu'à la hauteur de la voiture puis freinons ;

  2. nous tournons les roues vers la gauche ;

  3. nous avançons à l'envers, c'est-à-dire que nous reculons ;

  4. lorsque nous formons un bel angle, nous mettons les roues vers la droite ;

  5. et enfin nous freinons au bon moment pour terminer la manœuvre.

Image utilisateur

Figure 1.6 — La voiture garée !
Ce que nous avons fait ici, c'est décrire, énoncer, exprimer la solution à notre problème, et là nous sommes au cœur de ce qu'est la programmation : notre voiture nous offre certains concepts tels que l'accélération de la voiture ou son changement de direction et nous permet d'utiliser ces concepts via des opérations élémentaires telles que avancer ou tourner, ce qui nous permet d'exprimer une solution à un problème. Ces quelques opérations n'ont peut être l'air de rien, mais elles suffisent à exprimer un grand nombre de manœuvres que vous pourriez être amenés à réaliser avec une voiture. Une fois la solution exprimée, il ne reste plus qu'à la mettre en application en utilisant les pédales, volants et autres outils propre à votre voiture.

Un langage informatique, comme le PHP par exemple, fait exactement la même chose que cette voiture : il nous offre certains concepts nous permettant d'exprimer des solutions ainsi que des outils pour traduire ces solutions en code que l'interpréteur pourra faire exécuter. Il faut donc bien comprendre que la programmation n'est pas une seule et unique chose mais bien deux étapes distinctes : la résolution du problème et l'application de la solution. La résolution du problème, c'est la conception du programme, tandis que l'application de la solution, c'est son implémentation, la traduction en code donc.

Nous reviendrons plus tard sur la conception et l'implémentation, l'important c'est que vous reteniez que la programmation se déroule en deux étapes.


PHP, le Web, qu'est-ce donc ? Pour apprendre, quelle attitude adopter ?

Pour apprendre, quelle attitude adopter ?

La programmation, c'est quoi ? La boîte à outils du programmeur

Pour apprendre, quelle attitude adopter ?

Si vous décidez de poursuivre ce cours — et j'espère que vous serez nombreux dans ce cas —, quelle attitude adopter ? Comme mon introduction l'a sous-entendu, je ne suis pas ici pour faire du fast-food version programmation. Mon but, ce n'est pas de faire de vous des roxxors pgm de la prog' en 24 heures chrono mais bien d'apprendre, de comprendre. Vous devrez donc parfois être un peu patient avant de voir le fruit de vos efforts.
En ce qui concerne mes explications, je ne vais pas vous prendre pour des abrutis. Bien que nous débutions, nous ne sommes pas des bébés, nous avons la capacité de réfléchir et de nous débrouiller par nous-même. C'est pour cela qu'il m'arrivera souvent de vous lancer un « RTFM » — Read The Fucking Manual — ou la version plus délicate : cherchez par vous-même. Je ne veux pas faire de vous des assistés. Je vous aiderai, je vous guiderai, mais je ne vous donnerai pas tout tout cuit au fond du bec. Vous serez donc sans le moindre doute contraint à un moment ou à un autre de chercher par vous-même. Cette capacité, cette débrouillardise est une qualité très importante, je veux donc que vous l'utilisiez, et pour cela je ne dois évidemment pas faire de vous des professionnels de l'assistanat.

Bien sûr, il arrivera parfois que même en cherchant un certain temps, vous ne trouviez pas de solution. Dans ce cas, vous serez amenés à demander de l'aide, sur les forums du site du zéro par exemple. Si vous le faites, ou plutôt, quand vous le ferez, n'oubliez pas certaines choses.

Le titre du sujet

Imaginons que je rencontre un problème et que ma recherche ne m'a rien apporté. Je me rends dans un forum traitant du PHP et je crée un nouveau sujet.
La première chose à laquelle vous devez faire attention, c'est le titre. Il a pour but de décrire votre sujet ; ainsi, les personnes visitant le forum sauront si elles sont susceptibles de vous aider sans avoir à lire le message.

Il est donc impératif de choisir un titre qui décrit votre sujet. Si vous mettez quelque chose comme « Gros problème », « Besoin d'aide urgente », etc., on ne sait absolument pas quel est l'objet du sujet.
Petit détail plutôt amusant, certaines personnes mettent un titre du style « Problème avec PHP ». On ne peut pas dire que ça ne décrit pas le sujet, mais ne trouvez-vous pas logique que dans un forum consacré au PHP on parle de… PHP ?
C'est juste pour dire qu'il est inutile de spécifier que vous parlez de PHP.

On a vu ce qu'il ne fallait pas faire, mais comment choisir un bon titre, finalement ?
Eh bien il n'y a pas de méthode magique, il faut réfléchir. Si j'ai un problème en voulant afficher un texte, qu'est-ce que je pourrais mettre comme titre ?
Si je mets « Problème PHP », ça ne sert à rien. Par contre, un titre comme « Problème pour afficher un texte » est déjà plus explicite, non ?
Vous devez essayer de résumer l'objet du sujet en quelques mots. Si vous faites cela, vous aurez souvent un bon titre. Si vous ne parvenez pas à résumer votre sujet, mettez simplement les mots-clés qui vous apparaissent comme étant les plus pertinents.

Le contenu du sujet

Après le titre vient le contenu du sujet. Le titre est le résumé, le contenu est le corps du sujet.
La première chose qu'on doit voir dans votre sujet, c'est une formule de politesse. Eh oui : moi, quand je ne vois pas de « Bonjour » ou autre, je n'aime pas ça et je ne réponds pas au sujet. La politesse tient en quelques mots, quelques secondes de votre temps, mais beaucoup de gens la négligent. Si je viens chez vous demander du sucre de cette façon : « Donne-moi du sucre », vous allez m'en donner ? Je pense que non.
Maintenant, si je dis : « Bonjour, est-ce que vous pourriez me prêter un peu de sucre ? Merci beaucoup », j'ai déjà plus de chance de pouvoir finir mon gâteau. C'est la même chose quand vous faites un sujet dans un forum. Un brin de politesse vous assurera un accueil plus chaleureux de la part de ceux qui vous aideront.

Le contenu du sujet vient ensuite. Il est indispensable de parler français. Vous devez faire des phrases qui ont du sens, vous devez faire attention à votre orthographe (pas de SMS, pas de kikoulol attitude) et vous devez vous exprimer clairement. Parfois, les gens rédigent tellement mal leur sujet qu'on ne comprend absolument rien à la demande. Et dans ce genre de cas, c'est plutôt difficile d'aider.

Si vous devez mettre du code PHP ou autre dans votre sujet, faites-y également attention ! En effet, certains forums fournissent des outils pour rendre la lecture de celui-ci plus agréable et il est plus aisé d'apporter de l'aide quand le code est plus lisible.
Deuxième chose importante : ne mettez pas un pâté de code…
Il arrive que des gens aient un petit problème, mais la flemme de chercher un peu d'où ça vient : ils nous mettent des centaines de lignes de code. Vous pensez qu'on va les lire ? Si c'est le cas, vous rêvez.
Les visiteurs du forum ne vont pas passer deux heures à essayer de trouver d'où vient l'erreur et cinq minutes à vous répondre. C'est pourquoi vous devez extraire les parties de votre code qui sont responsables de l'erreur. Pour le moment, vous ne savez pas le faire, mais le PHP est bien conçu et il est relativement facile de trouver d'où viennent les erreurs, nous verrons ça plus tard.

Le respect

Dernière chose qui me tient à cœur : le respect envers ceux qui vous aident. Ces personnes utilisent leur temps libre pour vous aider, alors respectez-les. On ne demande pas de faire des courbettes, mais un simple « Merci » quand le problème est résolu fait tellement plaisir. Aussi, n'attendez pas qu'on vous serve la solution sur un plateau d'argent. Dans l'idéal, ceux qui vous aident ne feront que pointer la cause de l'erreur, ils vous donneront des pistes pour la corriger, mais c'est à vous de vous corriger. Ne revenez pas cinq minutes après parce que vous ne comprenez pas ce qu'ils vous disent. Cherchez par vous-mêmes à comprendre ce qu'ils vous signalent, sinon vous ne serez jamais capables de vous en sortir seuls.

Maintenant que vous savez qu'un serveur Web est nécessaire pour obtenir une page Web, que le PHP nécessite d'être interprété par l'interpréteur PHP et que vous avez une idée des interactions entre le serveur Web et l'interpréteur PHP, vous êtes presque paré. Empressez-vous de lire le prochain chapitre pour terminer votre préformation, vous serez alors fin prêt pour attaquer l'apprentissage du PHP à proprement parler !


La programmation, c'est quoi ? La boîte à outils du programmeur

La boîte à outils du programmeur

Pour apprendre, quelle attitude adopter ? L'invité surprise : l'éditeur de code

Dans ce chapitre, nous allons parler de l'installation des outils dont vous aurez besoin pour faire du PHP : nous allons équiper votre machine pour en faire un serveur Web capable de traiter du PHP. Et pour cela nous avons besoin d'installer certains outils, d'où ce chapitre. Vous connaissez déjà deux de ces outils : PHP évidemment et le serveur Web Apache. Il manque toutefois un outil pour avoir une parfaite panoplie : l'éditeur de code.

L'invité surprise : l'éditeur de code

La boîte à outils du programmeur Apache et PHP sous Windows

L'invité surprise : l'éditeur de code

Avant de se lancer dans l'installation d'Apache et PHP, présentons l'outil surprise : un bon éditeur de code. Bon, soyons clair, ce choix n'a pas grande importance actuellement. Puisque nous débutons, nous ne ferons pas vraiment de « projet », tout ce que nous ferons se limiteront à un ou deux fichier PHP. Sortir un éditeur lourd est donc pour le moment inutile. C'est pour cela qu'actuellement, au niveau de l'éditeur de code, le choix importe peu. La seule fonction vraiment indispensable à notre niveau, c'est la coloration syntaxique.

C'est outil, cette coloration, est un outil certes très basique mais ô combien utile, c'est presque l'incarnation de Chuck Norris. Petit exemple :

<?php

$toChar = function() use($collation) {
    return $collation += 42;
};
<?php

$toChar = function() use($collation) {
    return $collation += 42;
};

Ces codes ne servent à rien et sont moches mais illustrent bien l'apport de la coloration syntaxique : une plus grande lisibilité du code. En colorant les différents éléments du langages dans des couleurs différentes, il est plus aisé de s'y retrouver. Un autre avantage parfois plus difficile à percevoir de cette coloration est à sa tendance à nous faire découvrir des erreurs dans du code, exemple :

<?php

$string = 'Bonjour, il y avait l'ancien troll ici, où est-il ?';
<?php

$string = 'Bonjour, il y avait l'ancien troll ici, où est-il ?';

Ces deux codes présentent une erreur de syntaxe, et si elle passe relativement inaperçue sans coloration syntaxique, elle est presque impossible à rater avec.

Sous Windows

Pour ce système, je vous conseille notepad++, dont vous avez une illustration à la figure 2.1. Ce programme est assez léger et facile à prendre en main, mais dispose malgré tout d'un bon nombres d'outils qui vous faciliteront la vie. Je ne l'utilise plus qu'occasionnellement, mais c'est souvent vers lui que je me tourne quand je dois éditer un petit code PHP.

Image utilisateur

Figure 2.1 — Notepad++ : un éditeur de code idéal pour débuter

Sous GNU/Linux

Si vous êtes féru de la console, Vim et Emacs vous proposeront coloration syntaxique et un nombre incalculables d'outils. Ces outils sont tellement puissant qu'il est difficile de les appréhender complètement, mais s'il s'agit juste d'avoir un peu de coloration syntaxique, ça n'est pas très complexe.
Si vous préférez les interfaces graphiques, j'ai entendu beaucoup de bien de GEdit et de Kate — que vous pouvez admirer à la figure 2.2 —, respectivement pour les environnements de bureaux Gnome et KDE.

Image utilisateur

Figure 2.2 — Kate en action avec du PHP

Sous Mac OSX et les autres

N'ayant pas de Mac et n'ayant jamais vraiment touché à d'autres systèmes que Windows et GNU/Linux, je suis malheureusement incapable de vous aider pour ces système. Si vous avez des bons petits éditeurs de code facile à prendre en main pour ces systèmes, merci de m'en faire part, je les intégrerai aussitôt !

À propos de l'encodage

Avant d'aller plus loin, assurez-vous que votre éditeur de texte utilise par défaut l'encodage UTF-8 sans BOM. Ce réglage se trouve souvent dans les préférences de votre éditeur de code. Sous notepad++ par exemple, vous devez vous rendre dans l'onglet « Paramétrage », cliquer sur « Préférences » et vous rendre dans l'onglet « Nouveau document/dossier » de la fenêtre qui vient de s'ouvrir. Vous pouvez alors choisir UTF-8 sans BOM comme encodage. Nous verrons par la suite pourquoi cela est important. Si jamais vous ne trouvez pas UTF-8 sans BOM, mettez simplement de l'UTF-8.

Maintenant que nous sommes équipés pour l'édition de codes, passons à l'installation d'Apache et PHP !


La boîte à outils du programmeur Apache et PHP sous Windows

Apache et PHP sous Windows

L'invité surprise : l'éditeur de code Apache et PHP sous GNU/Linux, Mac OS X et les autres

Apache et PHP sous Windows

Rendez vous sur le site de Apache HTTPD, vous y trouverez un lien « from a mirror » dans le menu de gauche près de « download ». Actuellement, la page sur laquelle vous arrivez propose 4 releases :

Cela peut bien évidemment évoluer, prenez simplement la version la plus récente qui ne soit ni en alpha, ni en bêta. Dans mon cas, je prendrai donc la release 2.2.16. Vous avez alors le choix entre diverses possibilité telles que Unix Source, Win32 Source ou encore Win32 Binary. Puisque vous êtes sous Windows, prenez un des Win32 Binary, le Win32 Binary including OpenSSL. Une fois le fichier téléchargé, exécutez-le.

Au début de l'installation, il vous sera demandé d'accepter la licence, faites donc cela. Une fois arrivé à l'écran de sélection du domaines et de certaines autre informations, remplissez comme indiqué dans la figure 2.3.

Image utilisateur

Figure 2.3 — Informations sur le domaine, le nom du serveur et autres
Par la suite, vous aurez le choix entre deux types d'installation : Typical et Custom. Comme nous ne sommes pas là pour apprendre à configurer un serveur Web aux petits oignons, nous choisirons l'option Typical comme indiqué à la figure 2.4.

Image utilisateur

Figure 2.4 — Choix du type d'installation
L'installation à proprement parler va maintenant commencer, cela ne devrait pas prendre très longtemps, quelques minutes tout au plus. Une fois celle-ci terminée, l'assistant d'installation prendra congé, il vous faudra alors regarder dans la barre des tâches de Windows. Vous devriez une petite icône toute petite toute mignonne comme indiqué à la figure 2.5.

Image utilisateur

Figure 2.5 — L'icône d'Apache dans la barre des tâches
Ouvrez maintenant votre navigateur favori et rendez vous à l'adresse http://localhost, vous devriez obtenir quelque chose de proche de la figure 2.6. Le texte pourrait éventuellement varier, l'important c'est que vous n'ayez pas une erreur disant que l'hôte n'existe pas, qu'il est injoignable ou je ne sais quoi.

Image utilisateur

Figure 2.6 — Apache fonctionne !

Qu'est-ce que « localhost » ?
Souvenez-vous qu'Apache est un serveur Web. Pour le contacter, nous devons donc passer par le Web et plus exactement par une adresse Web, une url. De la même façon que l'url http://siteduzero.com vous met en contact avec le serveur Web du site du zéro, http://localhost nous met en contact avec le serveur Web qui est installé sur votre machine.

Si par malheur cela ne fonctionne pas, pas de panique, nous allons tenter d'y remédier. Pour se faire, il va falloir se rendre dans le gestionnaire de services de Windows. Appuyez simultanément sur les touches Windows et R, cela provoquera l'ouverture de la fenêtre de la figure 2.7. Entrez la valeur « services.msc » et validez, vous découvrirez alors le gestionnaire de services illustrés dans la figure 2.8.

Image utilisateur

Figure 2.7 — Outil permettant d'exécuter un programme

Image utilisateur

Figure 2.8 — le gestionnaire de services de Windows
Dans la liste de services, vous devriez trouver le service d'Apache HTTPD. S'il ne s'y trouve pas, c'est que l'installation ne s'est pas déroulée correctement ou que vous n'avez pas installé Apache HTTPD en tant que services. Dans les deux cas, tentez de réinstaller le serveur. Si vous le trouvez et qu'il n'est pas dans l'état « Démarré », faites un clic droit dessus et vous pourrez le démarrer.

Au tour de PHP

PHP n'est pas plus compliqué à installer qu'Apache, commencez donc par vous rendre sur la page de téléchargement de PHP pour Windows. Vous trouverez diverses versions de PHP, prenez la plus récente. Pour ma part, ce sera donc PHP 5.3.3. Parmi les 4 solutions proposée pour votre version de PHP, cherchez après la « VC9 x86 Thread Safe » et téléchargez l'« installer ». Une fois ce téléchargement terminé, exécuter le fichier fraichement acquis. Tout comme pour Apache, vous serez invité à accepter la licence, faites donc cela. Par la suite vous arrivez à l'écran illustré par la figure 2.9, cochez la case « Apache 2.2.x Module », ça permettra à votre serveur Web d'utiliser l'interpréteur PHP.

Image utilisateur

Figure 2.9 — Installons PHP avec Apache
Poursuivez ensuite l'installation, vous serez rapidement à un écran vous invitant à choisir le chemin d'accès à la configuration d'Apache – Select Apache Configuration Directory. Cliquez sur le bouton « browse » pour choisir ledit dossier, par défaut il se trouve dans C:\Program Files\Apache Software Foundation\Apache(version)\ comme indiqué à la figure 2.10. Il ne vous reste plus qu'à sélectionner le dossier conf et à valider.

Image utilisateur

Figure 2.10 — Trouver le dossier de configuration d'Apache

Alors que les écrans continuent à défiler, arrêtez vous à celui intitulé « Choose items to install ». Dans cet écran, vous pouvez voir quels composants PHP installera. Déroulez le menu « extension » et activez Multibyte String et PostgreSQL si ce n'est déjà fait, comme illustré à la figure 2.11. Dérouler ensuite le menu « PDO » et activez également le PostgreSQL qui s'y trouve.

Image utilisateur

Figure 2.11 — Activons des extensions de PHP
Vous n'avez plus qu'à valider tout ça, l'installation sera alors faites. Félicitation, tout devrait être installé. :)
Pour vérifier cela, rendez-vous dans le dossier d'installation d'Apache que vous avez choisi précédemment et créer un fichier test.php dans le dossier htdocs. N'oubliez pas d'utiliser votre éditeur de code adoré, placez-y le contenu suivant et sauvegardez :

<?php

phpinfo();

Il est temps de reprendre votre navigateur et de saisir l'adresse suivante : http://localhost/test.php. Vous devriez maintenant pouvoir vous émerveiller devant quelque chose de similaire à la figure 2.12.

Image utilisateur

Figure 2.12 — PHP fonctionne

Museler Apache

Il ne reste plus qu'un détail à régler pour que votre installation soit prête à servir. Actuellement, vous le constaterez si vous redémarrer votre PC ou changer d'utilisateur, Apache démarre automatiquement. Je suppose que comme moi, vous avez une vie, que donc vous ne passez pas tout votre temps à faire du PHP, il est donc inutile que Apache soit tout le temps lancé. Pour éviter cela, il y a deux choses à faire.

Pour commencer, retourner dans le gestionnaire de services de Windows comme expliqué précédemment et trouvez-y la ligne d'Apache. Faites un clic droit dessus et cliquez sur « Propriété », la fenêtre de la figure 2.13 s'ouvrira alors. De cette fenêtre, vous pourrez changer le mode de démarrage d'Apache de « Automatique » à « Manuel ».

Image utilisateur

Figure 2.13 — Changer le mode démarrage d'Apache.
Grâce à cela, Apache ne démarrera plus de lui-même, vous devrez le démarrer vous-même. Toutefois, vous remarquerez que l'icône dans la barre des tâches persiste. Ce n'est pas mystérieux, c'est simplement que cette icône ne représente pas le se serveur en lui-même mais une application qui permet d'arrêter, de démarrer et de redémarrer le serveur. Cette application nous étant inutile, nous allons également empêcher son exécution automatique.

Pour se faire, appuyez à nouveau simultanément sur les touches Windows et R, mais cette fois saisissez la valeur « msconfig ». Une fois cela validé, une nouvelle fenêtre ilustrée par la figure 2.14 s'ouvrira, cliquez sur l'onglet « Démarrage ». Vous trouvez dans la liste juste en dessous une ligne faisant référence à Apache, décochez la, cliquez sur « Appliquer » et finalement « Ok ». Windows vous invitera à redémarrer le système, il n'est pas nécessaire de le faire.

Image utilisateur

Figure 2.14 — Empêcher le démarrage de l'application Monitor Apache Servers
Apache est à présent définitivement calmé, il ne viendra plus vous embêter si vous ne le sollicitez pas. Pour démarrer Apache, deux solutions s'offre à vous. Vous connaissez la première, il suffit de passer par le gestionnaire de services. La seconde fait intervenir l'invite de commande, il se trouve dans la liste des programmes installés. Dans cette invite, il vous suffira d'entrer la commande net start apache2.2 pour démarrer Apache, comme illustré dans la figure 2.15. Il se peut que vous deviez entrer autre chose que apache2.2, vous trouverez le nom exact du service dans le gestionnaire de services. Pour arrêter le service, rien de bien compliqué, il suffira d'utiliser la commande net stop au lieu de net start.

Image utilisateur

Figure 2.15 — Démarrage d'Apache via l'invite de commande


L'invité surprise : l'éditeur de code Apache et PHP sous GNU/Linux, Mac OS X et les autres

Apache et PHP sous GNU/Linux, Mac OS X et les autres

Apache et PHP sous Windows Configurer pour mieux régner

Apache et PHP sous GNU/Linux, Mac OS X et les autres

Installation sous GNU/Linux

Pour l'exemple, j'ai choisi une distribution assez en vogue en ce moment : Ubuntu. La procédure d'installation ne devrait que peu voire pas du tout varier en fonction de votre distribution, utilisez votre gestionnaire de paquet favori et tout devrait bien se passer. Si malgré tout vous éprouvez des difficultés, référez vous à la documentation de votre distribution ou encore à des forums d'entraide. Vous pouvez également me transmettre certaines étrangetés ou certains problèmes relatifs à une distribution en particulier, je les signalerai dans ce cours.

Tout comme sous Windows, la première chose à faire est d'installer le serveur Apache. Rien de bien sorcier, le paquet apache2 est là pour cela :

$ sudo apt-get install apache2

Nous allons de suite vérifier que Apache est installé, démarré et fonctionnel :

$ service apache2 status 
# devrait afficher Apache is running (pid xyz)
# si ce n'est pas le cas, faites un sudo service apache2 start pour démarrer Apache
$ wget http://locahost
$ more index.html 
# devrait afficher <html><body><h1>it works…

Qu'est-ce que « localhost » ?
Souvenez-vous qu'Apache est un serveur Web. Pour le contacter, nous devons donc passer par le Web et plus exactement par une adresse Web, une url. De la même façon que l'url http://siteduzero.com vous met en contact avec le serveur Web du site du zéro, http://localhost nous met en contact avec le serveur Web qui est installé sur votre machine.

Avant d'installer PHP, il va falloir vérifier la version de celui-ci. En effet, la version nécessaire, la 5.3, est relativement récente, il est donc possible que pour certaines distributions, le paquet fourni ne soit pas adapté. Vérifions cela :

$ sudo apt-cache show php5
# La partie version devrait donner la valeur 5.3 ou supérieure

Si la version de PHP est correcte, parfait, installez le paquet. Si malheureusement ça n'est pas le cas, deux solutions s'ouvrent à vous. La première est de chercher si un gentil contributeur n'a pas créé un dépôt ou un paquet spécifique à PHP 5.3 ou supérieur, auquel cas il vous suffira de changer de dépôt ou de télécharger directement le paquet. Si vous ne trouvez aucun dépôt ou paquet adéquat, la seconde solution sera de compiler PHP.

Commençons par récupérer le code source, vous le trouverez à cette adresse. Prenez la dernière version, le code source est fourni compressé avec Bzip2 ou Gzip, prenez ce que vous préférez, j'ai choisi le Gzip. Reste ensuite à déplacer l'archivre, l'extraire, configurer l'installation et finalement procéder à l'installation.

$ sudo cp /home/cedric/Téléchargements/php-5.3.3.tar.gz /usr/local/src
$ cd /usr/local/src
$ sudo tar -xvzf php-5.3.3.tar.gz
$ cd php-5.3.3.tar.gz
$ ./configure --with-apxs2=/usr/bin/apxs2 --with-gettext --enable-mbstring --with-pdo-pgsql --with-pgsql
$ sudo make
$ sudo make install

Si lors de l'installation vous rencontrez une erreur à cause d'apxs2 ou de la libxml2, il vous faudra sans doute installer deux paquets supplémentaires :

# le paquet à installer si vous avez un problème avec apxs2
$ sudo apt-get install apache2-threaded-dev
# le paquet à installer si vous avez un problème avec libxml2
$ sudo apt-get install libxml2-dev

Si malgré tout vous avez un problème avec apxs2, peut-être que le chemin d'accès est incorrect. Dans ce cas remplacez simplement
/usr/bin/apxs2 par le chemin d'accès vers apxs2, vous devriez le trouver aisément.

Une fois PHP installé, reste à tester cela. Mais avant, n'oubliez pas de relancer le serveur Apache via un $ sudo service apache2 restart . Pour procéder au test, nous allons créer un fichier PHP nommé test.php. Pour ma part, je dois créer ce fichier dans le dossier /var/www. Si ça n'est pas le cas pour vous, chercher le fichier httpd.conf qui se trouve dans le dossier conf du dossier d'installation d'Apache, vous y trouverez une ligne définissant le « DocumentRoot », c'est le dossier en question. Dans ce fichier, placez le contenu suivant :

<?php

phpinfo();

Nous pouvons dès à présent vérifier que cela fonctionne :

$ wget http://localhost/test.php
$ cat test.php | grep 'PHP Version'
# devrait afficher <a href="http://www.php.net/">…<h1 class="p">PHP Version 5.3.2-1ubuntu4.2</h1>

Tout comme sous Windows, il peut être intéressant de contrôler quand Apache démarre. Je vous laisse vous référer à la documentation de votre distribution pour empêcher le démarrage du service. Pour démarrer ou arrêter Apache, vous aurez juste à utiliser la commande service avec les arguments start ou stop. L'installation est à présent terminée, félicitations !

Installation sous Mac OSX et d'autres systèmes

N'ayant pas de Mac et n'ayant jamais vraiment touché à d'autres systèmes que Windows et GNU/Linux, je suis malheureusement incapable de vous aider pour l'installation. Si vous avez des connaissances sur ces systèmes ou des articles traitant de l'installation de ces logiciels sur ces systèmes, merci de m'en faire part, je les intègrerai aussi vite que possible.


Apache et PHP sous Windows Configurer pour mieux régner

Configurer pour mieux régner

Apache et PHP sous GNU/Linux, Mac OS X et les autres Premiers pas…

Configurer pour mieux régner

Avant d'utiliser nos outils fraîchement installés, il est nécessaire les configurer. Je vous rassure tout de suite, nous n'allons pas — pour le moment du moins — configurer aux petits oignons les preux PHP et Apache. Mais malgré tout, certaines choses doivent être faites.

Configuration de PHP

La configuration de PHP est centralisée dans un fichier, le fameux php.ini. C'est un fichier assez simple qui fait correspondre des clés à des valeurs. Il y a par exemple une clé pour des identifiants par défaut pour des connexions, et les valeurs associées à ces identifiants.

Ce que nous allons faire de suite, c'est configurer PHP pour qu'il soit utilisable dans de bonnes conditions pour l'apprentissage. La première chose à faire, c'est de localiser le fichier de configuration. cette étape est relativement facile, la réponse se trouve dans les lignes précédentes, dans le fichier de test que nous avons créé. reprenez donc votre butineur favori et rendez vous à l'adresse http://localhost/test.php. Dans la page reçue, faites une recherche pour « Loaded Configuration File », vous aurez le chemin d'accès au fichier de configuration juste à côté.

Ouvrez ce fichier et cherchez-y trois lignes commençant respectivement par :

Je dis bien des ligne qui commencent par, s'il y a un ; devant, ce ne sont pas les bonnes lignes. Sur chacune de ces lignes vous retrouvez le principe de clé et de valeur, la syntaxe étant <clé> = <valeur>. Nous allons modifier la valeur de ces trois clés. Mettez ceci comme valeur :

error_reporting = E_ALL | E_STRICT
display_errors = On
date.timezone = 'Europe/Brussels'

Il est à noter que pour la dernière clé, la valeur dépend de votre position géographique. Vous pouvez trouver la valeur la plus adéquate sur cette page de la documentation PHP. Moi par exemple, j'habite en Europe, je clique donc sur le lien correspondant et la ville la plus proche de mon lieu de résidence est Bruxelles, je prends donc la valeur Europe/Brussels, le tout entouré d'apostrophe.

Je vous expliquerai bien évidemment par la suite pourquoi nous avons fait cela.

Configuration d'Apache

Tout comme PHP, Apache est configuré au moyen d'un fichier, le httpd.conf. Ce fichier se trouve dans le dossier conf du dossier d'installation d'Apache. La syntaxe n'est pas la même que celle du php.ini, mais elle n'est pas plus compliquée. Ouvrez ce httpd.conf et cherchez la ligne définissant le DocumentRoot. Ce DocumentRoot est l'emplacement dans lequel Apache ira chercher les fichiers qui lui sont demandés. Prenons un exemple : si je me rends à l'adresse http://localhost/test.php, je contacte le serveur Web à l'adresse http://localhost et lui demande le fichier test.php. Ce fichier, où Apache va-t-il aller le chercher ? Dans le DocumentRoot. Vous pouvez testez la chose : supprimer ou renommer le fichier test.php que vous avez créé après l'installation d'Apache et vous constaterez que l'url http://localhost/test.php vous mène à une erreur.

En fonction de votre système d'exploitation — typiquement Windows —, il se peut que le DocumentRoot soit dans un dossier qui nécessite des privilèges d'administrateur, il vous faudrait donc toujours être administrateur dès que vous voudriez créer un nouveau fichier ou en modifier un. Pour éviter cela, nous allons modifier ce DocumentRoot. Sur la machine où je me trouve, le DocumentRoot est C:\Program Files\Apache Software Foundation\Apache2.2\htdocs, je vais changer pour C:\www par exemple, ça n'a pas vraiment d'importance du moment que c'est un dossier dans lequel vous pouvez créer et modifier des fichiers.

Reste une dernière modification à effectuer, chercher dans le fichier la ligne <Directory "DocumentRoot">. Pensez évidemment à remplacer DocumentRoot par l'ancienne valeur, dans mon cas je dois donc chercher <Directory "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs">. Dans cette ligne, nous allons modifier le chemin d'accès puisque nous avons changé le DocumentRoot.

En résumé, au début nous avions par exemple ceci :

DocumentRoot "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs"
<Directory "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs">

Et au final nous avons par exemple cela :

DocumentRoot "C:\www"
<Directory "C:\www">

Bon eh bien voilà, vous avez installé votre propre serveur Web ainsi que PHP, sans oublier un éditeur de code. Vous avez tout ce qu'il faut, vous êtes fin prêt pour attaquer l'apprentissage du PHP.

Un jour peut-être quelqu'un vous dira que vous êtes fou d'avoir installé ces logiciels de cette façon. En effet, il faut savoir que des packs tout prêt existent, packs qui installent PHP, Apache et d'autres logiciels tous seuls comme des grands. Si j'ai choisi de ne pas utiliser ces packs, c'est d'abord parce qu'aucun ne contenait tous les logiciels dont j'avais besoin dans la bonne version et ensuite parce que je trouve qu'il est bon d'avoir une petite idée de comment on installe — même de façon assez basique — ces différents logiciels.


Apache et PHP sous GNU/Linux, Mac OS X et les autres Premiers pas…

Premiers pas…

Configurer pour mieux régner Les balises PHP

Après ces longues minutes passées à l'installation, au testage et à la configuration des différents logiciels, je vous sens désireux d'entamer le réel apprentissage. C'est pour cela que sans plus attendre, je vous propose de voir ce que sont les balises PHP et les commentaires et quelle est leur utilité.

Les balises PHP

Premiers pas… Les commentaires

Les balises PHP

Prenons un fichier PHP, toute mignon, tout petit, tout doux, celui du chapitre précédent :

<?php

phpinfo();

Je vais le réécrire sous une autre forme, ce sera plus simple pour mon explication :

<?php

phpinfo();

?>

Comme nous l'avons vu, PHP est un langage interprété, l'interpréteur va donc lire ce fichier et le traiter. Petit problème : un fichier PHP peut contenir du PHP, mais peut également contenir d'autres choses, du texte, du HTML, du CSS, du Javascript et je ne sais quoi d'autre. Ceci est un contenu de fichier PHP parfaitement valide :

Bonjour, robert.
<?php

phpinfo();

?>
Au revoir, Paul le pêcheur.

Bien évidemment, l'interpréteur PHP ne comprends pas ces textes, ils ne signifient rien pour lui, puisque ce n'est pas une syntaxe PHP licite.

Pire encore, si l'interpréteur essayait de faire quelque chose de ce texte, il vous enverrait une jolie erreur, votre code PHP ne servirait donc à rien. C'est pour cela que les balises PHP sont si importantes, elles vont indiquer à l'interpréteur ce qui est du code PHP et qu'il doit donc traiter et ce qui n'en est pas. Si vous voulez signaler le début d'un code PHP, vous devrez donc le lui indiquer via la balise ouvrante – <?php – tandis que si vous voulez lui signaler la fin d'un code PHP, vous utiliserez la balise fermante – ?>.

Comme vous l'avez sans doute remarqué, le code du chapitre précédent ne comporte pas de balise fermante, mais il fonctionne pourtant. Le comportement de l'interpréteur est donc très simple : « quand je rencontre la balise ouvrante, je commence à traiter le code jusqu'à ce que je rencontre la balise fermante, ou que j'ai lu tout le code ». À ce propos, je vous recommande justement de ne pas mettre de balise fermante, sauf si c'est nécessaire, comme dans l'exemple 3. Il y a des éléments incompréhensibles pour l'interpréteur avant et après le code PHP, il est donc nécessaire de mettre les deux balises. Cette recommandation vous sera expliquée plus tard.

Au cours de votre apprentissage, de votre parcours PHPiens, vous rencontriez ces paires de balises :

Ces paires de balises ont été ou sont encore malheureusement licite. Mais à terme, elles ne le seront plus, vous ne devez donc en aucun cas les utiliser. Ce sont de vieilles pratiques sujettes à disparation qui peuvent déjà être inutilisable en fonction de la configuration de PHP.

Parmi les exemples ci-dessus, vous connaissez maintenant le rôle de chaque élément mis à part celui-ci : phpinfo();. Nous verrons ce que c'est par la suite, promis.

Pour le plaisir, je vous propose un mini TP : écrivez moi un contenu PHP licite avec des éléments qui ne sont pas du PHP.

<?php

phpinfo();

?>
Je parie que vous vous êtes cassé la tête à chercher un truc complexe…
<?php

phpinfo();

?>
alors que c'est vraiment tout bête. :)
<?php

phpinfo();

Tout élément qui n'est pas du PHP est exclu des balises ouvrantes et fermantes, c'est donc un contenu PHP licite.


Premiers pas… Les commentaires

Les commentaires

Les balises PHP Les variables, le cœur du PHP

Les commentaires

Maintenant que vous connaissez les balises qui servent à délimiter le code PHP, nous allons voir un autre élément très important : les commentaires.
Comme tous les langages, le PHP permet de faire des commentaires, c'est-à-dire des éléments entre les balises PHP qui ne seront pas interprété. Comme ce n'est peut-être pas clair, nous allons reprendre le code d'exemple du chapitre précédent et lui apporter une petite modification :

<?php

//phpinfo();

Mettez cela dans votre fichier test.php et rendez vous à l'adresse que vous connaissez maintenant bien, que se passe-t-il devant vos yeux ébahis ? En un mot : rien. Eh oui, j'ai sournoisement glissé un commentaire dans ce code, l'élément phpinfo() n'a donc pas été interprété, et comme c'est lui qui était à l'origine de ce charmant tableau, il ne reste que du vide.

Vous l'aurez donc deviné : tout ce qui suit deux slashes (//) est considéré par l'interpréteur PHP comme du commentaire ; l'interpréteur PHP n'interprète pas ce qui est mis en commentaire, il l'ignore.

Quel intérêt, alors ?

Pour l'interpréteur, il n'y en a aucun, il se fiche éperdument de vos commentaires. Mais pour vous, développeurs, les commentaires sont vitaux. Pour le moment, vos scripts sont ridiculement simples et minuscules. Mais par la suite, quand vous commencerez à faire des scripts autrement plus longs et complexes, les commentaires deviendront indispensables pour que vous, ou une personne tierce, puissiez vous y retrouver dans le code.

Imaginez que vous fassiez un très long code, très complexe et faisant intervenir de nombreux éléments. Quelques mois plus tard, pour une raison ou pour une autre, vous devez le modifier. Si vous n'avez pas mis de commentaires, vous allez avoir du mal à retrouver vos marques, et vous perdrez du temps. Vous pourriez même ne rien comprendre du tout.

Mais attention, il ne faut pas non plus tomber dans l'excès inverse. En effet, on voit parfois des scripts dans lesquels chaque ligne est commentée. Éventuellement, il est possible de trouver ça joli, mais ce n'est pas le but des commentaires, ils ne sont pas faits pour traduire votre script en français !
Ils sont là pour vous aider à vous retrouver dans votre code. Si vous commencez à mettre un commentaire pour dire que vous faites une addition, ça ne sert plus à rien. Vous devez donc faire attention à ne pas en abuser, utilisez-les avec parcimonie, quand vous devez signaler quelque chose de plus général. Si par exemple vous utilisez la méthode de Mr. Patate, il est très utile de mettre un petit commentaire disant que le code qui suit est une implémentation de la méthode de Mr. Patate

Reprenons le code précédent et modifions-le à nouveau :

<?php

//phpinfo();
phpinfo();

D'après vous, que va-t-il se passer ?
Va-t-on voir deux fois le grand tableau ? Une fois ? Ou ne verra-t-on rien du tout ?
La réponse est : on verra une fois le grand tableau.
Pourquoi ? La réponse est simple. J'ai dit que les // servaient à indiquer un commentaire. Seulement, le commentaire n'est « effectif » que sur la ligne ou se trouvent les //.
Le premier phpinfo(); est donc ignoré, car il suit les //, mais comme le second est sur une autre ligne, ce n'est pas un commentaire et il génère un grand tableau.
Vous pouvez vous amuser à mettre le second phpinfo(); sur la même ligne que le premier, les deux seront alors des commentaires et vous verrez une page blanche.

Vous savez donc faire un commentaire sur une ligne, mais imaginons que vous vouliez en faire sur plusieurs. Je reprends le code précédent, et je veux mettre les deux phpinfo(); en commentaire mais en les laissant sur deux lignes différentes.
Le code ressemblera donc à ceci :

<?php

//phpinfo();
//phpinfo();

Mais vous en conviendrez : si on a beaucoup de lignes à commenter, ça deviendra vite lourd de mettre des // ; si pour une raison ou pour une autre vous vouliez commenter ou décommenter un gros bloc de code, on perdrait beaucoup de temps à taper ou effacer tous les //.

C'est pour cela qu'il existe une seconde méthode pour mettre du texte en commentaire. Mieux qu'un long discours : un bout de code.

<?php

/*
phpinfo();
phpinfo();
*/

Testez ce code. Que se passe-t-il ? À nouveau, vous vous retrouvez face à une page toute blanche.
Vous l'aurez donc compris : tout ce qui se trouve entre /* et */ est considéré comme un commentaire. Attention, toutefois ! Le commentaire commence au premier /* et se termine au premier */.

De nouveau, un bout de code :

<?php

/*
/*
phpinfo();
*/
phpinfo();
*/

Si vous testez ce code, vous allez voir quelque chose de nouveau et d'inattendu : une erreur de PHP !
Si vous avez bien compris que le commentaire commence au premier /* et se termine au premier */, vous devriez pourvoir m'expliquer pourquoi.
Quand l'interpréteur PHP interprète votre code, il trouve un /* et se dit : « Un commentaire débute, j'ignore tout jusqu'à ce que je trouve un */ » ; il continue de lire votre code et rencontre ce fameux */. Juste après cela, il lit phpinfo();, qui est une instruction valide : pas de problème, la lecture continue. Maintenant, il arrive à la dernière ligne, celle qui contient le second */. Vous savez que ça indique la fin d'un commentaire sur plusieurs lignes, seulement, l'interpréteur lui, n'a pas trouvé d'ouverture pour ce commentaire multi-lignes. Il se retrouve donc en face d'un texte qu'il doit interpréter, seulement */ ne veut rien dire pour lui. L'interpréteur renvoie donc une erreur stipulant qu'il ne comprend pas votre script et le termine.

Si vous utilisez un éditeur de texte avec coloration syntaxique, comme je vous l'ai conseillé dans le chapitre précédent, vous ne devriez jamais faire d'erreur de commentaires. En effet, ces derniers se démarquent du reste du code, par une couleur ou par une police d'écriture différente (comme vous l'avez constaté dans les codes que je vous ai donnés).

Vous voilà incollables sur les commentaires en PHP, alors faites m'en des très utiles et pertinents !

Ce trop cours chapitre se termine malheureusement déjà… mais ne négligez pour autant pas son importance. Comme je vous l'ai dit, et comme je vous le répèterai encore, c'est en ayant de solides connaissances des bases que vous pourrez construire de grandes choses.

De toute façon, ne vous en faites pas, si vous aimez les chapitres plus conséquent, je parie que le prochain saura vous faire vibrer telle la corde d'un arc venant de décocher une flèche !


Les balises PHP Les variables, le cœur du PHP

Les variables, le cœur du PHP

Les commentaires Première approche

On va s'attaquer à un chapitre fondamental. Vous allez devoir vous accrocher parce que ça va aller très vite. Vous allez être confrontés à l'un des chapitres les plus longs, vous verrez beaucoup de nouvelles choses, alors surtout n'allez pas trop vite. Prenez votre temps, et bien entendu n'hésitez pas à relire plusieurs fois si nécessaire !

Première approche

Les variables, le cœur du PHP Les variables à la sauce PHP

Première approche

Une variable… mais qu'est-ce donc ?
En mathématiques, une variable est un nom, un symbole représentant une quantité inconnue ou quelconque appartenant à un domaine donné.
En informatique, c'est à peu près pareil : une variable associe un nom à une valeur qui peut changer au cours du temps.

On va prendre un exemple. Imaginez que vous ayez un sac rempli de pommes. Le sac est le nom de la variable, et les pommes contenues dans le sac sont la valeur de la variable. Je peux sans problème remplacer les pommes qui sont dans le sac par des poires, par exemple. Le nom de la variable est toujours le même (le sac), mais la valeur de la variable a changé : au lieu de pommes, on a des poires.

Les variables représentent un concept fondamental de tout langage de programmation. C'est pour ça que j'ai appelé cette partie « Les variables, le cœur du PHP ». Vous boufferez des variables à la pelle quand vous ferez du PHP (ou tout autre langage de programmation).

Pour l'instant, vous savez que les variables sont caractérisées par leur nom et leur valeur. Seulement, il y a une troisième caractéristique qui est d'une importance capitale : le type de la valeur.

Reprenons l'exemple du sac rempli de pommes. Le sac est le nom de la variable, les pommes sont la valeur de la variable, mais quel est le type de cette valeur ? C'est simple, les pommes sont des fruits. La variable est donc de type « fruit ». Maintenant, si je mets des steaks dans mon sac, le nom de la variable reste le même, la valeur change, mais le type change également ! En effet, un steak, c'est de la viande : la variable est alors de type « viande ».
Si j'avais remplacé les pommes par des poires, la valeur de la variable aurait changé, mais pas le type ! Eh oui, les poires sont également des fruits.
Vous pouvez voir que le type de la variable correspond toujours au type de la valeur : en effet, les deux doivent correspondre.

Le seul but de cette tirade sur les abricots est d'introduire le concept de variable, de nom, de valeur et de type. Si vous ne comprenez pas ce concept, n'allez pas plus loin, relisez et essayez de comprendre à nouveau.


Les variables, le cœur du PHP Les variables à la sauce PHP

Les variables à la sauce PHP

Première approche Valeurs et opérateur d'affectation

Les variables à la sauce PHP

Chouette, on a compris le concept de variable. Seulement, faut que je vous avoue un truc : chaque langage de programmation a des règles particulières en ce qui concerne les variables. Bien entendu, ici je vais vous parler des variables avec le PHP.

Mieux qu'un long discours, on va créer notre première variable en PHP ! Tapez ce code, enregistrez-le dans un fichier PHP, ouvrez ce fichier et ouvrez grand les yeux !

<?php

$ma_variable;

Bravo, vous venez de créer votre première variable. Mais vous vous retrouvez quand même devant une page blanche, c'est tout à fait normal. On a créé une variable, on l'a déclarée, mais on ne fait rien avec.
On va analyser ensemble la ligne de code, nouvelle à vos yeux, $ma_variable;.
Le premier symbole est un $, et sert à dire à l'interpréteur PHP que c'est une variable. Quand vous manipulez une variable en PHP, vous devez toujours faire précéder le nom de la variable par un $.
Après ce premier symbole, vous avez le nom de la variable à proprement parler. Ici, le nom de la variable est ma_variable. Attention toutefois ! Vous ne pouvez pas nommer vos variables n'importe comment. Voici la règle de nommage des variables en PHP : vous pouvez utiliser n'importe quel caractère alphabétique (minuscules et majuscules comprises) ou numérique, ou bien un underscore (_). Toutefois, le nom de la variable ne peut pas commencer par un chiffre.

Voici quelques exemples de noms valides :

Et maintenant, des noms invalides :

Dans la liste des noms de variable valides, vous pouvez trouver $variable et $VARIABLE. Vous devez savoir qu'en PHP, le nom des variables est sensible à la casse, ce qui veut dire que l'interpréteur PHP fait la différence entre des lettres minuscules et majuscules. Et par conséquent, ce code crée deux variables distinctes auxquelles on peut donner des valeurs différentes :

<?php

$variable;
$VARIABLE;

Dans ce code, comme dans tous les autres, vous pouvez remarquer un symbole autre que le $ qui revient très souvent : le point-virgule (;). Ce symbole est également très important, il sert à dire à l'interpréteur PHP que l'instruction est terminée. Vous devez mettre un point-virgule à la fin de chaque instruction, sans quoi l'interpréteur PHP vous dira qu'il y a une erreur dans votre script.

Mais qu'est-ce qu'une instruction ? Une instruction est un bout de texte qui représente un ordre licite pour l'interpréteur. phpinfo(); par exemple est une instruction.

Vous vous souvenez des premiers codes ? Ils ressemblaient à ceci :

<?php

phpinfo();

Qu'est-ce qu'on retrouve ? Le fameux point-virgule qui marque la fin d'une instruction. Ici, l'instruction est phpinfo(), ça donne l'ordre à l'interpréteur de créer ce grand tableau que vous connaissez si bien maintenant.

Revenons à nos variables. Jusqu'à présent, on a vu comment créer une variable (on peut aussi appeler ça déclarer une variable). Merveilleux. Si je me souviens bien, je vous ai embêtés avec deux autres notions : la valeur et le type d'une variable. Jusqu'ici, ces deux notions ne sont pas intervenues. On a juste déclaré une variable, sans lui donner de valeur, ni de type. Mais ne me regardez pas avec ses yeux tristounets, on va voir ça dans un instant ; d'ailleurs, vous devriez faire une pause, parce qu'on va un peu compliquer les choses.


Première approche Valeurs et opérateur d'affectation

Valeurs et opérateur d'affectation

Les variables à la sauce PHP Une histoire de typage

Valeurs et opérateur d'affectation

Je vous ai dit précédemment que vous veniez de déclarer une variable : en théorie c'est vrai, en pratique, ça ne l'est pas. En effet, l'interpréteur PHP est un paresseux et vous le constaterez au travers de plusieurs choses. Donc nous déclarons notre variable, mais nous n'y mettons aucune valeur. Elle ne contient rien et est donc inutile. Je ne sais pas pour vous, mais quand j'ai quelque chose d'inutile, je le mets de côté ou je m'en débarrasse, mais je ne le laisse certainement pas trôner au milieu de mon salon. En PHP, c'est pareil : votre variable n'est pas prise en compte, elle n'est pas vraiment déclarée, elle n'existe pas. Pour qu'elle existe, il faut que nous en fassions quelque chose, il faut que nous lui donnions une valeur.

Dans notre histoire de sac, de pommes, de steaks et de poires, donner une valeur signifie qu'on remplit le sac avec quelque chose.

Grossièrement, on peut dire que c'est la même chose en PHP. Malheureusement, je me vois mal aller ouvrir mon ordinateur pour le remplir. C'est pourquoi les développeurs du PHP ont créé un outil très utile : l'opérateur d'affectation (=).
Un petit code… ça faisait longtemps :

<?php

$ma_variable = VALEUR;

N'essayez pas de tester ce code, vous aurez droit à une belle erreur. Comme d'habitude, analysons ce code. Dans la ligne qui nous intéresse, nous retrouvons un élément familier, une variable. Directement à sa droite, un nouveau symbole et ce qui représente une valeur. Ce nouveau symbole, cet opérateur d'affectation (=) nous permet de donner, d'affecter une valeur à une variable. Si la variable n'existait pas avant, c'est-à-dire que si nous ne lui avions jamais affecté de valeur auparavant, alors l'interpréteur PHP la déclare avant de faire l'affectation.

Après le nom, on vient de voir comment donner une valeur à une variable. Maintenant, je me dis que vous devez être impatients d'entendre parler des types ; accrochez vos ceintures !


Les variables à la sauce PHP Une histoire de typage

Une histoire de typage

Valeurs et opérateur d'affectation Les types primitifs

Une histoire de typage

Nom et valeur ; maintenant, on va jouer avec la troisième notion : le type. Mais pourtant, cette histoire de type est encore plus complexe qu'il n'y paraît.

Comme je l'ai dit précédemment, chaque langage a ses propres règles pour les variables. C'est vrai pour le nom des variables, et ça l'est également pour le type des variables. On peut classer les langages de programmation en fonction de la force, du niveau de leur typage. Il y a des langages fortement typés et d'autres, faiblement. Cette notion de langage fortement ou faiblement typé n'est pas régie par une règle stricte. Mais dans le cas du PHP, beaucoup de monde s'accorde pour dire qu'il est faiblement typé.

Quand vous faites votre code PHP, vous n'avez pas à vous soucier du type de vos variables. L'interpréteur PHP gère cela lui-même et modifie le type à la volée si c'est nécessaire.

Comme je suis sûr que je vous ai embrouillés, je vais vous raconter une nouvelle histoire.

Je vais chez le fermier, et je lui demande de me donner 3 kilos de beurre et 24 œufs. Est-ce que je peux additionner les deux ? Est-ce que ça a un sens d'additionner des œufs et du beurre ?
Eh bien non, ça n'a pas le moindre sens.
Par contre, si maintenant j'additionne le prix de ces deux marchandises, est-ce que ça a un sens ? Est-ce possible de faire l'addition de 4 et 6 euros ?
Oui, car c'est la même chose : des euros plus des euros donnent des euros.

On ne peut pas manipuler en une fois des choses différentes. Vous ne pouvez pas additionner un nombre et une phrase, vous pouvez additionner deux fractions. Mais en PHP, vous n'avez pas à vous soucier de ça. Imaginons qu'on a deux variables : l'une contient un nombre et l'autre contient autre chose, une chaîne de caractères, le prénom « Ève » par exemple. Si je voulais faire la somme de ces deux variables dans un langage fortement typé, j'aurais des problèmes. En PHP, aucun problème, vous pouvez le faire. L'interpréteur PHP se chargera lui-même de donner le bon type à vos variables pour que l'addition puisse se faire. Cette opération, changer le type d'une variable, est appelée transtypage ou cast.

Et vous savez quoi ? C'est pareil pour l'opérateur d'affectation !
Si je tape ça :

<?php

$ma_variable = 5;

Je déclare une variable qui a ma_variable pour nom, qui est de type int (pour integer, entier en français) et de valeur 5.
Un autre exemple :

<?php

$autre_variable = 'Eve';

Cette fois, je déclare une variable qui a autre_variable pour nom, qui est de type string (chaîne de caractères) et de valeur « Eve ».

Vous ne vous êtes pas occupés du type de vos variables. En fonction de la valeur que vous vouliez affecter à telle ou telle variable, l'interpréteur PHP donnait le bon type à la bonne variable.

Si vous avez bien suivi ce que j'ai dit, vous devriez maintenant vous dire quelque chose comme : « Euh, t'es bête ? Tu nous parles d'un truc totalement inutile, tu essaies de nous embrouiller pour rien ou quoi ?! »
Je l'admets : le typage n'est a priori pas quelque chose d'important en PHP. Et pourtant, ça nous sera extrêmement utile par la suite.

En fait, je vous mens un peu (mais vraiment très peu, c'est plus une impasse sur un détail qu'autre chose). Je vous dis qu'une variable est de type x ou y, mais pour être rigoureusement exact, je devrais dire que la variable hérite du type de la valeur qu'on lui affecte. Retenez bien cela, c'est très important.


Valeurs et opérateur d'affectation Les types primitifs

Les types primitifs

Une histoire de typage Quel est ton type ?

Les types primitifs

Après mon long discours sur le typage, que diriez-vous de découvrir les types de variables en PHP ?
La liste n'est pas exhaustive, je ne parle ici que de ce que j'appelle les types primitifs, c'est-à-dire les types de bases. Il en existe cinq.

Les entiers, alias INT (ou INTEGER)

Vous les avez déjà rencontrés juste avant, mais on va quand même reparler des entiers. Une variable de type entier contient toujours une valeur de nombre entier.
Par exemple, on trouve les entiers 1, 565, 70, etc.
Toutes les variables qui suivent sont des entiers :

<?php

$a = 5;
$b = 234;
$c = -9;

Pour déclarer un entier, il vous suffit donc de mettre un $, suivi du nom de la variable, d'un égal et enfin du nombre que vous voulez affecter à la variable. Sans oublier à la fin le sempiternel point-virgule pour monter au PHP que l'instruction est finie.

Les nombres à virgules, alias FLOAT

Les entiers, c'est cool. Mais ce n'est pas suffisant. On peut avoir besoin de nombres à virgule ; le type d'une variable contenant un nombre à virgule est float (vous pouvez aussi rencontrer des double : en pratique, tous deux sont relativement équivalents).
Alors, qui peut me créer une variable de type float contenant la valeur 5,25 ?
Facile, vous me dites ? Pas si sûr…
Quand vous écrivez un nombre à virgule, vous séparez la partie entière de la partie décimale avec une virgule. Mais manque de chance, en PHP, et dans bien des langages de programmation, voire peut-être tous, la partie entière est séparée de la partie décimale par un point (.).
Pour obtenir la variable dont je parlais, on utilisera donc ce code :

<?php

$d = 5.25;
// pour ceux qui auraient écrit « $d = 5,25; », ne vous en faites pas, on a tous fait cette erreur un jour
/*
Vous avez vu comme c'est utile les commentaires ? :p 
Quand je vous disais qu'on allait s'en servir (bon, OK, j'avoue, ici ça sert à rien)
*/
Les vrais ou faux, alias BOOLEEN

Ce type-là est un peu particulier et pas très naturel vu comme ça.
Petite histoire !
Avez-vous déjà joué au jeu « Qui est-ce ? » ? Pour ceux qui ne connaissent pas, ça se joue à deux, chaque joueur choisit la photo d'un personnage et se retrouve en face d'une vingtaine de photos. Les joueurs posent des questions chacun leur tour pour éliminer des photos, et trouver le personnage qu'a choisi l'autre. Pour les éliminer, on pose des questions simples comme « A-t-il les cheveux longs ? » ou « Est-ce une femme ? ». À ce genre de questions, il n'y a que deux réponses possibles : oui ou non.

Eh bien les booléens, c'est pareil, ça ne peut valoir que vrai (true en anglais) ou faux (false en anglais). Pour le moment, ce type de variables doit vous paraître peu intéressant, mais vous verrez par la suite que c'est LE type le plus important.

On crée deux booléens, l'un valant true (vrai) et l'autre false (faux).

<?php

$e = true; // on crée la variable $e et elle vaut true (vrai)
$f = false; // on crée la varaible $f et elle vaut false (faux)
Les chaînes de caractères, alias STRING

On s'amuse bien, mais comment on fera pour afficher quelque chose comme « Bonjour, je m'appelle `Haku » ?
Ce genre de valeur, c'est une chaîne de caractères, ou string en anglais.
Ce type de variables est un peu plus complexe que les trois précédents, mais on verra ça en temps voulu.
Pour le moment, tout ce que vous devez savoir, c'est que pour créer une chaîne de caractères, vous devez la placer entre des guillemets (") ou des apostrophes ('). Pour le moment, on va dire que les deux méthodes sont équivalentes ; ce n'est pas le cas, mais c'est trop tôt pour en parler. Je vais également vous imposer d'utiliser les apostrophes pour délimiter les chaînes de caractères, et ce sans vous expliquer pourquoi. Faites-moi confiance, ça viendra bien assez tôt.

On crée donc une chaîne de caractères qui contient « Bonjour, ça va bien ? » :

<?php

$g = 'Bonjour, ça va bien ?';

Pour les gens observateurs, un petit quelque chose devrait vous déranger. En effet, ce code-ci fonctionne sans problème.
Maintenant, que se passe-t-il si je veux mettre une apostrophe dans ma chaîne de caractères ?
Testons :

<?php

$h = 'Oh une belle apostrophe : '. Elle est belle !';

Zut alors, l'interpréteur PHP nous renvoie une erreur. Ça ne devrait pas vous étonner d'ailleurs, je viens de dire que la chaîne de caractères est délimitée par les apostrophes : par conséquent, quand l'interpréteur de PHP arrive à la première, il comprend qu'une chaîne de caractères commence ; une fois arrivé à la seconde, il comprend que la chaîne se termine et s'attend donc à trouver quelque chose de sensé, comme… un point-virgule. Seulement, il rencontre des caractères qui n'ont aucun sens pour lui : poum, pas content, il renvoie une erreur.

Comment faire pour mettre une apostrophe, alors ? Simple : il suffit de faire précéder l'apostrophe par un backslash (\). Reprenons le code :

<?php

$h = 'Oh une belle apostrophe : \'. Elle est belle !';

Plus d'erreur, magique ? Non, logique.

Dernière remarque : il ne faut pas tout mélanger.
Parfois, on voit ceci :

<?php

$ma_variable = '5';

La personne qui écrit cela veut déclarer une variable qui contient un entier, mais elle met des apostrophes (ou des guillemets) autour ; la variable est donc de type chaîne de caractères !
Comme le PHP est faiblement typé, ça ne pose pas de problème, mais s'il était fortement typé, ça provoquerait des tonnes d'erreurs. Retenez donc que les apostrophes et les guillemets servent à délimiter une chaîne de caractères, et rien d'autre.

Un type à part : NULL

null n'est pas vraiment un type de variables, ce n'est donc pas réellement un type primitif. null est une « valeur » qui indique que la variable n'a pas de valeur définie, null représente l'absence de valeur. Mais quel intérêt me direz-vous ? Pour le moment, aucun, mais par la suite nous trouverons quelques utilités à ce null.
Pour obtenir une variable de « valeur » nulle, on lui affectant la « valeur » null.
Mieux qu'un long discours, un code :

<?php

$ma_variable = null;

Une histoire de typage Quel est ton type ?

Quel est ton type ?

Les types primitifs Les opérateurs : partie I

Quel est ton type ?

Ça fait maintenant bien longtemps que je suis là à vous apprendre des notions théoriques qui ne vous ont encore servi à rien pour le moment. Vous ne savez même pas afficher une variable ou une valeur. Franchement, c'est nul, non ?

Je vais faire quelque chose que je n'aime pas, et que j'essaie de faire le moins souvent possible : je vais vous demander d'utiliser quelque chose sans le comprendre. Vous l'utiliserez tel quel, mais pas pour longtemps, je vous rassure.

Je vais vous montrer comment afficher le type d'une variable ou d'une valeur (souvenez-vous, j'ai insisté sur le fait que vous deviez bien comprendre la différence entre une valeur et une variable), ainsi que le contenu de cette variable ou de cette valeur.

Mais je vais vous montrer un nouveau code qui devrait vous rafraîchir la mémoire pour faire la distinction entre une variable et une valeur :

<?php

5;
'une chaine';
true;
/*
Ici, je déclare des valeurs
Comme je n'affecte pas ces valeurs à des variables, elles n'existent que quand l'interpréteur PHP les lit
Une fois que l'interpréteur PHP les a lues, elles n'existent plus
*/

Là, je vois que vous en avez vraiment envie : alors voilà l'instruction qui va enfin vous permettre d'afficher quelque chose.

<?php

var_dump('Une belle chaine');
$a = 5;
var_dump($a);
$b;
var_dump($b);
$b = false;
var_dump($b);
$c = 3.14;
var_dump($c);

Je vois d'ici vos yeux ébahis et… HORREUR ! Un texte incompréhensible.
Mais on verra ça plus tard. Pour le moment, tout ce que vous devez savoir, c'est que pour afficher le type d'une variable et son contenu, ou bien le type et le contenu d'une variable, il vous suffit de taper : var_dump($variable); ou var_dump(VALEUR);, VALEUR pouvant être un int (5), un float (3.14), un booléen (true) ou une chaîne de caractères ('Lala').

L'instruction affiche un résultat de ce style :

[Type de la variable ou de la valeur]([Contenu de la variable ou de la valeur])

Mais il y a une exception. Si vous donnez une chaîne de caractères ou une variable de type chaîne de caractères à var_dump(), vous aurez ceci :

String([Longueur de la chaîne]) "[Contenu de la chaîne]"

Si vous regardez attentivement le résultat du code avec tous les var_dump(), vous verrez une ligne qui ne répond pas aux deux règles que je viens de vous montrer. Vous avez déjà rencontré ce genre de texte : c'est une erreur de PHP.

Le bonus de fin

Que se passe-t-il si nous utilisons var_dump() avec une variable qui n'existe pas ? La réponse en images :

<?php

var_dump($a);

Eh bin zut alors, un beau message d'erreur aussi insultant qu'incompréhensible et un magnifique null. Vous venez de faire les frais de votre première erreur en PHP : jamais vous ne devez utiliser une variable qui n'existe pas. Cela semble logique, non ? Si vous voulez aller sur la lune mais que vous n'avez pas de vaisseau spatial, qu'il n'existe pas, il semble difficile d'atteindre l'objectif.
En ce qui concerne le null, je vous ai dit que l'interpréteur PHP pouvait modifier le type à la volée. Dans le cas qui nous occupe, c'est plus ou moins ce qu'il a fait : il a considéré que notre variable qui n'existait pas avait null pour « valeur ».

Pfiou ! Si vous êtes toujours vivants : félicitations. Et si vous êtes morts, ben, vous ne devriez pas être capables de lire ça.
Si vous n'avez pas eu 20/20 au QCM de ce chapitre, relisez-le. Les variables sont essentielles : si vous ne les maîtrisez pas complètement, vous serez totalement largués dans le prochain chapitre.


Les types primitifs Les opérateurs : partie I

Les opérateurs : partie I

Quel est ton type ? Retour de l'opérateur d'affectation et introduction des expressions

Dans le chapitre précédent, on a parlé de variables. Mais on a également évoqué le terme « opérateur d'affectation ». En PHP, comme dans beaucoup de langages, il existe plusieurs opérateurs.
Ils servent à faire beaucoup de choses : attribuer une valeur, faire une addition, une division, faire des comparaisons, etc.

Dans ce chapitre, je vais vous présenter un nombre réduit d'opérateurs. Mais ce petit nombre va m'amener à introduire une nouvelle notion plus importante encore que les variables : la notion d'expression.

Retour de l'opérateur d'affectation et introduction des expressions

Les opérateurs : partie I Les opérateurs arithmétiques

Retour de l'opérateur d'affectation et introduction des expressions

Dans le chapitre précédent, on a parlé de plusieurs choses : de variables, de types, de valeurs et d'un opérateur d'affectation.
Seulement, comme dans la vie tout n'est pas toujours rose, je dois vous avouer quelque chose : vous ne savez pas tout. J'ai volontairement oublié de vous parler de la notion qui est le véritable cœur du PHP : les expressions. Je l'ai fait pour vous simplifier les choses, je ne voulais pas vous embrouiller trop vite ; mais maintenant que vous avez passé le cap des variables, il est temps de bien vous embrouiller. :p

Revenons en arrière. Je vous ai dit, et je me cite :

Citation : Moi

L'opérateur d'affectation est bien un égal (=) ; toutefois, écrire $ma_variable = valeur; ne veut pas dire que $ma_variable est égale à valeur. Ce bout de code veut dire qu'on affecte (ou on attribue) la valeur de l'opérande de droite à la variable $ma_variable. C'est une question de terminologie, mais c'est important de le savoir !

En voulant simplifier, je détourne la réalité. Voici la définition réelle : l'opérateur d'affectation attribue la valeur de l'expression qui se trouve à droite du signe égal à l'opérande qui se trouve à gauche du signe égal.

C'est bien joli, mais qu'est-ce qu'une expression, d'après vous ? N'essayez pas de chercher quelque chose de compliqué, ça tient en quelques mots.
Vu que vous avez l'air de patauger dans la semoule, voilà la définition d'une expression : c'est toute chose qui a une valeur. Une expression se caractérise par sa valeur, et par le type de sa valeur (rappelez-vous, les int, float, etc.).

Cette définition entraîne autre chose, que vous comprendrez dans peu de temps : en PHP, tout ou presque est une expression.
Il en existe différents « types », mais deux seulement pour les expressions simples : les variables et les valeurs constantes.
Vous connaissez un de ces deux « types », les variables ; le second vous échappe encore. Comme son nom ne l'indique pas, une valeur constante est une valeur qui ne varie pas (l'opposé d'une variable, quoi).

Et vous savez quoi ? Je vous ai déjà fait manipuler des valeurs constantes.
Reprenons un bout de code :

<?php

$ma_variable = 5;

Avec l'ancienne vision des choses, vous comprenez que ce code déclare une variable, qu'on lui affecte la valeur qui se trouve à droite, c'est-à-dire 5 (un entier).
Avec la vraie définition de l'opérateur d'affectation, voici ce que vous devriez comprendre :

Ça paraît compliqué ? Vous n'avez encore rien vu.
Pour l'instant, j'ai uniquement parlé de l'expression de droite. Mais le plus drôle dans tout ça, c'est qu'il y a une deuxième expression !
Mieux qu'un long discours, un bout de code. Dans ce code, toutes les expressions sont entourées de parenthèses :

<?php

($ma_variable = (5));

Là, si vous n'êtes pas encore embrouillés, chapeau bas.
Comme vous le constatez, j'ai mis des parenthèses autour de 5, qui est une expression de valeur 5 et de type entier constant.
Mais j'ai également mis des parenthèse autour de '$ma_variable = 5;'. Eh oui, c'est une expression.
Reprenons la définition d'une expression. Une expression est quelque chose qui a une valeur.
Mais dites-moi, en affectant une expression à une variable, cette dernière ne prend-elle pas la valeur de l'expression ? Si ! Et donc après une affectation, la variable a une valeur. Or, tout ce qui a une valeur est une expression.

Maintenant, mon petit discours sur les expressions est fini.

Ok… mais à quoi ça va nous servir de savoir ça ?

Je vous l'ai dit : le cœur du PHP, ce sont les expressions. Si vous arrivez à maîtriser ce concept, vous pourrez coder en sachant exactement ce que vous faites, pourquoi vous le faites, comment vous le faites, etc. Et d'ailleurs, désormais, j'utiliserai la notion d'expression très souvent ; alors vous feriez bien de la maîtriser.


Les opérateurs : partie I Les opérateurs arithmétiques

Les opérateurs arithmétiques

Retour de l'opérateur d'affectation et introduction des expressions Calculs complexes et modulo

Les opérateurs arithmétiques

Après cette courte introduction sur les expressions, on va pratiquer un petit peu ; ça me servira à vous montrer plus en détail ce que sont les expressions.

À l'école, vous avez dû apprendre quatre opérations de base en mathématiques : l'addition, la soustraction, la multiplication et la division. Le PHP permet de faire ces opérations grâce aux opérateurs arithmétiques.

Opérateur arithmétique d'addition

Comme toujours, code à l'appui, c'est plus simple :

<?php

$ma_variable = 5 + 2;
var_dump($ma_variable);

Vous venez de faire votre première addition en PHP. Maintenant, c'est l'heure de l'explication sur le fonctionnement de l'opérateur arithmétique d'addition : il fait la somme des expressions qui se trouvent à sa gauche et à sa droite. Ici, l'expression de droite est un entier de valeur 2 et l'expression de gauche est un entier de valeur 5. La somme est donc un entier de valeur 7.
Cet opérateur est très simple à comprendre. Toutefois, je vais encore blablater dessus.
Qu'est-ce qu'on peut additionner ?
Si je vous demande d'additionner deux chaînes de caractères, qu'est-ce que vous allez faire ?
Les mettre l'une à la suite de l'autre ?
Additionner le nombre de caractères des deux ?
Danser le hoola-hop ?

Pour l'interpréteur PHP, c'est pareil, il ne peut pas additionner des chaînes de caractères. Mais au lieu de faire la liste de ce qu'il ne peut pas additionner, on va faire la liste de ce qu'il peut additionner : des entiers (int) et des nombres à virgule (float).
Si vous demandez au PHP d'additionner autre chose que cela, il va faire la même chose que quand on affecte une valeur à une variable : il va transtyper la ou les expressions qu'on veut additionner et qui ne sont pas des entiers ou des nombres à virgule.
Malheureusement, le transtypage, on verra ça plus tard. Pour le moment, ne tentez pas d'additionner autre chose que des entiers ou des nombres à virgule.

Dernière chose sur cet opérateur : quel type de valeur retourne-t-il ?
Réfléchissons. On peut lui donner des entiers ou des nombres à virgule, logiquement, il nous ressortira la même chose.
Voici un tableau qui donne les différents types de valeur possible :

Types des expressions

Type de la valeur retournée

int + int

int

float + int

float

int + float

float

float + float

float

Pour simplifier, on peut dire qu'une addition retourne toujours un float sauf si les deux expressions qu'on additionne sont des int.

Opérateur arithmétique de soustraction

Si vous avez compris l'opérateur précédent, ça ira très vite : tout est pareil. La seule différence, c'est qu'au lieu de faire une addition, on fait une soustraction.

<?php

$ma_variable = 5 - 2;
var_dump($ma_variable);
Opérateur arithmétique de multiplication

À nouveau, très facile si vous avez compris l'opérateur d'addition. On multiplie les expressions entre elles. Tout comme l'addition et la soustraction, la multiplication retourne un nombre à virgule si au moins une des deux expressions qu'on multiplie est un nombre à virgule.

<?php

$ma_variable = 4.5 * 6;
var_dump($ma_variable);
Opérateur arithmétique de division

Comme toujours, cet opérateur est très simple à manipuler, il retourne la valeur de la division des deux expressions.

<?php

$ma_variable = 5 / 2;
var_dump($ma_variable);

Oh ben zut ! Je donne deux entiers, mais le type de ma variable est float et non int.
Ce n'est pas une erreur, c'est logique !
Après tout, 5/2, ça vaut 2.5, non ? Et ce 2.5 est un nombre à virgule, non ? Donc la valeur retournée est du type float. En réalité, on peut simplifier ça : le type de valeur retournée par l'opérateur arithmétique de division est déterminé par le résultat de la division. Si le résultat est un entier (10/2, par exemple, donne un résultat entier), l'opérateur retourne un int. Si le résultat n'est pas un entier (5/2 par exemple), l'opérateur retourne un float.

Pour vous en convaincre, faites des var_dump() de 5 divisé par 5, de 2.5 divisé par 2.5, de 5 divisé par 2.5, etc.


Retour de l'opérateur d'affectation et introduction des expressions Calculs complexes et modulo

Calculs complexes et modulo

Les opérateurs arithmétiques Les expressions, un peu de pratique !

Calculs complexes et modulo

Résumons vite fait ce chapitre : on a vu une introduction sur les expressions, les quatre opérateurs arithmétiques, leur fonctionnement, les types d'expressions qu'ils acceptent et qu'ils retournent.

Maintenant, on va faire un peu de calcul. Ce n'est pas vraiment complexe, c'est juste pour différencier un calcul comme 4 + 5 d'un calcul comme 5 / 2 * 5 + 1.

En mathématiques, les différentes opérations ont des priorités différentes. En PHP, c'est pareil.
Exemple :

<?php

$calcul = 4 + 5 * 2;
var_dump($calcul);

Mon but, c'est de faire la somme de quatre et de cinq, puis de multiplier le tout par deux (c'est égal à 18). Seulement, en mathématiques, la multiplication a une priorité plus grande que l'addition, et donc on fait d'abord la multiplication (5 * 2 = 10) et ensuite l'addition (4 + 10) ; le résultat est donc 14.

Le résultat n'est donc pas celui que j'attendais. En mathématiques, pour forcer la priorité, on utilise des parenthèses. En PHP, c'est pareil. Mon code devient donc :

<?php

$calcul = (4 + 5) * 2;
var_dump($calcul);

Cette fois, j'obtiens le résultat attendu : 18. C'est pareil pour tous les opérateurs arithmétiques, chacun à sa propre priorité. Voici l'ordre de priorité de ces quatre opérateurs, du plus au moins prioritaire : *, /, +, -.
En réalité, ce n'est pas tout à fait vrai.
Exemple : je veux diviser 120 par le résultat de la multiplication de 4 par 3. Avec ces priorités, je taperais ceci :

<?php

$calcul = 120 / 4 * 3;
var_dump($calcul);

Manque de chance : au lieu d'avoir 10, j'obtiens 90.

Pas de panique, c'est normal : je vous ai menti. D'après ce que j'ai dit, l'opérateur de multiplication a une priorité plus grande que l'opérateur de division. C'est faux : ils ont le même niveau de priorité.
Et il en va de même pour les opérateurs d'addition et de soustraction : ils ont le même niveau de priorité.

Pour obtenir le résultat que je veux, je dois donc utiliser des parenthèses :

<?php

$calcul = 120 / (4 * 3);
var_dump($calcul);
Un cinquième opérateur arithmétique : le modulo

En mathématiques, quand vous faisiez une division qui ne tombe pas juste, 5 divisé par 2 par exemple, vous aviez deux choses à la fin : le résultat de la division et le reste. Quand vous divisez 5 par 2, le résultat de la division est 2 (on peut mettre deux fois 2 dans 5) et le reste est 1 (5 moins deux fois 2 égal 1).

Il est parfois pratique de calculer le reste d'une division entière (vous verrez un exemple plus tard), et pour cela, le PHP met un autre opérateur à notre disposition : le modulo (%).

Exemple : je veux connaître le reste de la division entière de 17 par 3.

<?php

$calcul = 17 % 3;
var_dump($calcul);

J'obtiens bien le reste de la division entière : 2.

Cette partie n'est pas forcément nouvelle pour vous, les règles de calcul en PHP et en mathématiques sont identiques. Mais il était indispensable de faire cela pour introduire la notion de priorité des opérateurs, c'est souvent la cause de nombreux problèmes et on en reparlera plus tard. Retenez bien que tous les opérateurs arithmétiques ont un niveau de priorité supérieur à l'opérateur d'affectation.


Les opérateurs arithmétiques Les expressions, un peu de pratique !

Les expressions, un peu de pratique !

Calculs complexes et modulo Les opérateurs : partie II

Les expressions, un peu de pratique !

Vous vous demandez peut-être pourquoi j'ai décidé de parler des opérateurs et des expressions dans le même chapitre. La raison est simple : grâce aux opérateurs, on peut mettre en pratique la théorie qu'on a vue sur les expressions. Vous vous en doutez donc, cette partie sera un peu plus pratique et devrait clarifier la notion d'expression.

On va faire un jeu : je vais vous donner quelques codes, et vous tenterez de compter le nombre d'expressions qu'il y a dans ces codes ; exemple :

<?php

($ma_variable = (5));

Les expressions présentes sont :

Il y a donc deux expressions.

<?php

$var = 'lala';
$_var = 5.6;

Il y a quatre expressions :

  • $var = 'lala'

    • 'lala'

  • $_var = 5.6

    • 5.6

Rien de compliqué, il n'y a qu'à compter.

<?php

$var = 5 * 6;

Il y a quatre expressions :

  • $var = 5 * 6

    • 5 * 6

      • 5

      • 6

La seule chose à ne pas oublier, c'est que l'opérateur arithmétique retourne la valeur de l'expression qui est égale à la multiplication des expressions qui se trouvent à sa gauche et à sa droite.

<?php

$a = $b = 5;

Il y a trois expressions :

  • $a = $b = 5

    • $b = 5

      • 5

Ici, un petit piège pour vous rappeler la définition de l'opérateur d'affectation : il affecte la valeur de l'expression de droite à l'opérande de gauche. Ce qui veut dire que l'expression de droite est interprétée avant d'être affectée. L'expression de droite étant elle-même une affectation, on interprète à nouveau l'expression de droite en premier.
Le PHP fait donc ceci : il déclare la variable $b et lui affecte la valeur 5 ; ensuite, il déclare $a et lui affecte la valeur de $b (au sens strict du terme, ce que je dis n'est pas correct, mais dans les faits, on peut le voir comme ça).

<?php

$var = 5 * (6 / ($a = 4)) % 2;

Il y a dix expressions :

  • $var = 5 * (6 / ($a = 4)) % 2

    • 5 * (6 / ($a = 4)) % 2

      • 5 * (6 / ($a = 4))

        • 5

        • 6 / ($a = 4)

          • 6

          • $a = 4

            • 4

      • 2

      • (6 / ($a = 4)) % 2

Là, il n'y a pas de méthode miracle : il faut compter. Si vous avez trouvé le bon nombre d'expressions, vous cernez bien ce qu'est une expression, et c'est très bien !

Maintenant que ce petit jeu est fini, vous devriez commencer à bien percevoir ce qu'est une expression. Je l'ai dit mais je le redis : c'est l'élément fondamental du PHP. Tout, ou presque, est une expression en PHP.

Le vrai visage de var_dump()

Dans le chapitre précédent, j'ai introduit un élément : var_dump(). Pour l'utiliser, je vous ai dit qu'il fallait mettre une variable ou une valeur entre les parenthèses.
Maintenant que vous êtes incollables sur les expressions, je peux dire les choses comme elles le sont.
Pour utiliser var_dump(), vous devez mettre une expression entre les parenthèses.

Ce qui implique qu'on peut mettre beaucoup de choses !
Souvenez-vous de ce que l'on faisait : d'abord, on déclarait notre variable en lui affectant une valeur, ensuite on utilisait var_dump().
Mais une affectation, d'après ce que j'ai dit, n'est-ce pas une expression ? Eh bien si !
À la place de ceci :

<?php

$var = 'lala';
var_dump($var);

On peut écrire ceci :

<?php

var_dump($var = 'lala');

Ou encore ceci si on est sûrs de ne pas avoir besoin de la variable par la suite :

<?php

var_dump('lala');

Un nouveau chapitre fini : beaucoup de nouvelles choses apprises.
Comme je l'ai déjà dit, n'hésitez surtout pas à relire plusieurs fois et éventuellement demander de l'aide si quelque chose ne vous paraît pas clair. Si tout vous paraît limpide, rendez-vous au prochain chapitre qui continuera de parler des opérateurs.


Calculs complexes et modulo Les opérateurs : partie II

Les opérateurs : partie II

Les expressions, un peu de pratique ! Opérateurs arithmétiques d'affectation et opérateurs d'incrémentation

Pour l'instant, vous avez vu six opérateurs : l'opérateur d'affectation et les cinq opérateurs arithmétiques.
Mais le PHP est bien fourni, et il en reste beaucoup à voir. Il doit en rester plus d'une quarantaine.

Je ne vais pas tous les détailler, je vais même en omettre quelques-uns pour le moment, mais vous les verrez tous, promis !

Opérateurs arithmétiques d'affectation et opérateurs d'incrémentation

Les opérateurs : partie II Opérateurs de comparaison

Opérateurs arithmétiques d'affectation et opérateurs d'incrémentation

Dans le chapitre précédent, on a vu ce qu'étaient les opérateurs arithmétiques et à quoi ils servaient.
Si vous avez eu la bonne idée de vous amuser à tester un peu tout et n'importe quoi, vous êtes sans doute arrivés à ce genre de code :

<?php

$var = 5;
$var = $var + 5;
var_dump($var);

Rien de compliqué pour vous : on déclare une variable en lui affectant la valeur 5, et puis on réaffecte à cette variable sa valeur plus 5. Seulement, vous devez sans doute vous rendre compte que c'est lourd et plutôt embêtant de devoir écrire plusieurs fois $var.

C'est pourquoi le PHP met à disposition des opérateurs qui sont un mix des opérateurs arithmétiques et de l'opérateur d'affectation. En termes simples, ces opérateurs permettent d'utiliser la valeur d'une variable dans une expression et d'affecter le résultat de cette expression à cette variable.

L'opérateur arithmétique d'addition et d'affectation est +=.

Reprenons le code précédent en utilisant ce nouvel opérateur :

<?php

$var = 5;
$var += 5;
var_dump($var);

Le résultat est strictement le même, mais c'est un peu plus court à écrire. Au passage, rappelez-vous ce qu'est une expression. Si votre mémoire est bonne, vous avez sans doute deviné que $var += 5 est une expression. On peut donc l'utiliser comme n'importe quelle expression ; exemple :

<?php

$var = 5;
var_dump(6 + $var += 3);

Évidemment, ce n'est qu'un opérateur parmi d'autres. Tous les opérateurs arithmétiques ont un équivalent en opérateur d'affectation ; exemple :

<?php

$a = 4;
var_dump($a /= 2);
$b = 10;
var_dump($b *= 3);
$c = 7;
var_dump($c -= 4);
$d = 9;
var_dump($d %= 2);
$e = 18;
var_dump($e += 1);

A priori, rien de bien particulier dans ce code, et pourtant… une notion importante en PHP, comme dans bien des langages, y apparaît : l'incrémentation.

Mais qu'est-ce que l'incrémentation ? Incrémenter une variable, c'est lui affecter sa valeur plus 1 (bien qu'en réalité, on peut dire qu'incrémenter une valeur, c'est lui ajouter quelque chose). Puisque rien ne vaut un bon exemple :

<?php

$a = 5;
$a++;
var_dump($a);

L'opérateur d'incrémentation est le double plus (++). 5 plus 1, ça donne 6 : le résultat est bien celui que l'on attend. Mais je vais vous emmêler les pinceaux, regardons ce code :

<?php

$a = 5;
var_dump($a++);

Plutôt curieux, non ? Au lieu d'avoir 6, comme on pouvait le supposer, le résultat est 5. Vous venez de faire les frais de la différence entre la post-incrémentation et la pré-incrémentation. Des mots compliqués, ça rend toujours mieux :) .
Pour incrémenter une variable, on a fait comme ça :

<?php

$a = 5;
$a++;
var_dump($a);

Mais on peut également le faire ainsi :

<?php

$a = 5;
++$a;
var_dump($a);

Ces deux codes produiront le même résultat ; la seule différence, c'est que dans le premier je fais une post-incrémentation, et dans le second, une pré-incrémentation. La différence est très simple à comprendre. La pré-incrémentation incrémente la variable avant que sa valeur ne soit utilisée, alors que la post-incrémentation incrémente la variable après que sa valeur a été utilisée. Vous allez comprendre :

<?php

$a = 5;
var_dump($a++);
$b = 5;
var_dump(++$b);

Le premier var_dump() affiche que la variable prend la valeur 5 et le second la valeur 6. Second code :

<?php
$a = 5;
var_dump($a++);
var_dump($a);
$b = 5;
var_dump(++$b);
var_dump($b);
?>

Le premier et le troisième var_dump() affichent la même chose que la dernière fois. Mais le second et le quatrième, eux, affichent la même chose. Avec cette histoire de post et pré-incrémentation, vous devriez pouvoir expliquer pourquoi. Mais je vais quand même le faire.
Voici ce que fait l'interpréteur PHP : on déclare $a et on lui affecte la valeur 5, il affiche les infos sur $aavant d'incrémenter $a. On affiche à nouveau les infos de $a. On déclare $b et on lui affecte la valeur 5, il affiche les infos de $baprès avoir incrémenté $b. On affiche à nouveau les infos de $b.

Tout ce que vous devez retenir sur la post/pré-incrémentation, c'est que dans le cas de la pré-incrémentation, on incrémente d'abord la variable et ensuite l'instruction est exécutée tandis que dans le cas de la post-incrémentation, l'instruction est d'abord exécutée puis la valeur est incrémentée

Vous vous en doutez peut-être, il existe l'inverse de l'incrémentation : la décrémentation. L'opérateur de décrémentation est le double moins (--), et il fonctionne de la même façon que l'opérateur d'incrémentation (ça vaut aussi pour l'histoire de post/pré-décrémentation).


Les opérateurs : partie II Opérateurs de comparaison

Opérateurs de comparaison

Opérateurs arithmétiques d'affectation et opérateurs d'incrémentation Opérateurs logiques

Opérateurs de comparaison

Quel que soit le langage de programmation que vous pouvez utiliser, vous avez toujours besoin de pouvoir faire des comparaisons. Par exemple, si vous voulez faire un espace membre, pour s'y connecter, il faudra vérifier que le mot de passe que l'utilisateur donne est le même que celui qu'il a donné à son inscription : on va devoir les comparer.

En PHP, il existe en tout et pour tout neuf opérateurs de comparaison. Ça va du simple test d'égalité au test de différence de type. Les opérateurs arithmétiques retournaient la valeur du calcul et donnaient soit un type int, soit un type float en fonction de la valeur du calcul. Les opérateurs de comparaison renvoient des booléens. Souvenez-vous, j'en ai parlé dans le chapitre sur les variables.

Les booléens peuvent prendre deux valeurs : true (vrai) et false (faux). Les opérateurs de comparaison renvoient true si la comparaison est vraie et false si elle est fausse. Pas très compliqué. Voici un tableau des différents opérateurs de comparaison :

Opérateur

Fonction

==

Retourne true si les valeurs des expressions à gauche et à droite sont égales.

===

Retourne true si les valeurs des expressions à gauche et à droite sont égales et du même type.

!=

Retourne true si les valeurs des expressions à gauche et à droite sont différentes.

!==

Retourne true si les valeurs des expressions à gauche et à droite sont différentes ou sont de types différents.

<>

Voir l'opérateur !=.

>

Retourne true si la valeur de l'expression de gauche est strictement plus grande que la valeur de l'expression de droite.

>=

Retourne true si la valeur de l'expression de gauche est plus grande ou égale à la valeur de l'expression de droite.

<

Retourne true si la valeur de l'expression de gauche est strictement plus petite que la valeur de l'expression de droite.

<=

Retourne true si la valeur de l'expression de gauche est plus petite ou égale à la valeur de l'expression de droite.

Maintenant que la théorie est là, faisons place à la pratique, vérifions que 5 est strictement plus petit que 6 :

<?php

$var = 5 < 6;
var_dump($var);

Quelques tests en vrac :

<?php

$a = 5;
var_dump($a == 5);
$b = '7';
var_dump($b == 7); 
var_dump($b === 7); // 7 est de type int, alors que $b est de type string. L'opérateur == ne vérifiant pas le type, il retourne true, vu que les deux valeurs sont les mêmes. Mais comme l'opérateur vérifie également le type, et comme les valeurs des deux expressions ne sont pas de même type, il retourne false.
$c = 'meuh';
var_dump($c !== 'meuh');
var_dump($c == $d = 'meuh');
// etc.

Pour l'instant, ces opérateurs ne servent à rien, sauf peut-être à vérifier que l'interpréteur PHP sait compter ; mais ils serviront beaucoup dans le prochain chapitre.


Opérateurs arithmétiques d'affectation et opérateurs d'incrémentation Opérateurs logiques

Opérateurs logiques

Opérateurs de comparaison Les structures de contrôle

Opérateurs logiques

Après ces quelques opérateurs, faisons une courte pause. Je vous ai fait comprendre qu'il y avait en tout cinquante-deux opérateurs en PHP. On en a vu vingt-deux (cinq arithmétiques, six d'affectation, neuf de comparaison, un d'incrémentation et un de décrémentation). Il en reste donc trente.
Je ne vais pas tous les détailler ici. Certains étant pour le moment totalement superflus, on les verra petit à petit tout en avançant dans l'apprentissage de la syntaxe du PHP.
Mais avant de vous laisser tranquilles avec les opérateurs, on va encore en voir six : les opérateurs logiques (en réalité, il n'y en a que quatre, mais il y en a qui ont la même fonction avec une priorité différente !).

Dans la partie précédente, on a vu comment faire des comparaisons. Mais maintenant, qu'écririez-vous si je vous demandais de vérifier que 22 est plus grand que 6 et plus petit que 52 ?
Vous arriveriez sans doute, après un peu de réflexion, à ceci :

<?php

$a = 22 > 6;
$b = 22 < 52;
$test = $a == $b; // ce qui vaut true
// on peut condenser ce code en :
$test = 22 > 6 == 22 < 52; // > et < ayant un niveau de priorité plus grand que == (relisez la partie précédente), on n'est pas obligés de mettre des parenthèses, mais je les mettrai quand même pour améliorer la lisibilité du code.

Il faut cependant l'avouer : ce n'est pas naturel. Vérifier si le résultat des deux tests est le même, il faut y penser. Et si vous avez besoin de faire plus de tests, ça devient vite extrêmement pénible. C'est pour ça que le PHP met les opérateurs logiques à notre disposition. En voici la liste et leur rôle respectif (ils renvoient aussi true ou false, comme les opérateurs de comparaison) :

Opérateur

Fonction

&&

Retourne true si les valeurs des expressions à gauche et à droite sont égales à true.

||

Retourne true si la valeur de l'expression à gauche est égale à true ou si la valeur de l'expression à droite est égale à true.

AND

Voir l'opérateur &&.

OR

Voir l'opérateur ||.

XOR

Retourne true si la valeur de l'expression à gauche est égale à true ou que la valeur de l'expression à droite est égale à true MAIS si les valeurs des expressions à droite et à gauche ne sont pas toutes les deux égales à true.

!

Retourne true si la valeur de l'expression de droite vaut false.

Les deux opérateurs « doublons » sont faciles à trouver . Comme je l'ai dit, la seule différence est le niveau de priorité. Voici d'ailleurs les six opérateurs dans l'ordre décroissant de leur niveau de priorité : !, &&, ||, AND, XOR, OR. Ils ont tous des niveaux de priorité différents. Mais tous les opérateurs logiques ont un niveau de priorité inférieur au plus faible des opérateurs arithmétiques.

Maintenant que l'on maîtrise ces opérateurs, reprenons l'exercice précédent :

<?php

$test = 22 > 6 && 22 < 52;
var_dump($test);

Vous êtes fin prêts pour faire des comparaisons rocambolesques.
Un petit exemple : je veux vérifier que 18 est compris entre 10 et 30 (compris), mais est différent de 20. Si c'est le cas, le code doit afficher true.

<?php
var_dump(18 >= 10 && 18 <= 30 && 18 != 20);
?>

Vu que tous les opérateurs fonctionnent de la même façon, je ne vais pas m'attarder là-dessus. Par contre, je vais dire un petit mot sur l'opérateur logique !.

Si les cinq autres opérateurs logiques utilisent deux expressions (une de chaque côté de l'opérateur), celui-ci, comme les opérateurs d'incrémentation et de décrémentation, n'utilise qu'une expression. Un exemple de son utilisation :

<?php
$test = 5 == 8; // vaut false
var_dump(!$test); // affiche true
$test = 4 % 2 === 0; // vaut true
var_dump(!$test); // affiche false
?>

On peut bien sûr réduire ce code, mais faites bien attention à la priorité des opérateurs. D'ailleurs, comme on en a déjà vu pas mal, voici un cadeau : une liste des opérateurs triés par ordre décroissant de niveau de priorité (les opérateurs d'une même ligne ont la même priorité).

Et bien entendu, n'oubliez pas qu'on peut toujours forcer la priorité en utilisant des parenthèses. D'ailleurs, utilisez-les… Regardez un peu cette instruction : $test = 4 % 2 === 0;.
N'est-elle pas plus compréhensible ainsi : $test = ((4 % 2) === 0); ?
Il ne faut évidemment pas tomber dans l'excès, c'est à vous de juger de ce qui est nécessaire pour que votre code soit lisible mais pas trop chargé.

Les opérateurs, c'est fini !
Qu'en pensez-vous ? Avec tout ça et les prochains chapitres, vous pourrez bientôt faire de grandes choses avec le PHP.
Si vous êtes toujours avec moi, c'est parti pour le chapitre sur les structures de contrôle, on y verra toute la puissance de l'association des opérateurs de comparaison et des opérateurs logiques.


Opérateurs de comparaison Les structures de contrôle

Les structures de contrôle

Opérateurs logiques Structures conditionnelles

On a appris ce qu'étaient les variables, les expressions, les opérateurs, mais pour l'instant, ce n'est pas encore un truc qui vous en met plein la vue.
Dans ce chapitre, on va tout mettre ensemble pour aborder des structures qui vont vous montrer ce que le PHP a dans le ventre.
Couplé avec les quelques chapitres suivants, vous pourrez faire plein de petites choses marrantes.

Structures conditionnelles

Les structures de contrôle Évaluation

Structures conditionnelles

Grâce aux opérateurs de comparaison et aux opérateurs logiques, on peut faire des tests sur des expressions, sur des variables, sur des valeurs. Seulement, ça n'a pas grand intérêt si on ne peut pas utiliser ces résultats. Voilà ? tout frais tout chaud ? un bout de code comme on les aime :

<?php

$var = 5;
$test = $var <= 10;
if($test)
{
    var_dump('$var est plus petite ou égale à 10');
}
else
{
    var_dump('$var est plus grande que 10');
}

Testez donc ce code, et que se passe-t-il ? Un seul var_dump() affiche quelque chose. Changez la valeur de $var (donnez-lui la valeur 15, par exemple) et observez : le second var_dump() finira par être plus bavard. Mine de rien, on vient de voir une des structures de contrôle du PHP : la structure conditionnelle.

Mais comment ça marche ?
Vous voyez déjà deux nouveaux mots-clés, if et else. En français, ils signifient si et sinon. En sachant ce que ça veut dire, vous devriez comprendre comment fonctionne ce code. On va d'ailleurs l'épurer pour ne conserver que la structure conditionnelle :

<?php

if(Expression)
{
    // instructions si Expression est évaluée à true
}
else
{
    // instructions si Expression est évaluée à false
}

Voilà donc la structure de base : j'ai utilisé le mot Expression au lieu de la variable $test, vous savez ce qu'est une expression, on l'a vu. On va donc affiner le fonctionnement de cette structure : si l'expression placée entre les parenthèses du if est évaluée à true, le bloc d'instructions du if est exécuté, sinon c'est le bloc d'instructions du else qui l'est.

Mais qu'est-ce qu'un bloc d'instructions ? Ce qu'on appelle ainsi, c'est ce qui est compris entre les accolades ({}). Dans ces accolades, vous pouvez mettre diverses instructions. Par exemple, si vous faites un script pour afficher une news, vous allez d'abord vérifier que la news existe (avec l'expression adéquate entre les parenthèses qui suivent le if). Si elle existe, vous mettrez diverses instructions qui afficheront la news, mais si elle n'existe pas, c'est le bloc d'instructions du else qui sera exécuté, bloc d'instructions qui affichera une erreur par exemple. Les deux blocs ne seront jamais tous les deux exécutés : c'est soit l'un, soit l'autre, mais pas les deux. Vous pouvez comparer cela à une route qui se sépare en deux : vous prenez soit la rouge à gauche, soit à droite, mais certainement pas et à gauche et à droite en même temps comme c'est illustré à la figure 7.1.

Image utilisateur

Figure 7.1 — Un seul code sera exécuté, jamais les deux !

Vous n'êtes pas obligés de créer des variables pour rien. Qu'est-ce que je veux dire ? Regardez mon premier code : je déclare deux variables, $var et $test. Mais je n'utilise pas $test ailleurs que dans l'expression que je mets entre les parenthèses du if, ma variable est donc inutile. Car $var <= 10 est une expression, rappelez-vous !
On peut donc réécrire ce code comme tel :

<?php

$var = 5;
if($var <= 10)
{
    var_dump('$var est plus petite ou égale à 10');
}
else
{
    var_dump('$var est plus grande que 10');
}

Ce code produit exactement le même résultat, mais il est meilleur car on n'utilise pas de variable inutile, et le script est donc plus performant, plus rapide. Amusez-vous à tester tout et n'importe quoi comme condition, mettez plusieurs instructions dans les différents blocs, bref, essayez un peu tout. Si vous savez ce qu'est une expression, que vous avez compris comment on utilise cette structure conditionnelle, tout ira sans problème.

Puisque c'est simple, encore un mot sur cette structure et sa petite sœur :

<?php

$var = 5;
if($var <= 10)
{ // si $var est plus petite ou égale à 10, on le dit
    var_dump('$var est plus petite ou égale à 10');
}
elseif($var === 50) // sinon, si $var est égale à 50, on le dit aussi
{ 
    var_dump('$var est égale à 50');
}
elseif($var === 42) // parce que 42, c'est grand
{
    var_dump('$var est égale à 42');
}
else // sinon, on dit que $var est plus grande que 10 et différente de 50
{ 
    var_dump('$var est plus grande que 10 et différente de 50');
}

Le mot-clé rajouté, elseif, veut dire sinon si. Ça vous permet de faire plus de tests. Prenons un exemple : imaginons que vous demandiez à un visiteur de choisir une couleur parmi trois propositions. S'il choisit la première, vous afficheriez qu'il aime le rouge, sinon s'il choisit la seconde, vous lui afficheriez qu'il aime le bleu, sinon c'est qu'il a choisi la troisième, vous lui afficheriez qu'il aime le rose.
Il y a quatre blocs d'instructions différents dans ce code, mais encore une fois, il n'y en a qu'un et un seul exécuté. Vous devez bien comprendre que dès qu'un des blocs est exécuté, les autres ne le seront pas : on sort de la structure conditionnelle et le script reprend après celle-ci. C'est pourquoi, quand vous faites des conditions multiples, vous devez toujours mettre la condition la plus probable (celle qui a le plus de chances d'être vraie) dans le if. Ainsi, l'interpréteur PHP ne perdra pas de temps à évaluer les autres conditions. Nous pouvons à nouveau comparer cela à un choix lors de la séparation d'une route, sauf que cette fois-ci la route se sépare plusieurs fois comme illustré à la figure 7.2

Image utilisateur

Figure 7.2 — À chaque condition, une nouvelle séparation se fait

Petite note sur le else : il est facultatif. Vous n'avez pas besoin de spécifier un else si vous n'en avez pas besoin. Imaginons que je veuille afficher quelque chose si $var est égale à 70. Dans le cas contraire, je ne veux rien afficher. Au lieu de mettre un bloc d'instructions vide :

<?php

$var = 70;
if($var == 70)
{
    var_dump('Oh yeah');
}
else
{
}

On peut oublier le else :

<?php

$var = 70;
if($var == 70)
{
    var_dump('Oh yeah');
}

Les conditions (comme toutes les autres structures de contrôle, d'ailleurs) ont une place très importante en PHP. Je ne mentirais pas en vous disant que vous allez en bouffer jour après jour, alors tâchez de les maîtriser ! Et pour ça, pas de secret, il faut que vous jouiez avec.

Dernier petit détail qui pourra vous servir : on peut interrompre le bloc de PHP dans les conditions. Je vous ai montré où placer votre code PHP, eh bien sachez que ce code fonctionne :

<?php

if(true)
{ // mettez false à la place, et vous verrez
    ?>
    <p>Bonjour !</p>
    <?php
}
else
{
    ?>
    <p>Bonsoir !</p>
    <?php
}

Ici, vous voyez que j'ai directement mis le mot-clé true entre les parenthèses du if : on peut le faire, après tout, true a une valeur, c'est donc une expression. Et comme il faut mettre une expression entre les parenthèses, on peut tout à fait le faire.


Les structures de contrôle Évaluation

Évaluation

Structures conditionnelles Autre structure conditionnelle

Évaluation

Depuis quelques lignes déjà, j'emploie souvent un mot : évaluer. Mais qu'est-ce que ça veut dire ?
Quand vous mettez une expression entre les parenthèses d'un if ou d'un elseif, cette expression est évaluée comme un booléen (c'est-à-dire que l'expression est calculée puis convertie, transtypée en sa valeur booléenne). Une expression évaluée en booléen ne peut prendre que deux valeurs bien connues : true ou false. Si l'expression est évaluée à true, le bloc d'instructions est exécuté, sinon il ne l'est pas.

Dans le cas des opérateurs de comparaison et des opérateurs logiques, c'est simple étant donné que ces opérateurs ne renvoient que true ou false. Il n'y a donc aucune ambiguïté possible. Mais imaginons que je sois fou et que fasse ceci :

<?php 

if('lala')
{
    var_dump('La chaîne lala est évaluée à true');
}
else
{
    var_dump('La chaîne lala est évaluée à false');
}

Je vois d'ici vos grands yeux ébahis : oui, cette chaîne de caractères est évaluée à true. Surprenant, dites-vous ? Je vous réponds que c'est normal. L'interpréteur PHP évalue certaines expressions à true, d'autres à false. La liste des expressions évaluées à true est d'une longueur… infinie, contrairement à la liste de ce qui est évalué à false. C'est pourquoi je vais vous la donner :

La liste n'est pas complète, mais vous ne connaissez pas encore tous les types d'expressions possibles ; ça viendra par la suite.

Je suppose que maintenant, vous savez quoi faire : tester. Amusez-vous à mettre des valeurs différentes de celles-là pour vérifier que c'est bien évalué à true, et testez ces valeurs pour vérifier qu'elles sont bien évaluées à false.


Structures conditionnelles Autre structure conditionnelle

Autre structure conditionnelle

Évaluation Structure de boucle : partie I

Autre structure conditionnelle

Les structures précédentes, if, elseif et else, conviennent parfaitement pour traiter des cas où il y a beaucoup de conditions différentes. Mais il y a une autre structure qui peut faire la même chose : switch.

Personnellement, je ne l'utilise presque jamais. Beaucoup prétendent que le switch améliore la lisibilité du code. Pour ma part, je ne vois aucune différence notable mais bon. Vous êtes totalement libres de choisir la structure qui vous plaira, mais moi je préfère le if elseif. Il y a de rares cas où je l'utilise, mais je vous expliquerai ça plus tard, quand on parlera de performance.

Bref, passons aux codes :

<?php

$nb = 5;
if($nb == 0)
{
    var_dump('$nb vaut 0');
}
elseif($nb == 1)
{
    var_dump('$nb vaut 1');
}
elseif($nb == 2)
{
    var_dump('$nb vaut 2');
}
elseif($nb == 3)
{
    var_dump('$nb vaut 3');
}
elseif($nb == 4)
{
    var_dump('$nb vaut 4');
}
else
{
    var_dump('$nb vaut 5');
}

Maintenant, voici exactement la même chose avec un switch :

<?php

$nb = 5;
switch($nb)
{
    case 0 :
        var_dump('$nb vaut 0');
        break;
    case 1 :
        var_dump('$nb vaut 1');
        break;
    case 2 : 
        var_dump('$nb vaut 2');
        break;
    case 3 :
        var_dump('$nb vaut 3');
        break;
    case 4 : 
        var_dump('$nb vaut 4');
        break;
    default : 
        var_dump('$nb vaut 5');
}

Le résultat est le même, seule la syntaxe diffère. Expliquons quand même cette syntaxe. On la réduit à sa plus simple expression :

<?php

switch(Expression)
{
    case Valeur :
        // instruction 1
        // instruction 2
        // …
        break;
    case AutreValeur :
        // instruction 1
        // instruction 2
        // …
        break;
    default : 
        // instruction 1
        // instruction 2
        // …
}

Entre les parenthèses du switch, vous devez mettre l'expression dont vous voulez tester la valeur. L'interpréteur PHP commence par évaluer cette expression. Ensuite, il va lire le switch ligne par ligne. Lorsque l'interpréteur PHP rencontre un case Valeur :, deux comportements sont possibles :

Dans le premier cas, l'interpréteur PHP va exécuter les instructions qu'il rencontre jusqu'à ce qu'il trouve un break;. Cette instruction est un peu particulière, je vais en parler brièvement maintenant mais on la reverra plus en détail par la suite. break est une structure de contrôle qui permet de sortir, de briser la structure de contrôle qui l'encadre. Ici, la structure qui encadre le break, c'est le switch ; donc, dès que l'interpréteur PHP rencontre un break;, il sort du switch et les instructions du switch qui n'ont pas été exécutées ne le seront jamais.

Dans le second cas, l'interpréteur PHP va continuer à lire le switch jusqu'à rencontrer un case dont la valeur est égale à celle de l'expression évaluée.
Vous remarquez un dernier mot-clé, default. C'est un case un peu particulier, qui doit être placé en tout dernier. Si tous les case ont échoué (c'est-à-dire que la valeur de l'expression évaluée n'est égale à aucune des valeurs des différents case) et qu'il y un default, alors les instructions de ce dernier bloc seront exécutées. Comme default est toujours le dernier bloc d'un switch, il est inutile de mettre un break puisque le switch se termine juste après.
Le mieux pour bien comprendre, c'est encore et toujours de tester tout et n'importe quoi.

Sachez également qu'il est possible de ne pas mettre d'instruction dans un case ; si ça arrive, l'interpréteur PHP lira les instructions du case suivant :

<?php

$i = 1;
switch($i)
{
    case 1 :
    case 2 :
        var_dump('$i est plus petit ou égal à deux');
        break;
    default :
        var_dump('hu ?');
}

Évaluation Structure de boucle : partie I

Structure de boucle : partie I

Autre structure conditionnelle Structure de boucle : partie II

Structure de boucle : partie I

À côté des structures conditionnelles, un autre type de structure tient une grande place : les boucles. Concrètement, ça peut servir à beaucoup de choses : afficher un classement, une liste de nombres, etc.

Mieux qu'un long discours :

<?php

$lala = 0;
while(++$lala <= 10)
{
    var_dump($lala);
}

Je suppose que vous avez déjà testé ce code et que vous trouvez le résultat lamentable. Mettez un peu 1000 à la place de 10, et on verra si vous trouvez toujours ça lamentable. ^^

Voici la structure réduite à sa plus simple expression :

<?php

while(Expression)
{
    // instructions
}

Cette structure est extrêmement simple à comprendre : tant que Expression est évaluée à true, la boucle exécute le bloc d'instructions (les instructions comprises entre les accolades).
Concrètement, que se passe-t-il ?
L'interpréteur PHP arrive sur le while (qui, en français, veut dire « pendant que » ou « tant que ») et évalue l'expression qui est entre parenthèses. Si l'expression est évaluée à true, l'interpréteur PHP exécute le bloc d'instructions puis réévalue l'expression. Si elle est toujours vraie, on recommence et ainsi de suite. Voilà d'ailleurs un risque : une boucle infinie. Imaginons que je mette simplement le booléen true comme expression, ce sera toujours vrai, la boucle ne s'arrêtera jamais (mais l'interpréteur PHP est gentil, il vous indiquera une erreur à force de tourner en rond). Faites donc bien attention aux expressions que vous mettez entre les parenthèses. Vous devez être sûrs qu'elle sera évaluée au moins une fois à false pour que la boucle se termine. Tout ceci est illustré à la figure 8.3.

Image utilisateur

Figure 8.3 — Principe du while

Mais en fait, ceci est faux, l'expression pourrait toujours être évaluée à true ; observons ce code :

<?php

$i = 0;
while(++$i) // condition toujours vraie, rappelez-vous de ce qui est évalué à false
{
    if($i === 45) // j'arrête ma boucle après 45 itérations
    {
        break;
    }
}

Vous vous souvenez de break, cette instruction qui sert à sortir de l'instruction de contrôle qui l'encadre ? Eh bien grâce à lui, cette boucle qui paraissait infinie connaît une fin.

Dans le code, j'ai glissé un nouveau terme dans mes commentaires : itération. Une itération, c'est une exécution de votre boucle. L'évaluation de l'expression et l'exécution du bloc d'instructions, c'est une itération. Ce terme reviendra souvent par la suite, mémorisez-le bien.


Autre structure conditionnelle Structure de boucle : partie II

Structure de boucle : partie II

Structure de boucle : partie I Les fonctions

Structure de boucle : partie II

À l'instar des structures conditionnelles, il existe plusieurs structures de boucle, quatre en tout. On en a vu une, on va en découvrir une deuxième tout de suite. La troisième sera vue dans le chapitre suivant et la quatrième à un autre moment .

Bref, voici sans plus attendre un code qui met en avant cette structure :

<?php

$lala = 0;
do
{
    var_dump($lala);
} while($lala++);

Comme d'habitude, la structure réduite à sa plus simple expression :

<?php

do
{
    // instructions
} while(Expression);

Si vous avez compris comment fonctionne while, vous devriez comprendre celle-ci aussi. Tant que l'expression entre les parenthèses du while est évaluée à true, on refait un tour, la boucle se termine donc dès qu'elle est évaluée à false comme vous pouvez le voir à la figure 8.4.

Image utilisateur

Figure 8.4 — Principe du do while
Mais alors pourquoi créer ces deux structures ? À première vue, elles paraissent très similaires, voire identiques. Mais un détail les différencie : le nombre d'itérations. La première structure de boucle qu'on a vue fera de 0 à n itérations. Cette dernière structure fera de 1 à n itérations.

Testons :

<?php

while(false)
{
    var_dump('while');
}
do
{
    var_dump('do while');
} while(false);

Si vous savez lire, vous constatez que « while » ne s'affiche jamais. L'expression étant false, la boucle ne fait pas une seule itération. Par contre, un « do while » s'affiche. Eh oui : même si l'expression du do while est évaluée à false, le bloc d'instructions sera quand même exécuté une fois. D'où la différence entre le nombre d'itérations que j'ai mentionnée ci-dessus.

Si jamais vous avez une erreur de ce type :

Parse error: syntax error, unexpected $end in MesRepertoires\page.php on line 21

C'est probablement que vous avez oublié de fermer une accolade ; alors vérifiez qu'elles aillent toujours par paires !

Vous aurez bientôt droit à un TP, foncez lire le chapitre sur les fonctions.
Mais si vous avez du mal à appréhender quelque chose, prenez votre temps, comme toujours !


Structure de boucle : partie I Les fonctions

Les fonctions

Structure de boucle : partie II Première approche

Je dois vous l'avouer, j'attendais ce chapitre depuis longtemps. En effet, dans ce chapitre, je vais vous expliquer un élément dont on s'est beaucoup servi, mais dont vous ignorez le fonctionnement : var_dump(). Comme vous devez vous en doutez vu le titre du chapitre, var_dump() est ce qu'on appelle une fonction.

Première approche

Les fonctions Votre première fonction

Première approche

On va commencer, comme à notre habitude, par une petite histoire.

Quand vous êtes de gentils petits garçons (ou de gentilles petites filles, pas de discrimination), il peut arriver que vous demandiez à votre maman de vous éplucher une pomme. Si elle voit votre grand sourire, elle dira oui, ira chercher une pomme, l'épluchera, la coupera et vous la servira sur une petite assiette.
En ne faisant que dire : « Tu peux m'éplucher une pomme ? », vous avez fait exécuter plusieurs actions à votre maman.
C'est le principe même d'une fonction.
Allons plus loin et demandons maintenant à maman si elle peut nous éplucher une orange. Elle va faire la même chose, à savoir : dire oui, aller chercher l'orange, l'éplucher, la couper et la servir sur une assiette.

En résumé, si vous dites : « Tu peux m'éplucher une pomme ? », votre mère exécute toutes les actions (prendre, éplucher, couper et servir) sur la pomme.
Si vous dites : « Tu peux m'éplucher une orange ? », elle fera les mêmes actions, mais sur une orange.

Une fonction est caractérisée par trois choses : son nom, ses paramètres et sa valeur de retour.
Si l'on applique ça à l'exemple précédent, le nom est « Tu peux m'éplucher », le paramètre est « une pomme » (ou « une orange ») et la valeur de retour est la pomme ou l'orange découpée servie sur une petite assiette.

Beaucoup d'appareils que vous utilisez tous les jours ont ce genre de fonction, par exemple une friteuse. La seule chose qu'on change, c'est la température à laquelle on veut chauffer la graisse et la friteuse fait le reste en fonction de ça.

Imaginez que vous ayez cinquante variables et que vous deviez calculer le volume de la sphère de rayon égal à la valeur de la variable. Il existe une formule, vous pourriez faire cinquante fois le calcul, un calcul par variable. Mais ça serait très long à écrire. Tandis que si vous faisiez une fonction, vous taperiez une fois la formule, puis il vous suffirait de taper le nom de la fonction avec les variables (qui seront les paramètres) et la fonction vous retournerait le volume de la sphère.

Pour résumé, une fonction est une structure, un objet auquel vous données des entrées sur lesquels elle travaille pour vous donner une sortie, comme illustré à la figure 8.1

Image utilisateur

Figure 8.1 — Principe d'une fonction, celle-ci nous monte un ordinateur à partir des composants


Les fonctions Votre première fonction

Votre première fonction

Première approche Souvenir, souvenir

Votre première fonction

Maintenant que vous savez quel est le but des fonctions, on va en créer une, voici le code :

<?php

function volumeSphere($rayon)
{
    return (4 * 3.14 * $rayon * $rayon * $rayon) / 3;
}

On va étudier ce code, mais d'abord le simplifier :

<?php

function NAME($PARAM)
{
    // bloc d'instructions
    return Expression;
}

Voilà le code minimal pour créer une fonction (je mens, vous comprendrez après pourquoi).
Tout d'abord, il y a le mot-clé function, il indique au PHP qu'on veut déclarer une fonction (à ne pas confondre avec une déclaration de variable). Vient ensuite le nom de la fonction, ici NAME, c'est avec ce nom que vous appellerez la fonction par la suite.
Entre les parenthèses, vous trouvez $PARAM, c'est une variable, c'est un paramètre (une information dont la fonction a besoin pour faire son job).
On trouve aussi des accolades, comme pour les structures de contrôle ; et un dernier mot-clé subsiste : return. Ce mot-clé indique quelle expression la fonction doit retourner.
Si on l'applique à l'exemple de départ, on aurait une fonction du genre :

<?php

function tuPeuxMeplucher($type)
{
    return couper(eplucher(prendre($type)));
}

Pour appeler cette fonction et donc recevoir un fruit, on aurait un code du style :

<?php

$fruit = 'Une pomme';
var_dump(tuPeuxMeplucher($fruit));

Revoilà notre var_dump()… il va nous servir. C'est une fonction. Souvenez-vous de ce que j'ai dit sur son utilisation : j'ai dit qu'il fallait mettre une expression entre les parenthèses pour afficher le type et la valeur de l'expression.
Ce qui sous-entend que… ? Eh oui, une fonction peut être une expression. Souvenez-vous de ce qu'est une expression, quelque chose qui possède une valeur. Une fonction retourne une expression, or une expression est une valeur : une fonction retourne donc une valeur. Et comme la fonction retourne une valeur, elle possède forcément une valeur, ce qui implique que c'est une expression (je vous conseille de relire deux ou trois fois cette phrase, soyez sûr de la comprendre).

J'ai dit que je vous mentais : c'est vrai. Le mot-clé return qui indique quelle expression doit retourner la fonction n'est pas indispensable. On peut l'enlever, la fonction ne retournera donc rien et ce ne sera donc pas une expression. Si toutefois vous tentez de l'utiliser comme une expression, par exemple dans une addition, l'interpréteur PHP agira de la même façon qu'avec une variable qui n'existe pas et considèrera que la fonction retourne null.
En général, on utilise davantage de fonctions qui retournent des valeurs, mais il existe des tas de fonctions qui n'en retournent pas — un exemple que vous connaissez bien est var_dump(). Essayez donc de faire un var_dump() d'un var_dump() pour voir.

<?php

var_dump(var_dump(1));

var_dump(1) affiche « int(1) », c'est son rôle, mais ne retourne rien comme je vous l'ai dit. Et donc le var_dump() englobant nous affiche un triste et solitaire null.