Le PHP, c’est quoi ?

Le langage PHP (PHP: Hypertext Preprocessor) est un langage de script côté serveur, principalement utilisé pour le développement web dynamique. Contrairement à JavaScript qui s’exécute dans le navigateur, PHP s’exécute sur le serveur et génère du HTML envoyé au client.

Convention

PHP utilise principalement le Camel case pour les variables et fonctions. Par exemple, on écrira $maVariable. Les opérations comportent généralement un espace :

php
1
2
3
<?php
echo 2 + 1;
?>
Points-virgules et accolades

PHP utilise des accolades {} pour définir les blocs et nécessite un point-virgule ; à la fin de chaque instruction. Toutes les variables commencent par $.

Toutes les conventions sont disponibles sur PSR (PHP Standards Recommendations).

Les types et variables

Différences entre port��e globale et locale

Portée des variables en PHP

En PHP, les variables déclarées en dehors d’une fonction ont une portée globale, mais ne sont pas accessibles directement dans les fonctions.

php
1
2
3
4
5
6
7
<?php
$x = 10;
function test() {
    // $x n'est pas accessible ici sans le mot-clé global
    echo $x; // Warning: Undefined variable
}
?>

Pour accéder à une variable globale dans une fonction, il faut utiliser le mot-clé global :

php
1
2
3
4
5
6
7
8
<?php
$x = 10;
function test() {
    global $x;
    echo $x; // 10
}
test();
?>

Les variables locales sont limitées à la fonction où elles sont déclarées :

php
1
2
3
4
5
6
7
8
<?php
function test() {
    $y = 20; // variable locale
    echo $y; // 20
}
test();
echo $y; // Warning: Undefined variable
?>

Les variables

php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
$age = 80;
$nom = "Jean";
$etudiant = true;
$animaux = ["chien", "chat", "poisson", "chameau"];
echo $age . "\n";
echo $nom . "\n";
print_r($animaux);
echo "Le type de 'age' est " . gettype($age) . ", celui de 'nom' est " . gettype($nom) . " et le type de 'animaux' est " . gettype($animaux) . "\n";
?>
À savoir

Le type du tableau animaux est un array.

PHP est un langage dit “orienté objet”, ce qui signifie qu’il est possible d’encapsuler des concepts en objets.

php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
class Voiture {
    public $marque;
    public $nom;
    public function __construct($marque, $nom) {
        $this->marque = $marque;
        /*
          le `$this->marque` définit l'attribut de la classe, le `$marque` est le paramètre de la fonction
        ,*/
        $this->nom = $nom;
    }
    public function donneInfo() {
        echo "La voiture {$this->nom} est de marque {$this->marque}\n";
    }
}
// On instancie 2 voitures différentes
$voiture1 = new Voiture("Toyota", "Corolla");
$voiture2 = new Voiture("Renault", "Espace");
$voiture1->donneInfo();
$voiture2->donneInfo();
?>

PHP est un langage à typage dynamique, mais depuis PHP 7, il est possible de déclarer des types stricts pour les paramètres et valeurs de retour.

Redéfinitions des types

Les types
php
1
2
3
4
5
6
7
8
<?php
$age = 20;
var_dump(is_string($age)); // bool(false)
echo "Changement de la variable 'age' en string\n";
$age = "tomate";
echo $age . "\n";
var_dump(is_string($age)); // bool(true)
?>
À savoir

Même si utiliser == semble fonctionner, il est recommandé de ne pas l’utiliser. Privilégiez === pour la vérification stricte des types (valeur ET type).

Entrées / sorties

Les entrées

En ligne de commande

Demander une entrée utilisateur avec readline() ou fgets(STDIN) :

php
1
2
3
4
5
<?php
echo "Quel est votre nom ? ";
$nom = trim(fgets(STDIN));
echo "Bonjour $nom !\n";
?>

Dans un formulaire web

html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Formulaire</title>
</head>
<body>
    <form method="POST" action="traitement.php">
        <label>Nom : <input type="text" name="nom"></label>
        <button type="submit">Envoyer</button>
    </form>
</body>
</html>
php
1
2
3
4
5
6
7
<?php
// traitement.php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $nom = htmlspecialchars($_POST["nom"]);
    echo "Bonjour $nom !";
}
?>

Les sorties

Version console

php
1
2
3
4
5
<?php
echo "Hello World !";
// ou
print "Hello World !";
?>

Version site (texte)

php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8"/>
    <link href="style.css" rel="stylesheet"/>
    <title>Ex 1</title>
  </head>
  <body>
    <h1>Ex 1</h1>
    <p id="texte_a_changer">
        <?php echo "Hello World !"; ?>
    </p>
  </body>
</html>
Décomposition
  • <?php : balise d’ouverture PHP
  • echo : affiche du texte ou du HTML
  • ?> : balise de fermeture PHP (optionnelle en fin de fichier)
  • Le contenu PHP est exécuté côté serveur avant d’envoyer le HTML au client

Version avec JavaScript pour manipulation DOM

html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8"/>
    <link href="style.css" rel="stylesheet"/>
    <title>Ex 1</title>
  </head>
  <body>
    <h1>Ex 1</h1>
    <p id="texte_a_changer"></p>
  </body>
       <script>
         // PHP peut générer du JavaScript
         let texte = document.getElementById("texte_a_changer");
         texte.textContent = "<?php echo 'Hello World depuis PHP !'; ?>";
       </script>
</html>

Les fonctions

php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
function maFonction($age) {
  if (!is_numeric($age)) {
    echo "Veuillez rentrer un nombre.\n";
    $age = readline("Quel est votre âge ? ");
    return maFonction($age);
   /*
   Ici on return la même fonction si la condition `!is_numeric` (n'est pas un nombre) est vraie, c'est la récursivité.
   C'est utilisé pour ce genre de code demandant un input à l'utilisateur pour éviter les erreurs d'entrées.
   C'est aussi utile pour les PGCD et autres formules mathématiques.
   ,*/
  }
  $age = intval($age);
  $age = $age + 1;
  echo "Vous avez $age ans\n";
}
$age_utilisateur = readline("Quel est votre âge ? ");
maFonction($age_utilisateur);
?>
Typage strict (PHP 7+)

Depuis PHP 7, il est possible de déclarer des types stricts :

php
1
2
3
4
5
6
7
8
<?php
declare(strict_types=1);
function addition(int $a, int $b): int {
    return $a + $b;
}
echo addition(5, 3); // 8
// echo addition("5", 3); // TypeError
?>

Les conditions

Les conditions permettent de vérifier si une valeur est vraie ou fausse.

php
1
2
3
4
5
6
7
8
<?php
$age = readline("Âge ? ");
if ($age < 18) {
  echo "Tu es mineur\n";
} else {
  echo "Tu n'es pas mineur\n";
}
?>

Boucles

Boucle for

php
1
2
3
4
5
<?php
for ($i = 0; $i < 7; $i++) {
  echo $i . "\n";
}
?>

Boucle while

php
1
2
3
4
5
6
7
<?php
$i = 0;
while ($i < 5) {
  echo $i . "\n";
  $i++;
}
?>

Boucle foreach (spécifique aux tableaux)

php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$animaux = ["chien", "chat", "poisson", "chameau"];
// Parcourir les valeurs
foreach ($animaux as $animal) {
    echo $animal . "\n";
}
// Parcourir avec index et valeur
foreach ($animaux as $index => $animal) {
    echo "$index: $animal\n";
}
?>

Switch

En PHP, le switch permet de comparer une expression à plusieurs valeurs possibles.

php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php
$t = readline("Saisir un caractère : ");
switch ($t) {
    case "a":
    case "e":
    case "i":
    case "o":
    case "u":
    case "y":
        echo "C'est une voyelle\n";
        break;
    default:
        echo "Pas une voyelle\n";
        break;
}
?>
Décomposition
  • switch($expression) évalue l’$expression
  • Chaque case compare la valeur de l’expression
  • break empêche l’exécution des cases suivantes
  • default est exécuté si aucune valeur ne correspond

Différences principales avec JavaScript

Tableau comparatif
AspectJavaScriptPHP
ExécutionCôté client (navigateur)Côté serveur
Variableslet, const, var$variable
Concaténation+ ou template literals. ou "$var"
Affichageconsole.log()echo, print
Tableaux[] (Array)[] (array)
Comparaison stricte======
Fin d’instructionPoint-virgule optionnelPoint-virgule obligatoire
TypageDynamique uniquementDynamique + strict (PHP 7+)