Les bases du PHP

Un site dynamique c'est quoi ?

Deux types de sites
Le site statique :
Offre une réponse unique, toujours identique pour une ressource donnée quelque soit la requête.
Le site dynamique :
Offre une réponse variable selon la requête, permet d'échanger des données avec un utilisateur et de traiter des données.
Comment ça marche ?





1
4
2
3
1 - Le client envoie une requête au serveur.
2 - Le serveur demande à un langage backend de générer la page.
3 - Le langage renvoie la page générée au serveur.
4 - Le serveur renvoi la page au client.
Les différents langages et leurs avantages.
Théoriquement, tous les langages peuvent être utilisés. Dans les faits, certains sont plus adaptés que d'autres.

Python :
Langage puissant, beaucoup de librairies, très bonne communauté, un peu difficile à déployer.
Ruby :
Langage élégant, communauté très brouillonnes, insupportable à déployer.
.NET :
Langage puissant mais propriétaire, déployable que sur du Windows.
PHP :
Langage simple, puissant, beaucoup de librairies, très simple à déployer, communauté noob friendly.
Il existe encore d'autres langages, notamment Javascript + Node.js et Java...
Trouver de la documentation

La doc officielle
La doc officielle de PHP est la meilleure doc de TOUS les langages de programmation.
Langue :
Anglais, Français, Espagnol, Chinois ou ce que vous voulez !
Utile pour :
Trouver ce que fait une fonction, trouver des exemples d'utilisation, trouver une fonction pour effectuer une tâche simple.
Google et Stackoverflow
Stackoverflow est le plus gros forum de développeurs. Utile pour tous les langages !
Langue :
Anglais. Éventuellement français, mais moins complet.
Utile pour :
Trouver comment effectuer une tâche. Trouver un module/outils. Résoudre un bug.
De façon général, trouver une solution à un problème.
Packagist
Packagist est le plus grand répertoire de bibliothèques PHP.
Langue :
Anglais.
Utile pour :
Trouver une lib pour effectuer certaines tâches, trouver des clients pour des APIs, etc.
PHP c'est quoi ?



Définition
Création :
1994 par Rasmus Lerdorf
Paradigme :
Impératif & Objet
Type de langage :
Interprété
Licence :
Logiciel libre sous Licence PHP 3.01, type BSD sans copyleft.
Utilisation :
Principalement Web
Version actuelle :
7.2
Créer un script PHP


Un script PHP, c'est juste du texte !
Comme PHP est un langage interprété, pour créer un script PHP il suffit de créer un fichier texte et d'y écrire des instructions PHP. On ajoute l'extension ".php".
Quand PHP traite un fichier, il cherche les balises d'ouverture et de fermeture (<?php et ?>) qui délimitent le code qu'il doit interpréter.
Donc tout le code PHP doit commencer par "<?php" et finir par "?>".
Exemple d'un fichier qui affiche les infos de version et config de PHP :
<?php
echo "Ci-dessous les infos sur votre PHP :\n";
phpinfo();
?>PS : Le "?>" à la fin est optionnel et souvent retiré pour éviter que des retours à la lignes ou des espaces traînent dans le rendu final.
Exécuter un script PHP
Une fois votre fichier PHP créé, vous allez devoir l’exécuter. Il existe principalement deux façon d’exécuter des fichiers PHP.
En ligne de commande :
Cela vous permet par exemple de lancer des tâches ponctuelles, ou d'utiliser PHP pour de l'administration système.
Via un serveur web :
Méthode la plus utilisée, elle permet de faire des sites avec PHP.
Exécuter un script en ligne de commande
Pour exécuter un script en ligne de commande, rien de plus simple, il suffit d'appeler l’interpréteur PHP et de lui donner le script en argument.
php ./chemin_vers_votre_fichier.phpNote : Il est aussi possible d'utiliser un shebang !
Faire exécuter un script par le serveur web
Pour exécuter un script depuis un serveur web, il faut mettre le fichier dans un dossier auquel le serveur pourra accéder (souvent /var/www/html/).
Il faut également activer le mode PHP sur le serveur pour le dossier en question.
Enfin, il suffit d'accéder à l'adresse du serveur depuis votre navigateur, en demandant d'accéder à ce script en particulier. Ex : http://votreaddresse.loc/fichier.php
Ligne de commande != serveur
Attention, certaines fonctionnalités disponibles quand PHP est exécuté depuis un serveur web ne le sont pas depuis une ligne de commande.
En effet, certaines fonctionnalités n'ont de sens que dans un cadre "web", par exemple l'analyse d'une requête HTTP, l'accès aux arguments POST & GET, etc.
Normalement, cela est indiqué dans la documentation de PHP.
Utiliser des variables

C'est quoi une variable ?
Les variables sont un moyen de stocker sous un nom unique une valeur qui sera utilisée dans le programme.
La valeur d'une variable peut évoluer au cours de l’exécution du programme.
Créer une variable en PHP
En PHP, les variables commencent par un "$". Pour définir la valeur d'une variable on utilise le signe "=".
<?php
$nombre_cotes_carre = 4;Un nom de variable ne doit contenir que des lettres (sans accents), des chiffres ou des _ et commencer par une lettre.
Dans certains langages (C par exemple), toutes les variables doivent être définies en amont. En PHP une variable peut être définie à tout moment.
Modifier une variable
Pour modifier une variable, il suffit de lui assigner de nouveau une valeur.
<?php
$reponse = 42;
$reponse = 43;
$reponse = 'Et maintenant 44';Lors de la modification d'une variable il est possible de changer totalement le type de données stockées.
Les types

PHP utilise un typage dynamique faible !
Trois conséquences :
1. Les variables n'ont pas besoin d'être déclarées au début du programme (comme en C).
2. PHP utilise du ducktyping, donc on ne déclare pas le type des variables.
3. On peut combiner des variables de types différents.
Les types de base en PHP
Dans un langage, plusieurs type de valeurs peuvent exister, nombre entier, nombre flottant, chaîne de caractères, etc..
En PHP les différents types les types de base sont :
boolean : Des booléens, càd vrai (true) ou faux (false)
int : Un chiffre entier
float : Un chiffre à virgule
string : Une chaîne de caractère
<?php
$un_int = 12;
$un_float = 66.6;
$une_string = 'Bonjour le monde !';
$une_autre_string = "Bonjour le monde 2 !";
$un_boolean = false;Les types spéciaux en PHP
En PHP, il existe aussi deux types spéciaux.
NULL : Correspond à une valeur vide.
ressource : Les ressources correspondent à des types de références. Elles ne sont jamais utilisées manuellement.
<?php
$null = null;PS : Null ça sert à quoi ? Le plus souvent à définir un retour vide que l'on veut clairement différencier d'un false.
Les tableaux en PHP
Certains types plus complexes existent, le plus utilisé est array, qui sert à définir un tableau.
<?php
$un_tableau = array('premier_element', 'second_element');
$un_tableau_2 = ['premier_element', 'second_element'];Un tableau peut être défini avec la fonction array, ou les signes "[" et "]".
Un tableau peut contenir différents types de variables.
<?php
$un_tableau_mix = ['string', 42, 66.6, false];Un tableau peut aussi utiliser des clefs ou indexes numériques qui permettront d'accéder à une entrée du tableau.
<?php
$scores = [
'pierre' => 10,
'paul' => 8,
'jacques' => 15,
];Pour accéder à une entrée d'un tableau, on utilise soit une clef du tableau.
<?php
$scores = [
'pierre' => 10,
'paul' => 8,
'jacques' => 15,
];
echo $scores['paul']; //affichera 8Soit un index numérique. Le premier élément étant numéroté 0.
<?php
$un_tableau_mix = ['string', 42, 66.6, false];
echo $un_tableau_mix[1]; //affichera 42Gérer et afficher du texte
Créer et afficher une chaîne en PHP
Pour afficher une chaîne en PHP, rien de compliqué, il vous suffit d'utiliser l'instruction "echo".
<?php
$str1 = 'Bonjour le monde !';
$str2 = "Bonjour le monde !";Pour créer une chaîne, vous pouvez utiliser soit des simples soit des doubles guillemets.
<?php
echo 'Bonjour le monde !';Mélanger des chaînes et des variables
<?php
$age = 19;
echo 'Vous avez ' . $age . ' ans.';Souvent, vous aurez besoin de mélanger des chaînes de caractères et des variables. Pour cela on utilise la concaténation. PHP possède sont propre opérateur pour a concaténation, ".".
Dans une chaîne entre double guillemets, les variables sont directement interprétées.
<?php
$age = 19;
echo "Vous avez $age ans.";Échapper des caractères
<?php
echo 'J\'aime les fruits en sirop !';Comment faire si vous devez écrire ' dans une chaîne comprise entre des ' ?
Rien de plus simple, précédez la par un anti-slash "\".
Mais comment écrire un anti-slash alors ? Pareil !
<?php
echo 'Par contre j\'avoue, on a pas souvent besoin d'écrire un \\...';Écrire du texte avec ET sans PHP
Nous l'avons déjà dit, PHP n'interprète QUE le code entre les balises PHP.
Bonjour <?php echo 'le monde'; ?> !Cela signifie donc que nous pouvons écrire une partie du texte de façon fixe, et une partie de façon dynamique.
Ce code affichera donc "Bonjour le monde !".
Écrire du HTML
Vous savez écrire du texte ? Bah alors vous savez comment écrire du HTML.
Pourquoi ? Tout simplement parce-que HTML, c'est juste du texte.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>title</title>
</head>
<body>
<?php echo "Bonjour le monde !"; ?>
</body>
</html>Les opérateurs en
PHP

Les opérateurs mathématiques
+ : Addition
- : Soustraction
* : Multiplication
/ : Division
% : Modulo
** : Puissance
<?php
echo 5 + 3; //8
echo 5 - 3; //2
echo 5 * 3; //15
echo 5 / 3; //1.6666666666667
echo 5 % 3; //2
echo 5 ** 3; //125Les opérateurs de comparaison
== : Égalité
=== : Égalité et même type
< : Inférieur
> : Supérieur
<= : Inférieur ou égal
>= : Supérieur ou égal
!= : Différent
!== : Différent ou pas même type
<=> : -1 si gauche inférieur, 0 si égaux, 1 si gauche sup
<?php
5 == '5'; //True
5 === '5'; //False
5 < 3; //False
5 > 3; //True
5 <= 3; //False
5 >= 5; //True
5 != 5; //False
5 !== '5'; //True
5 <=> 5; //0
5 <=> 6; //-1
6 <=> 5; //1Les opérateurs
logiques
&& ou and : Et logique
|| ou or : Ou logique
xor : Ou exclusif
! : Négation (inverseur)
<?php
true && true; //True
true && false; //False
true || true; //True
true || false; //True
false || false; //False
true xor false; //True
false xor false; //False
true xor true; //False
!true; //False
!false; //TrueOpérateurs d'affectation
= : Assignation
+= : Addition et assignation
-= : Soustraction et assignation
*= : Multiplication et assignation
/= : Division et assignation
$a++ : Incrémentation
$a-- : Décrémentation
.= : Concaténation et assignation
<?php
$a = 10;
$a += 10; //20
$a -= 10; //10
$a *= 3; //30
$a /= 3; //10
$a++; //11
$a--; //10
$a .= ' Kilos'; //10 KilosLes conditions en PHP

Les conditions
Dans tous les langage de programmation il est possible d'écrire des portions de codes exécutées uniquement si certaines conditions sont remplies.
Généralement, on retrouve 3 types de conditions : Si, sinon si et sinon.
En PHP, on retrouve donc ces trois conditions : if, elseif et else.
La condition if
Une condition if est toujours formée de trois parties.
1 - Le mot clé if
2 - Une expression représentant la condition à tester
3 - Le bloc de code a exécuter si la condition est valide
<?php
$vrai = true;
if ($vrai == true)
{
echo 'Afficher si $vrai est vrai';
}La condition if permet d’exécuter un bloc de code uniquement si une condition est remplie.
La condition else
Une condition else est toujours formée de deux parties.
1 - Le mot clé else
2 - Le bloc de code a exécuter si la condition est valide
<?php
$vrai = false;
if ($vrai == true)
{
echo 'Afficher si $vrai est vrai';
}
else
{
echo 'Afficher si $vrai est faux';
}La condition else permet d’exécuter un bloc de code uniquement si une condition if précédente n'as pas été remplie.
La condition elseif
Une condition elseif est toujours formée de deux parties.
1 - Le mot clé elseif
2 - La condition à tester
3 - Le bloc de code a exécuter si la condition est valide
<?php
$chiffre = 10;
if ($chiffre == 5)
{
echo 'Afficher si chiffre est égal à 5';
}
elseif ($chiffre == 10)
{
echo 'Afficher si chiffre est égal à 10';
}La condition elseif permet d’exécuter un bloc de code uniquement si une condition if précédente n'as pas été remplie et si la condition elseif est remplie.
Petite astuce
Par imaginons que nous voulions afficher un bloc de texte ou un autre, selon une option. Plutôt que de tout afficher avec echo, on peut jouer avec les balises PHP !
<?php
$chiffre = 10;
if ($chiffre == 5)
{
?>
Afficher si chiffre est égal à 5
<?php
}
elseif ($chiffre == 10)
{
?>
Afficher si chiffre est égal à 10
<?php
}Il est possible de combiner l'astuce du texte fixe et l'utilisation des conditions.
Les boucles en PHP

Les boucles
Dans tous les langage de programmation il est possible d'écrire des portions de codes qui seront répétées tant qu'une condition est remplie.
En PHP, on utilise principalement trois boucles : while, for et foreach.
Ce concept est généralement nommé boucle.
La boucle while
Une boucle while est toujours formée de trois parties.
1 - Le mot clé while
2 - Une expression représentant la condition à tester
3 - Le bloc de code a exécuter tant que la condition est valide
<?php
$i = 0;
//Affichera tous les nombre de 0 à 9
while ($i < 10)
{
echo $i . "\n";
$i++;
}La boucle while permet d’exécuter un bloc de code tant qu'une condition est remplie.
La boucle for
Une boucle for est formée comme une while mais, la condition prend une autre forme :
(initialisation_variable ; condition ; action_à_chaque_tour)
<?php
//Affichera tous les nombre de 0 à 9
for ($i = 0; $i < 10; $i++)
{
echo $i . "\n";
}La boucle for est une boucle while qui permet aussi d'initialiser une variable et d'effectuer une action à la fin chaque tour.
La boucle foreach
Une boucle foreach n'utilise pas une condition mais une expression de la forme :
($liste as $key => $element)
<?php
$liste = [
'Iron Man' => 'Tony Stark',
'Spider Man' => 'Peter Parker',
'Black Panther' => 'T\'challa',
];
//Affichera l'identité de chaque héro
foreach ($liste as $hero => $civil)
{
echo 'La vraie identité de ' . $hero . ' est ' . $civil . "\n";
}La boucle foreach est une boucle qui va parcourir tous les éléments d'un Iterable (càd généralement un tableau).
Note : la partie "$key =>" n'est pas obligatoire, mais alors vous ne pouvez pas accéder à la clef.
Les fonctions en PHP

Les fonctions
Souvent, on a besoin d'utiliser plusieurs fois les mêmes bouts de code. Pour cela, il existe les fonctions.
En PHP on peut distinguer deux types de fonctions. Les fonctions internes au langage, qui sont disponible naturellement, et les fonctions créées par l'utilisateur.
Les fonctions sont des sortes de sous programmes indépendants du reste du programme et qui peuvent être appelés n'importe où et autant de fois que nécessaire dans le reste du programme.
Comment ça marche ?
Fondamentalement, une fonction faits les choses suivantes :
1 - Elle possède un nom unique
2 - Elle attend des données passées en arguments
3 - Elle effectue une série d'opération (souvent en utilisant les données passées)
4 - Elle retourne une valeur qui pourra être récupérée par le reste du programme quand elle sera appelée.
5 - Elle isole son contenu du reste du programme, càd qu'on ne peut pas accéder aux données de la fonctions depuis le reste.
Exemple d'utilisation d'une fonction
Imaginons que nous voulions trouver le nombre de caractères dans une chaîne.
C'est un besoin simple, et PHP a donc probablement une fonction interne pour ça. En cherchant, on trouve la fonction strlen.
Cette fonction demande au minimum un argument et retourne un chiffre (int au début).
Pour compter une chaîne, nous allons donc devoir appeler la fonction en lui passant cette chaîne en argument.
<?php
$str1 = 'Les framboises sont perchées sur le tabouret de mon grand père.';
$str2 = 'Faut pas respirer la compote, ça fait tousser.';
echo '$str1 fait ' . strlen($str1) . ' caractères et $str2 ' . strlen($str2) . ' caractères.';
//va afficher : $str1 fait 65 caractères et $str2 47 caractères.
Exemple d'utilisation d'une fonction
Imaginons que nous voulions maintenant remplacer tous les 'o' par des 'a' dans une chaîne.
Il existe aussi une fonction pour ça, str_replace.
Cette fonction demande plusieurs arguments, et le dernier, $count, est optionnel (indiqué par des []).
Comment passer les différents arguments pour que PHP sache lequel correspond à quoi ? C'est tout simple, il suffit de respecter l'ordre !
<?php
$str1 = 'toto';
//va afficher : tata
echo str_replace('o', 'a', $str1);

Une fonction peut donc avoir plusieurs arguments, et mêmes des arguments optionnels, càd que nous ne somme pas obligés de renseigner.
Et si on veut remplacer seulement le premier caractère ? Et bien on défini l'argument $count !
<?php
$str1 = 'toto';
//va afficher : tato
echo str_replace('o', 'a', $str1, 1);
Créer une fonction personnalisée
Imaginons que nous voulions créer une fonction qui affiche "est carré".
Pour créer une fonction, nous allons utiliser :
1 - L'instruction function
2 - Un bloc d'arguments (qui pour nous sera vide)
3 - Un bloc de code à executer
<?php
function square ()
{
echo "est carré.";
}
//Affichera : est carré.
square();Ajouter des arguments
Maintenant, affichons 'est carré' seulement si un rectangle est vraiment un carré.
Pour cela il nous faut deux arguments, hauteur et largeur.
<?php
function square ($height, $width)
{
if ($height == $width)
{
echo "est carré.";
}
}
//Affichera : est carré.
square(10, 10);
//Affichera rien
square(5, 10);Utiliser les retours
Imaginons que nous voulions effectuer un traitement particulier dans le reste du programme sur les carrés.
Dans ce cas, afficher "est carré" ne nous sert à rien.
Nous avons besoin d'un moyen de savoir au niveau du programme que nous avons affaire à un carré.
Seulement, on ne peut pas accéder aux variables de la fonction depuis l'extérieur.
Pour résoudre le problème, il suffit de demander à la fonction de retourner au reste du programme la valeur qui nous intéresse.
Pour retourner une valeur depuis une fonction, il suffit d'utiliser l'instruction return.
Quand le programme tombe sur return à l'intérieur d'une fonction, il renvoi la valeur et quitte la fonction. On peut alors récupérer la valeur en l'assignant à une variable comme d'habitude.
<?php
function square ($width, $height)
{
if ($width == $height)
{
return true;
}
return false;
}
$is_square = square(10, 10);
if ($is_square)
{
echo '10 et 10 c\'est bien carré !';
}
$is_square = square(5, 10);
if ($is_square)
{
echo '5 et 10 c\'est pas très carré !';
}Utiliser des arguments optionnels
Imaginons que nous voulions faire une fonction qui fait une puissance sur un chiffre.
Par défaut, on veut faire une puissance de 2, mais ont veut pouvoir faire d'autres puissance.
Le plus simple pour cela serait de créer un argument "exposant" qui vaut 2 par défaut s'il n'est pas renseigné et qui pourras être modifié.
À savoir, on ne peut écrire les arguments optionnels qu'après les arguments obligatoires.
Et on peut en mettre autant qu'on veut.
Un argument optionnel est un argument comme un autre, avec une valeur définie par défaut.
<?php
function puissance ($chiffre, $exposant = 2)
{
return $chiffre ** $exposant;
}
//25
echo puissance(5);
//125
echo puissance(5, 3);Définir des types
Depuis PHP 8 un effort a été fait pour améliorer le typage des variables afin d'améliorer la qualité du code.
Il est également possible de définir plusieurs types pour un même paramètre/retour, avec le pipe "|"
Pour cela il suffit de déclarer le type attendu avant le nom du paramètre, et de faire suivre la fonction de ": nom du type".
Cela se traduit principalement par le fait de pouvoir déclarer le type des paramètres attendus par une fonction, ainsi que le type de données retournées par la fonction.
<?php
function power(int|float $value, int $power)
{
//...
}<?php
function square (int $width, int $height): bool
{
//...
}
Et même de définir des paramètres qui peuvent êtres nuls en précédent le type d'un "?"
<?php
function power(int|float $value, ?int $power)
{
//...
}Utiliser plusieurs fichiers



L'inclusion
Quand un programme deviens un peu complexe, on se retrouve souvent à avoir besoin de le séparer en différents fichiers pour pouvoir l'organiser.
Pour répondre à ce type de besoins, PHP propose un mécanisme nommé inclusion.
Le principe de l'inclusion est d'insérer dynamiquement un fichier PHP à l'intérieur d'un autre et de l’exécuter.
Comment ça marche ?
Le programme principale est exécuté ligne par ligne.
Une fois arrivé sur la ligne d'inclusion, PHP va chercher le programme à inclure, et l’exécuter ligne par ligne.
Arrivé à la fin du fichier inclus, l’exécution du programme principale reprend à la ligne suivante. Son contexte a été modifié par celui du programme inclus.
Le programme inclus hérites alors de tout le contexte du programme principale.
Comment ça marche ?
Le programme principale est exécuté ligne par ligne.
Une fois arrivé sur la ligne d'inclusion, PHP va chercher le programme à inclure, et l’exécuter ligne par ligne.
Arrivé à la fin du fichier inclus, l’exécution du programme principale reprend à la ligne suivante. Son contexte a été modifié par celui du programme inclus.
Le programme inclus hérites alors de tout le contexte du programme principale.
Exemple d'inclusion
Pour inclure un fichier dans un autre, on utilise l'instruction include, qui prend en argument le chemin du fichier à inclure.
Imaginons que nous voulions inclure le fichier enfant.php dans le fichier parents.php, situé dans le même répertoire.
<?php
echo "Range ta chambre !";
include('./enfant.php');<?php
echo "Tout à l'heure !";parents.php
enfant.php
Range ta chambre !
Tout à l'heure !Inclusion plus poussée
Imaginons que nous voulions découper séparer d'un coté des fonctions et d'un autre la logique métier.
<?php
include('./functions.php');
if (square(10, 10))
{
echo "Carré !"
}<?php
function square ($width, $height)
{
return ($width == $height);
}metier.php
functions.php
Ce code affichera donc "Carré !".
Avec ce code, on vois que le contexte du fichier metier.php a fusionné avec celui de functions.php, puisqu'il a désormais accès aux fonctions définies à l'intérieur de celui-ci.
Dans le cas présent, le fichier functions.php ne définis pas de variables particulières. Si cela avait été le cas, elles auraient été disponibles pour metier.php
D'autres fonctions d'inclusion
La fonction include n'est pas la seule permettant d'inclure un fichier. Il existe d'autres fonctions faisant la même choses, mais avec quelques particularités.
include_once : Même comportement que include, mais n'inclura le fichier qu'une seule fois. S'il a déjà été inclus, l'instruction sera ignorée.
require : Même comportement que include, mais arrête le programme si le fichier n'est pas trouvé.
require_once : Comme require, mais n'inclura le fichier qu'une seule fois.
TP : Créer un site meteo

Créer un site méteo simple
L'objectif de ce TP est de créer un site web très simple pour se familiariser avec les bases de PHP.
Ce site contiendra 3 pages, une page d'accueil avec la date, une page affichant la météo à J+4 de Paris , et une page affichant celle de Bordeaux.



index.php
paris.php
bordeaux.php
Petite subtilité, si l'heure est comprise entre 07h00 et 19h00, le fond du site sera blanc et le texte noir.
Sinon, il sera bleu nuit et le texte sera blanc.
Text
Text
Récupérer les données météo
Pour récupérer les données météo, on va simplement utiliser le widget du site https://www.prevision-meteo.ch/services.
Pour Paris : https://www.prevision-meteo.ch/uploads/widget/paris_0.png
Pour Bordeaux : https://www.prevision-meteo.ch/uploads/widget/bordeaux_0.png
Pour j+1, on remplace 0 par 1, j+2 par 2... jusqu'à 4.
Les bases du PHP
By plebweb
Les bases du PHP
- 1,132