learn-php.org offline
version off-line de https://www.learn-php.org/fr/

Table des matières

1. Introduction

Ce document est une version statique du tutoriel https://www.learn-php.org/fr/ utilisable hors-ligne. L'exécution PHP est à effectuer via un interpréteur PHP installé localement.

Les solutions des exercices sont compilés en fin de document.

2. Salut, tout le monde !

PHP est le langage de programmation le plus couramment utilisé pour le Web aujourd'hui. PHP est très courant parce qu'il a une architecture relativement simple comparé à d'autres frameworks Web basé MVC (Python, Ruby, node.js, etc).

À la différence d'autres frameworks Web standards, un fichier PHP est en fait un fichier HTML "amélioré", qui est aussi capable d'exécuter du code au sein d'un document. Ainsi, vous pouvez commencer par exemple avec une simple page HTML qui ressemble à ceci :

<html>
<head></head>
<body>
Salut !
<?php ?>
</body>
</html>

Ensuite, vous ajoutez une section PHP qui exécute du code PHP, et écrit le résultat sous forme d'HTML. Remarquez que la ligne PHP disparaît quand on l'exécute, puisque le code PHP est remplacé par son résultat.

Essayons d'ajouter le nom de l'utilisateur.

<?php $user = "Jean"; ?>
<html>
<head></head>
<body>
Salut <?php echo $user; ?> !
</body>
</html>

Par contre, dans ce tutoriel, nous nous concentrerons sur l'apprentissage de PHP comme langage de programmation et non sur le développement Web. Ainsi, nous n'utiliserons pas du tout HTML, et nous concentrons sur l'écriture de code plutôt que le rendu de pages Web.

Dans nos tutoriels, nous ouvrirons et fermerons toujours une balise PHP (commençant par <?php et se terminant par ?>) au début et à la fin de notre code.

Pour tester notre code, nous pouvons afficher des messages sur notre console en utilisant la commande echo.

2.1. Exercise

Afficher "Salut, tout le monde !" sur la console.

2.1.1. Code de départ

<?php
    echo "Au-revoir, tout le monde !";
?>

2.1.2. Sortie attendue

Salut, tout le monde !

3. Variables et types

3.1. Tutoriel

Pour définir une variable, utilisez simplement la syntaxe suivante :

$x = 1;
$y = "foo";
$z = True;

Nous avons juste défini une variable nommée x avec le nombre 1, une variable nommée y avec la chaîne "foo" et une variable nommée z avec la valeur booléenne True (vrai). Une fois qu'elles sont définies, on peut les utiliser dans le code.

PHP a de nombreux types de variables, mais les types les plus basiques pour les variables sont les entiers (nombres entiers), flottants (nombres réels), chaînes et booléens.

PHP a aussi des tableaux et des objets que nous expliquerons dans d'autres tutoriels.

Les variables peuvent aussi être mises à NULL, ce qui signifie que ces variables existent, mais ne contiennent aucune valeur.

3.1.1. Opérateurs

Nous pouvons utiliser des opérateurs d'arithmétique simple pour ajouter, soustraire ou concaténer entre variables.

Nous pouvons aussi afficher des variables PHP en utilisant la commande echo (vous pouvez l'essayer maintenant).

Par exemple, faisons l'addition de deux nombres, mettons le résultat dans une nouvelle variable, et affichons ce résultat.

$x = 1;
$y = 2;
$sum = $x + $y;
echo $sum;       // afficher 3

3.1.2. Formattage de chaîne

En PHP, comme en Perl, les chaînes avec double quotes peuvent formatter des chaînes en utilisant des variables définies. Par exemple :

$name = "Jacques";
echo "Votre nom est $name";    // affiche Votre nom est Jacques

3.2. Exercise

  1. Partie 1

    Définissez des variables name (nom) et age de façon à afficher une ligne correspondant à la phrase suivante :

    Salut Jacques. Vous avez 20 ans.

    Remarquez que le code contient une séquence de caractère spécial à la fin appelée retour à la ligne - \n. Cette séquence fera en sorte que la prochaine ligne affichée le soit sur la ligne suivante. Pour le développement Web, cela n'est pas important, puisque nous utiliserons les balises HTML pour ce besoin.

  2. Partie 2

    Faites la somme de deux variables x et y et mettez le résultat dans la variable sum.

3.2.1. Code de départ

<?php
// Partie 1: ajoutez les variables name et age.
echo "Salut $name. Vous avez $age.\n";

// Part 2: faites la somme des variables x et y
// et mettez le résultat dans la variable sum.
$x = 195793;
$y = 256836;
$sum = NULL;

echo "La somme de $x et $y est $sum."
?>

3.2.2. Sortie attendue

Salut Jacques. Vous avez 20 ans.
La somme de 195793 et 256836 est 452629.

4. Tableaux simples

4.1. Tutoriel

Les tableaux sont un type de variable spécial qui peut contenir de nombreuses variables, et les conserver dans une liste.

Par exemple, disons que nous souhaitons créer une liste de tous les nombres impairs entre 1 et 10. Une fois que nous créons la liste, nous pouvons affecter de nouvelles variables qui feront référence à une variable dans le tableau, en utilisant l'index de la variable.

Pour utiliser la première variable dans la liste (dans ce cas le numéro 1), nous devrons passer le premier index, qui est 0, puisque PHP utilise des index basés depuis 0, comme quasiment tous les langages de programmation aujourd'hui.

$odd_numbers = [1,3,5,7,9];
$first_odd_number = $odd_numbers[0];
$second_odd_number = $odd_numbers[1];

echo "Le premier nombre impair est $first_odd_number\n";
echo "Le second nombre impair est $second_odd_number\n";

Nous pouvons maintenant ajouter de nouvelles variables en utilisant un index. Pour ajouter un élément à la fin de la liste, nous pouvons affecter dans le tableau à l'index 5 (la 6ème variable) :

$odd_numbers = [1,3,5,7,9];
$odd_numbers[5] = 11;
print_r($odd_numbers);

Les tableaux peuvent contenir différents types de variables en fonction de vos besoins, et peuvent même contenir d'autres tableaux ou des objets comme membres.

Pour supprimer un élément d'un tableau, utilisez la fonction unset sur le membre lui-même. Par exemple :

$odd_numbers = [1,3,5,7,9];
unset($odd_numbers[2]); // supprimera le 3ème élément (5) de la liste
print_r($odd_numbers);

4.1.1. Fonctions utiles

La fonction count (compte) renvoie le nombre de membres trouvés dans un tableau.

$odd_numbers = [1,3,5,7,9];
echo count($odd_numbers);

La fonction reset récupère le premier élément d'un tableau. (Elle réinitialise également le pointeur d'itération interne).

$odd_numbers = [1,3,5,7,9];
$first_item = reset($odd_numbers);
echo $first_item;

On peut aussi utiliser la syntaxe d'index pour récupérer le premier membre d'un tableau, comme celà :

$odd_numbers = [1,3,5,7,9];
$first_item = $odd_numbers[0];
echo $first_item;

La fonction end récupère le dernier membre d'un tableau.

$odd_numbers = [1,3,5,7,9];
$last_item = end($odd_numbers);
echo $last_item;

Nous pouvons aussi utiliser la fonction count pour obtenir le nombre d'élémets dans la liste, et l'utiliser ensuite pour faire référence à la dernière variable dans le tableau. Remarquez qu'on doit retrancher un à la valeur de l'index terminal parceque les index commencent à zéro en PHP, donc nous devons corriger le fait que nous ne comptons pas la variable numéro zéro.

$odd_numbers = [1,3,5,7,9];
$last_index = count($odd_numbers) - 1;
$last_item = $odd_numbers[$last_index];
echo $last_item;

4.1.2. Fonctions de pile et file

Les tableaux peuvent être utilisés comme des piles ou bien des files.

Pour ajouter un membre à la fin d'un tableau, utilisez la fonction array_push :

$numbers = [1,2,3];
array_push($numbers, 4); // maintenant le tableau est [1,2,3,4];

// affiche le nouveau tableau
print_r($numbers);

Pour retirer un membre de la fin d'un tableau, utilisez la fonction array_pop :

$numbers = [1,2,3,4];
array_pop($numbers); // maintenant le tableau est [1,2,3];

// affiche le nouveau tableau
print_r($numbers);

Pour ajouter un membre au début d'un tableau, utilisez la fonction array_unshift :

$numbers = [1,2,3];
array_unshift($numbers, 0); // maintenant le tableau est [0,1,2,3];

// affiche le nouveau tableau
print_r($numbers);

Pour retirer un membre du début d'un tableau, utilisez la fonction array_shift :

$numbers = [0,1,2,3];
array_shift($numbers); // maintenant le tableau est [1,2,3];

// affiche le nouveau tableau
print_r($numbers);

4.1.3. Concaténer des tableaux

Nous pouvons utiliser la fonction array_merge pour concaténer deux tableaux :

$odd_numbers = [1,3,5,7,9];
$even_numbers = [2,4,6,8,10];
$all_numbers = array_merge($odd_numbers, $even_numbers);
print_r($all_numbers);

4.1.4. Trier les tableaux

On peut utiliser la fonction sort pour trier les tableaux. La fonction rsort trie les tableaux dans l'ordre inverse. Remarquez que le tri est fait dans le tableau fourni et ne renvoie pas un nouveau tableau.

$numbers = [4,2,3,1,5];
sort($numbers);
print_r($numbers);

4.1.5. Fonction de tableaux avancées

La fonction array_slice renvoie un nouveau tableau qui contient une certaine partie d'un tableau spécifique à partir d'un décalage. Par exemple, si on veut supprimer les 3 premiers éléments d'un tableau, on peut faire ceci :

$numbers = [1,2,3,4,5,6];
print_r(array_slice($numbers, 3));

On peut aussi décider de récupérer une tranche d'une longueur précise. Par exemple, si nous voulons prendre seulement deux éléments, on peut ajouter un autre argument à la fonction :

$numbers = [1,2,3,4,5,6];
print_r(array_slice($numbers, 3, 2));

La fonction array_splice fait exactement la même chose, mais par contre, elle va aussi enlever la tranche qu'elle renvoie du contenu du tableau d'origine (dans ce cas, la variable numbers).

$numbers = [1,2,3,4,5,6];
print_r(array_splice($numbers, 3, 2));
print_r($numbers);

4.2. Exercise

  1. Créez un nouveau tableau qui contient les nombres pairs 2,4,6,8 et
    1. Le nom du nouveau tableau devrait être $even_numbers.
  2. Concaténez les tableaux male_names et female_names pour créer le tableau names.

4.2.1. Code de départ

<?php

// TODO: ajouter le tableau even_numbers ici

$male_names = ["Jacques", "Éric", "Jean"];
$female_names = ["Jessica", "Beth", "Sandra"];

// TODO: grouppez les noms masculins et féminins dans un seul tableau
$names = NULL;

print_r($even_numbers);
print_r($names);

?>

4.2.2. Sortie attendue

Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 10
)
Array
(
    [0] => Jacques
    [1] => Éric
    [2] => Jean
    [3] => Jessica
    [4] => Beth
    [5] => Sandra
)

5. Tableaux à clés

5.1. Tutoriel

Les tableaux PHP sont en réalité des dictionnaires, ce qui signifie que toutes les valeurs des tableaux ont des clés, et les éléments à l'intérieur des tableaux conservent l'ordre. Quand on utilise les tableaux comme de simples listes comme nous l'avons vu dans le chapitre précédent, un compteur qui démarre à zéro est utilisé pour définir les clés. Chaque élément qui est ajouté au tableau incrémente alors l'index suivant de 1.

Un bon exemple d'utilisation des tableaux avec des clés est un répertoire téléphonique. Disons que nous voulons stocker les numéros de téléphone des gens dans une classe.

$phone_numbers = [
  "Alex" => "415-235-8573",
  "Jessica" => "415-492-4856",
];

print_r($phone_numbers);
echo "Le numéro de téléphone d'Alex est " . $phone_numbers["Alex"] . "\n";
echo "Le numéro de téléphone de Jessica est " . $phone_numbers["Jessica"] . "\n";

Pour ajouter un élément dans un tableau en utilisant une clé, nous utilisons l'opérateur des crochets, comme vous vous y attendez.

$phone_numbers = [
  "Alex" => "415-235-8573",
  "Jessica" => "415-492-4856",
];

$phone_numbers["Michael"] = "415-955-3857";

print_r($phone_numbers);

Pour vérifier si une clé existe dans un tableau, on peut utiliser la fonction array_key_exists :

$phone_numbers = [
  "Alex" => "415-235-8573",
  "Jessica" => "415-492-4856",
];

if (array_key_exists("Alex", $phone_numbers)) {
    echo "Le numéro de téléphone d'Alex est " . $phone_numbers["Alex"] . "\n";
} else {
    echo "Le numéro de téléphone d'Alex n'est pas dans le répertoire !";
}

if (array_key_exists("Michael", $phone_numbers)) {
    echo "Le numéro de téléphone de Michael est " . $phone_numbers["Michael"] . "\n";
} else {
    echo "Le numéro de téléphone de Michael n'est pas dans le répertoire !";
}

Si on veut extraire seulement les clés du tableau (les noms), nous pouvons utiliser la fonction array_keys.

$phone_numbers = [
  "Alex" => "415-235-8573",
  "Jessica" => "415-492-4856",
];

print_r(array_keys($phone_numbers));

Ou bien, pour obtenir seulement les valeurs d'un tableau (les numéros de téléphone), on peut utiliser la fonction array_values.

$phone_numbers = [
  "Alex" => "415-235-8573",
  "Jessica" => "415-492-4856",
];

print_r(array_values($phone_numbers));

5.2. Exercise

Ajoutez un numéro au répertoire pour Éric, avec le numéro 415-874-7659, soit en l'ajoutant à la définition du tableau, soit comme ligne de code à part.

5.2.1. Code de départ

<?php
$phone_numbers = [ "Alex" => "415-235-8573", "Jessica" => "415-492-4856",];

print_r($phone_numbers);
?>

5.2.2. Sortie attendue

Array
(
    [Alex] => 415-235-8573
    [Jessica] => 415-492-4856
    [Éric] => 415-874-7659
)

6. Chaînes

6.1. Tutoriel

Les chaînes sont des variables qui contiennent du texte. Par exemple, une chaîne qui contient un nom est définie comme suit :

$name = "Jean";
echo $name;

Nous pouvons facilement formatter des chaînes en utilisant des variables. Par exemple :

$name = "Jean";
$introduction = "Salut $name";
echo $introduction;

Nous pouvons aussi concaténer des chaînes en utilisant l'opérateur point ".". Par exemple :

$first_name = "Jean";
$last_name = "Bon";
$name = $first_name . " " . $last_name;
echo $name;

Pour mesurer la longueur d'une chaîne, on utilise la fonction strlen :

$string = "La longueur de cette phrase est 43 lettres.";
echo strlen($string);

Pour découper un morceau d'une chaîne et le renvoyer comme nouvelle chaîne, nous pouvons utiliser la fonction substr :

$filename = "image.png";
$extension = substr($filename, strlen($filename) - 3);
echo "L'extension du fichier est $extension";

6.1.1. Coller et séparer

On peut coller des tableaux pour former des chaînes, ou séparer des chaînes en tableaux de chaînes.

Par exemple, pour séparer une chaîne avec une liste de fruits séparés par une virgule, on utilise la fonction explode :

$fruits = "pomme,banane,orange";
$fruit_list = explode(",", $fruits);
echo "Le second fruit dans la liste est $fruit_list[1]";

Pour recoller un tableau en une seule chaîne séparée par des virgules, on utilise la fonction implode :

$fruit_list = ["pomme","banane","orange"];
$fruits = implode(",", $fruit_list);
echo "Les fruits sont $fruits";

6.2. Exercise

Séparez la chaîne qui contient la liste des nombres en un nouveau tableau appelé number_list.

6.2.1. Code de départ

<?php

$numbers = "38,42,58,48,33,59,87,17,20,8,98,14,62,66,14,62,97,66,74,78,66,2,79,29,72,6,3,71,46,68,48,4,12,52,66,48,14,39,63,69,81,61,21,77,10,44,39,82,19,77,100,98,53,95,30,17,30,96,68,47,81,52,82,11,13,83,10,14,49,96,27,73,42,76,71,15,81,36,77,38,17,2,29,100,26,86,22,18,38,64,82,51,39,7,88,53,82,30,98,86";

// TODO: séparer la variable $numbers en un tableau
// appelé $number_list

print_r($number_list);
?>

6.2.2. Sortie attendue

Array
(
    [0] => 38
    [1] => 42
    [2] => 58
    [3] => 48
    [4] => 33
    [5] => 59
    [6] => 87
    [7] => 17
    [8] => 20
    [9] => 8
    [10] => 98
    [11] => 14
    [12] => 62
    [13] => 66
    [14] => 14
    [15] => 62
    [16] => 97
    [17] => 66
    [18] => 74
    [19] => 78
    [20] => 66
    [21] => 2
    [22] => 79
    [23] => 29
    [24] => 72
    [25] => 6
    [26] => 3
    [27] => 71
    [28] => 46
    [29] => 68
    [30] => 48
    [31] => 4
    [32] => 12
    [33] => 52
    [34] => 66
    [35] => 48
    [36] => 14
    [37] => 39
    [38] => 63
    [39] => 69
    [40] => 81
    [41] => 61
    [42] => 21
    [43] => 77
    [44] => 10
    [45] => 44
    [46] => 39
    [47] => 82
    [48] => 19
    [49] => 77
    [50] => 100
    [51] => 98
    [52] => 53
    [53] => 95
    [54] => 30
    [55] => 17
    [56] => 30
    [57] => 96
    [58] => 68
    [59] => 47
    [60] => 81
    [61] => 52
    [62] => 82
    [63] => 11
    [64] => 13
    [65] => 83
    [66] => 10
    [67] => 14
    [68] => 49
    [69] => 96
    [70] => 27
    [71] => 73
    [72] => 42
    [73] => 76
    [74] => 71
    [75] => 15
    [76] => 81
    [77] => 36
    [78] => 77
    [79] => 38
    [80] => 17
    [81] => 2
    [82] => 29
    [83] => 100
    [84] => 26
    [85] => 86
    [86] => 22
    [87] => 18
    [88] => 38
    [89] => 64
    [90] => 82
    [91] => 51
    [92] => 39
    [93] => 7
    [94] => 88
    [95] => 53
    [96] => 82
    [97] => 30
    [98] => 98
    [99] => 86
)

7. Boucles for

7.1. Tutoriel

Les boucles for sont de simples boucles qui nous permettent d'itérer sur une variable itérable en utilisant un index. Il y a deux types de boucles for - une simple boucle for (style C), et une boucle foreach.

7.1.1. Boucle for

Les boudles for sont très utiles quand on a besoin d'itérer sur un tableau et de faire référence aux membres du tableau en utilisant un index mobile. Par exemple, disons qu'on a une liste de nombres impairs. Pour les imprimer, on doit faire référence à chaque élément individuellement. Le code qu'on écrit dans la boucle for peut utiliser l'index i, qui change à chaque itération de la boucle.

$odd_numbers = [1,3,5,7,9];
for ($i = 0; $i < count($odd_numbers); $i=$i+1) {
    $odd_number = $odd_numbers[$i];
    echo $odd_number . "\n";
}

La première ligne de la boucle for définit 3 parties:

  • l'instruction d'initialisation - dans notre cas, on initialise la variable itérateur $i à 0.
  • l'instruction de condition - cette instruction est évaluée à chaque boucle. La boucle s'arrête quand la condition n'est plus remplie. Cela se produit quand la variable itérateur $i sera plus grande que la longueur du tableau.
  • l'instruction d'incrémentation - cette instruction est exécutée à chaque itération pour incrémenter l'index de la variable du montant voulu. D'habitude, on incrémentera $i de 1. Il y a aussi deux variantes plus courtes pour incrémenter une variable de 1. On peut utiliser $i+=1 ou aussi $i++.

7.1.2. Boucle foreach

La boucle foreach itére sur un élément itérable tel qu'un tableau ou un objet, en fournissant les membres un par un à une variable spécifique.

Par exemple, disons que nous souhaitons créer une liste de tous les nombres impairs entre 1 et 10, et les afficher un par un, comme dans l'exemple précédent. Cette fois, nous allons utiliser l'instruction foreach au lieu d'une instruction for classique avec une variale itérateur. Au lieu d'utiliser la variable itérateur comme un index du tableau, on récupère l'élément depuis le tableau directement dans la variable $odd_number.

$odd_numbers = [1,3,5,7,9];
foreach ($odd_numbers as $odd_number) {
  echo $odd_number . "\n";
}

Quand on itére parmi des tableaux à clés, on peut utiliser la syntaxe suivante :

$phone_numbers = [
  "Alex" => "415-235-8573",
  "Jessica" => "415-492-4856",
];

foreach ($phone_numbers as $name => $number) {
  echo "le numéro de $name est $number.\n";
}

7.2. Exercise

Affichez tous les numéros présents dans le tableau, un par un, en utilisant la séquence de caractères de fin de ligne \n pour séparer les résultats.

7.2.1. Code de départ

<?php
$even_numbers = [2,4,6,8,10,12,14,16,18,20];
?>

7.2.2. Sortie attendue

2
4
6
8
10
12
14
16
18
20

8. Boucles while

8.1. Tutoriel

Les boucles while sont de simples blocs qui s'exécutent de façon répétée jusqu'à ce que la condition de la boucle while ne soit plus remplie.

Voici un exemple de boucle qui est exécutée au total 10 fois :

$counter = 0;

while ($counter < 10) {
    $counter += 1;
    echo "Execution - counter vaut $counter.\n";
}

La différence principale entre les boucles for et les boucles while est que les boucles for sont utilisées pour itérer sur un tableau ou un objet, et les boucles while s'exécuteront un nombre de fois inconnue, qui dépend de consitions variables (par exemple, jusqu'à ce qu'un utilisateur ait saisi une entrée correcte).

8.1.1. Instructions de contrôle

Les boucles peuvent être contrôlées en utilisant les instructions de contrôle de flot break et continue, qui s'avèrent très pratiques dans les boucles while. L'instruction break quitte immédiatement la boucle for au milieu du bloc, alors que l'instruction continue revient au sommet de la boucle while, en re-vérifiant si la condition de boucle est remplie également.

  1. L'instruction continue

    Utilisons l'exemple précédent, mais cette fois, ajoutons une vérification pour voir si le nombre est pair. S'il l'est, on le sautera, de façon à ce que seuls les nombres impairs soient affichés.

    $counter = 0;
    
    while ($counter < 10) {
        $counter += 1;
    
        if ($counter % 2 == 0) {
            echo "On saute $counter qui est un numéro pair.\n";
            continue;
        }
    
        echo "Execution - counter vaut $counter.\n";
    }
    
  2. L'instruction break

    Supposons que nous voulions ajouter un autre test qui vérifie si la variable counter n'est pas plus grande que 8. Si elle l'est, on souhaiterait arrêter la boucle. Cela entrainera que le nombre 9 n'est pas affiché, dans cet exemple.

    $counter = 0;
    
    while ($counter < 10) {
        $counter += 1;
    
        if ($counter > 8) {
            echo "counter est plus grand que 8, on arrête la boucle.\n";
            break;
        }
    
        if ($counter % 2 == 0) {
            echo "On saute $counter qui est un numéro pair.\n";
            continue;
        }
    
        echo "Execution - counter vaut $counter.\n";
    }
    

8.2. Exercise

Utilisez une boucle while pour afficher tous les nombres impairs d'un tableau. Utilisez l'instruction continue pour sauter les boucles et éviter d'afficher les nombres pairs.

Souvenez-vous - vous avez besoin de la séquence de caractères \n à la fin des instructions echo pour continuer sur la ligne suivante.

Astuce: pour tester si un nombre est pair, vérifiez si le nombre modulo 2 est égal à 0 ($number % 2 == 0).

8.2.1. Code de départ

<?php

$numbers = [56, 65, 26, 86, 66, 34, 78, 74, 67, 18, 34, 73, 45, 67, 75, 10, 60, 80, 74, 16, 86, 34, 12, 23, 42, 72, 36, 3, 73, 9, 92, 81, 94, 54, 97, 74, 45, 55, 70, 94, 96, 81, 86, 86, 84, 4, 32, 8, 96, 86, 87, 18, 84, 87, 59, 48, 32, 90, 17, 22, 82, 79, 66, 28, 17, 14, 80, 83, 66, 36, 21, 89, 68, 2, 51, 65, 20, 87, 48, 5, 1, 16, 60, 53, 84, 90, 16, 2, 37, 73, 57, 70, 57, 69, 68, 1, 24, 40, 72, 97];

// TODO: Affichez seulement les nombres impairs

?>

8.2.2. Sortie attendue

65
67
73
45
67
75
23
3
73
9
81
97
45
55
81
87
87
59
17
79
17
83
21
89
51
65
87
5
1
53
37
73
57
57
69
1
97

9. Fonctions

9.1. Tutoriel

Les fonctions sont de simples blocs de code que nous pouvons appeler de n'importe où. Par exemple, on peut créer une fonction qui fait la somme d'une liste de nombres et renvoie le résultat. Appelons cette fonction sum.

Il y a deux types de fonctions - les fonctions de la bibliothèque et les fonctions des utilisateurs. Les fonctions de la bibliothèque, comme array_push font partie de la bibliothèque PHP et peuvent être utilisées par n'importe qui. Par contre, vous pouvez utiliser vos propres fonctions et les utiliser à travers votre code.

Une fonction reçoit une liste d'arguments séparés par des virgules. Tout argument existe seulement dans le contexte d'une fonction, ce qui signifie qu'ils deviennent des variables à l'intérieur du bloc de la fonction, mais ne sont pas définies en dehors de ce bloc de fonction.

// definit une fonction appelée `sum` qui
// recevra une liste de nombres comme argument
function sum($numbers) {
    // initialiser la variable qu'on renverra
    $sum = 0;

    // additionner les nombres
    foreach ($numbers as $number) {
        $sum += $number;
    }

    // renvoyer la somme à l'utilisateur
    return $sum;
}

// Exemple d'utilisation de sum
echo sum([1,2,3,4,5,6,7,8,9,10]);

Après avoir défini des fonctions, vous pourriez charger d'autres fichiers PHP dans vos fichiers, donc vous pourriez définir toutes vos fonctions dans un fichier, et les charger pour un autre fichier. Disons que nous avons défini la fonction sum à l'intérieur d'un fichier appelé sum.php. Nous pouvons maintenant créer un autre fichier, disons index.php et utiliser la fonction sum en incluant sum.php comme ceci :

include("sum.php");

// Exemple d'utilisation de sum
echo sum([1,2,3,4,5,6,7,8,9,10]);

(Ce code ne marchera pas parce qu'il n'y a pas de modules définis dans l'environnement PHP).

9.2. Exercise

Créez une fonction squared_sum qui renvoit la somme de chaque entier dans un tableau, mis au carré.

9.2.1. Code de départ

<?php
// Écrivez la fonction squared_sum ici

echo squared_sum([56, 65, 26, 86, 66, 34, 78, 74, 67, 18, 34, 73, 45, 67, 75, 10, 60, 80, 74, 16, 86, 34, 12, 23, 42, 72, 36, 3, 73, 9, 92, 81, 94, 54, 97, 74, 45, 55, 70, 94, 96, 81, 86, 86, 84, 4, 32, 8, 96, 86, 87, 18, 84, 87, 59, 48, 32, 90, 17, 22, 82, 79, 66, 28, 17, 14, 80, 83, 66, 36, 21, 89, 68, 2, 51, 65, 20, 87, 48, 5, 1, 16, 60, 53, 84, 90, 16, 2, 37, 73, 57, 70, 57, 69, 68, 1, 24, 40, 72, 97]);

?>

9.2.2. Sortie attendue

382629

10. Objets

10.1. Tutoriel

PHP est un langage orienté objets, bien qu'il n'ait pas besoin d'être utilisé en tant que tel, puisque la plupart des fonctions PHP ne sont pas orientées objets.

Dans la programmation orientée objets, une class -e est une définition d'un objet, alors qu'un object est une instance d'un objet, ce qui signifie qu'à partir d'une classe vous pouvez créer de nombreux objets.

Par exemple, définissions une classe pour un étudiant.

class Student {
    // constructeur
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    public function say_name() {
        echo "Mon nom est " . $this->first_name . " " . $this->last_name . ".\n";
    }
}

$alex = new Student("Alex", "Jones");
$alex->say_name();

Analysons le code. Remarquez que la classe Student a une fonction constructeur, qui est exécutée quand l'objet est créé. Le constructeur reçoit des arguments qui sont fournis plus tard quand on construit l'objet avec le mot-clé new.

Après que nous ayons construit l'objet dans La variable $alex nous pouvons maintenant utiliser les méthodes de l'objet.

Nous avons implémenté une méthode d'objet say_name, qui affiche le nom de l'étudiant. Remarquez que la fonction say_name ne reçoit pas d'arguments, mais elle a accès aux nom et prénom de l'étudiant, parce qu'ils ont été précédemment définis dans le constructeur.

Voici quelques définitions importantes liées aux objets :

  • Classes définissent comment les objets se comportent. Les classes ne contiennent pas de données.
  • Objets sont des instances des classes, qui contiennent les données.
  • Membres sont des variables qui appartiennent à un objet.
  • Méthodes sont les fonctions qui appartiennent à un objet, et ont accès à ses membres.
  • Constructeur est une méthode spéciale qui est exécutée quand un objet est créé.

10.1.1. Héritage

La fonctionnalité la plus importante de la programmation orientée objets est l'héritage. Cette fonctionnalité nous permet de réutiliser le code que nous avons écrit et de l'étendre. Par exemple, disons que nos souhaitons définir un étudiant en maths, qui sait également comment additionner deux nombres.

class Student {
    // constructeur
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    public function say_name() {
        echo "Mon nom est " . $this->first_name . " " . $this->last_name . ".\n";
    }
}

$alex = new Student("Alex", "Jones");
$alex->say_name();

class MathStudent extends Student {
    function sum_numbers($first_number, $second_number) {
        $sum = $first_number + $second_number;
        echo $this->first_name . " dit que " . $first_number . " + " . $second_number . " est " . $sum;
    }
}

$eric = new MathStudent("Éric", "Chang");
$eric->say_name();
$eric->sum_numbers(3, 5);

Remarques que l'objet d'Éric dispose aussi du même constructeur et de la fonction say_name, en plus de la nouvelle méthode appelée sum_numbers, qui permet à Éric de calculer la somme de deux nombres. Remarques aussi que la nouvelle fonction a accès aux mêmes membres que nous avons déjà définis dans la classe Student (first_name, last_name).

10.1.2. Fonctions publiques et privées

Nous pouvons utiliser les modifieurs public et private respectivement pour définir des fonctions auxquelles on peut accéder depuis l'extérieur de l'objet ou non, pour des besoins d'encapsulation. Ceci permet de mieux définir comment les objets devraient être utilisés, pour distinguer entre les fonctions qui sont utilisées pour des besoins internes, ou a l'inverse pour une interface externe.

class Student {
    // le constructeur devrait être public
    public function __construct($first_name, $last_name) {
        $this->first_name = $first_name;
        $this->last_name = $last_name;
    }

    // pour utilisation externe
    public function say_name() {
        echo "Mon nom est " . $this->full_name() . "\n";
    }

    // pour utilisation interne
    private function full_name() {
        return $this->first_name . " " . $this->last_name;
    }
}

$alex = new Student("Alex", "Jones");

$alex->say_name();

// ceci ne marchera pas
// echo $alex->full_name();

10.2. Exercise

Créez une classe appelée Car (voiture) avec un constructeur qui reçoit la marque et l'année de fabrication de la voiture, et une fonction appelée print_details qui affiche les détails de la voiture.

Par exemple, pour une voiture Toyota de 2006, la ligne suivante serait affichée :

Cette voiture est une Toyota de 2006.

10.2.1. Code de départ

<?php
// TODO: Implémentez la classe Car ici

$car = new Car("Toyota", 2006);
$car->print_details();

10.2.2. Sortie attendue

Cette voiture est une Toyota de 2006.

11. Solutions

11.1. Solution "Salut tout le monde !"

<?php
    echo "Salut, tout le monde !";
?>

11.2. Solution "Variables et types"

<?php 
$name = "Jacques"; 
$age = 20; 
echo "Salut $name. Vous avez $age ans.\n";

$x = 195793;
$y = 256836;
$sum = $x + $y;

echo "La somme de $x et $y est $sum."
?>

11.3. Solution "Tableaux simples"

<?php

// TODO: ajouter le tableau even_numbers ici
$even_numbers = [2,4,6,8,10];

$male_names = ["Jacques", "Éric", "Jean"];
$female_names = ["Jessica", "Beth", "Sandra"];

// TODO: grouppez les noms masculins et féminins dans un seul tableau
$names = array_merge($male_names, $female_names);

print_r($even_numbers);
print_r($names);

?>

11.4. Solution "Tableaux à clés"

<?php
$phone_numbers = [ "Alex" => "415-235-8573", "Jessica" => "415-492-4856",];

$phone_numbers["Éric"] = "415-874-7659";

print_r($phone_numbers);
?>

11.5. Solution "Chaînes"

<?php
$numbers = "38,42,58,48,33,59,87,17,20,8,98,14,62,66,14,62,97,66,74,78,66,2,79,29,72,6,3,71,46,68,48,4,12,52,66,48,14,39,63,69,81,61,21,77,10,44,39,82,19,77,100,98,53,95,30,17,30,96,68,47,81,52,82,11,13,83,10,14,49,96,27,73,42,76,71,15,81,36,77,38,17,2,29,100,26,86,22,18,38,64,82,51,39,7,88,53,82,30,98,86";

$number_list = explode(",", $numbers);

print_r($number_list);
?>

11.6. Solution "Boucles for"

<?php
$even_numbers = [2,4,6,8,10,12,14,16,18,20];
foreach ($even_numbers as $even_number) {
    echo $even_number . "\n";
}
?>

11.7. Solution "Boucles while"

<?php

$numbers = [56, 65, 26, 86, 66, 34, 78, 74, 67, 18, 34, 73, 45, 67, 75, 10, 60, 80, 74, 16, 86, 34, 12, 23, 42, 72, 36, 3, 73, 9, 92, 81, 94, 54, 97, 74, 45, 55, 70, 94, 96, 81, 86, 86, 84, 4, 32, 8, 96, 86, 87, 18, 84, 87, 59, 48, 32, 90, 17, 22, 82, 79, 66, 28, 17, 14, 80, 83, 66, 36, 21, 89, 68, 2, 51, 65, 20, 87, 48, 5, 1, 16, 60, 53, 84, 90, 16, 2, 37, 73, 57, 70, 57, 69, 68, 1, 24, 40, 72, 97];

// TODO: Affichez seulement les nombres impairs
$index = 0;
while( $index < count( $numbers ) ) {
    $number = $numbers[ $index ];
    ++$index;

    if( $number % 2 == 0 )
        continue;

    echo "$number\n";
}
?>

11.8. Solution "Fonctions"

<?php
// Écrivez la fonction squared_sum ici
function squared_sum($numbers) {
    // initialiser la variable qu'on renverra
   $sum = 0;

    // additionner les nombres
    foreach ($numbers as $number) {
        $sum += $number * $number;
    }

    // renvoie la somme à l'utilisateur
    return $sum;

}

echo squared_sum([56, 65, 26, 86, 66, 34, 78, 74, 67, 18, 34, 73, 45, 67, 75, 10, 60, 80, 74, 16, 86, 34, 12, 23, 42, 72, 36, 3, 73, 9, 92, 81, 94, 54, 97, 74, 45, 55, 70, 94, 96, 81, 86, 86, 84, 4, 32, 8, 96, 86, 87, 18, 84, 87, 59, 48, 32, 90, 17, 22, 82, 79, 66, 28, 17, 14, 80, 83, 66, 36, 21, 89, 68, 2, 51, 65, 20, 87, 48, 5, 1, 16, 60, 53, 84, 90, 16, 2, 37, 73, 57, 70, 57, 69, 68, 1, 24, 40, 72, 97]);

?>

11.9. Solution "Objets"

<?php
class Car {
    public function __construct($brand, $year) {
        $this->brand = $brand;
        $this->year = $year;
    }

    public function print_details() {
        echo "Cette voiture est une " . $this->brand . " de " . $this->year . ".\n";
    }

}

$car = new Car("Toyota", 2006);
$car->print_details();

Auteur: Ron Reiter - Copyright © Learn-PHP.org - Traduction en français Olivier Berger

Created: 2023-08-29 Tue 15:13

Validate