Tutoriel PHP avec des exemples exécutables
Un tutoriel et une référence PHP 8 gratuits : tableaux, foreach, fonctions de chaînes, dates, formulaires, classes et erreurs. Chaque exemple s'exécute sur la page, et ceux qui affichent du HTML montrent la page, avec des formulaires que vous pouvez envoyer.
Commencer un parcours guidé en PHPPour commencer
- C'est quoi PHP ?PHP est un langage de script côté serveur : un fichier PHP s'exécute sur le serveur web et envoie au navigateur le HTML qu'il construit. Il fait tourner WordPress, Laravel et une grande partie du web, et il exécute aussi des scripts en ligne de commande.
- Installer PHPInstallez PHP en une commande : winget sur Windows, Homebrew sur macOS, apt ou dnf sur Linux. Lancez ensuite php -v dans un terminal pour vérifier qu'il fonctionne et connaître votre version.
- Exécuter du PHPExécutez un fichier PHP depuis le terminal avec php index.php, ou servez un dossier dans le navigateur avec le serveur intégré de PHP : php -S localhost:8000. Ni Apache ni XAMPP ne sont nécessaires.
- echo et printecho affiche une ou plusieurs chaînes : echo "Hello, $name"; ou echo $a, $b;. C'est la façon habituelle d'envoyer du texte ou du HTML à la page. print fait la même chose avec une seule valeur et renvoie 1 ; <?= $x ?> est la forme courte dans du HTML.
- Afficher les erreursPour afficher toutes les erreurs PHP, placez ini_set('display_errors', '1'); et error_reporting(E_ALL); en haut du script, ou réglez display_errors = On et error_reporting = E_ALL dans php.ini. En production, journalisez les erreurs au lieu de les afficher.
- PHP vs PythonPHP est fait pour le web : un fichier s'exécute à chaque requête et affiche une page, et il fait tourner WordPress et Laravel. Python est un langage généraliste qui fait aussi du web (Django, Flask) et domine la data science, l'automatisation et le machine learning.
- PHP vs JavaScriptPHP s'exécute sur le serveur et envoie au navigateur du HTML terminé. JavaScript s'exécute dans le navigateur, où il modifie la page après son chargement, et sur le serveur avec Node.js. La plupart des sites utilisent les deux : PHP pour construire les pages et les API, JavaScript pour l'interaction.
Les bases
- VariablesUne variable PHP commence par $ et se crée en lui affectant une valeur : $name = "Ada";. Il n'y a ni mot-clé de déclaration ni type fixe. Les fonctions ne voient pas les variables extérieures sauf si vous les passez, utilisez global ou les capturez ; static garde une valeur entre les appels.
- Types de donnéesPHP a dix types : quatre scalaires (int, float, string, bool), quatre composés (array, object, callable, iterable) et deux spéciaux (null, resource). var_dump($x) montre le type et la valeur, gettype($x) renvoie le nom du type.
- ChaînesAssemblez des chaînes PHP avec l'opérateur point ("Hello, " . $name) ou placez les variables directement entre guillemets doubles ("Hello, $name"). Les guillemets simples affichent le texte tel quel. Concaténation, .=, interpolation de tableaux et d'objets, et changement de casse avec strtoupper, strtolower, ucfirst et ucwords.
- Heredoc et nowdocUn heredoc PHP est une chaîne sur plusieurs lignes qui commence par <<<EOT et se termine par EOT ; il remplace les variables comme une chaîne entre guillemets doubles. Un nowdoc, <<<'EOT', garde le texte exactement tel qu'il est écrit. Syntaxe, règles d'indentation, interpolation de tableaux et d'objets, et templates HTML.
- OpérateursLes opérateurs PHP agissent sur des valeurs : +, -, *, /, %, ** pour l'arithmétique, =, +=, .=, ??= pour l'affectation, &&, ||, ! et xor pour la logique, . pour assembler des chaînes, ==, ===, <=> pour comparer et ++, -- pour incrémenter. Chaque groupe avec des exemples exécutables, plus le piège de priorité de and face à &&.
- Opérateurs de comparaisonPHP compare des valeurs avec == (égales après conversion de type), === (même valeur et même type), != et !==, < > <= >= et l'opérateur spaceship <=>. Quand == convertit les types, ce qui a changé en PHP 8, et toutes les comparaisons souples et strictes dans un seul tableau.
- Opérateur ternaireL'opérateur ternaire PHP est un if/else sur une ligne : $result = $condition ? 'yes' : 'no';. La forme courte ?: (opérateur Elvis), sa différence avec ??, pourquoi les ternaires imbriqués exigent des parenthèses depuis PHP 8, et quand match est plus clair.
- Fusion null ??L'opérateur de fusion null de PHP renvoie son côté gauche sauf s'il vaut null ou n'est pas défini : $name = $_GET['name'] ?? 'Guest';. Il n'affiche jamais de warning pour une variable ou une clé de tableau manquante. Chaînes de ??, l'affectation ??=, ?? ou ?:, et l'opérateur nullsafe ?->.
- Conversion de typeConvertissez une chaîne PHP en entier avec (int) $str ou intval($str) ; (int) "42" vaut 42 et (int) "12abc" vaut 12. Les casts vers int, float, bool, string et array, les chaînes numériques, intval avec une base, settype, et comment valider une saisie au lieu d'obtenir 0 en silence.
- ConstantesUne constante PHP est un nom pour une valeur qui ne peut pas changer : const MAX_USERS = 100; ou define('MAX_USERS', 100);. define ou const, constantes tableaux, constantes de classe avec self::, vérification avec defined(), et les constantes magiques __LINE__, __FILE__, __DIR__ et __CLASS__.
- isset()isset($var) renvoie true quand une variable existe et ne vaut pas null, et false sinon, sans aucun warning. Elle vérifie aussi les clés de tableau et les propriétés d'objet : isset($user['email']). isset avec plusieurs variables, clés imbriquées, isset ou empty, isset ou array_key_exists, et la vérification de l'envoi d'un formulaire.
- empty()empty($var) renvoie true quand une variable manque ou est évaluée à faux : null, false, 0, 0.0, "", "0" ou []. Elle n'affiche jamais de warning pour une variable ou une clé non définie. Pourquoi "0" compte comme vide, comment tester exactement une chaîne ou un tableau vide, empty ou isset, et la validation de formulaires.
- Maths et arrondisround($x, 2) arrondit à deux décimales, floor() arrondit toujours vers le bas et ceil() toujours vers le haut. Aussi intdiv(), l'opérateur %, ** pour les puissances, abs(), max(), min() et random_int() pour les nombres aléatoires.
Structures de contrôle
- if, elseif, elseif (condition) { ... } n'exécute un bloc que si la condition est vraie, elseif vérifie la condition suivante, et else s'exécute quand aucune n'a correspondu. elseif ou else if, && et ||, valeurs évaluées à vrai et la syntaxe if: endif; pour les templates HTML.
- Instruction switchswitch ($value) compare une valeur à une liste d'étiquettes case et exécute le code depuis la première correspondance jusqu'à un break. Plusieurs cas, passage au cas suivant, default, switch(true), et pourquoi switch utilise la comparaison souple ==.
- Expression matchmatch ($x) { 1, 2 => 'low', default => 'other' } compare une valeur avec le === strict, renvoie le résultat de la première branche qui correspond et lève une UnhandledMatchError quand rien ne correspond. match ou switch, match(true) et match avec les enums.
- Boucle forfor ($i = 0; $i < 10; $i++) { ... } exécute un bloc un nombre fixe de fois : une valeur de départ, une condition vérifiée avant chaque passage et un pas. Parcourir un tableau par index, compter à rebours, boucles imbriquées, break et continue.
- Boucle whilewhile (condition) { ... } répète un bloc tant que la condition est vraie, en la vérifiant avant chaque passage. do { ... } while (condition); vérifie après, donc le bloc s'exécute toujours au moins une fois. while (true) avec break, lire un fichier ligne par ligne et éviter les boucles infinies.
- Boucle foreachforeach ($array as $value) visite chaque élément d'un tableau, et foreach ($array as $key => $value) donne aussi la clé. Obtenir l'index, modifier les valeurs par référence et le piège de unset(), break et continue, tableaux imbriqués, list() dans foreach, et construire du HTML.
Tableaux
- TableauxUn tableau PHP est une liste ordonnée de valeurs, chacune rangée sous une clé : $fruits = ['apple', 'banana']; se lit avec $fruits[0]. Comment créer des tableaux, lire et modifier des éléments, les parcourir, les afficher, et quelle fonction de tableau choisir.
- Tableaux associatifsUn tableau associatif PHP range les valeurs sous des clés que vous nommez : $user = ['name' => 'Ada', 'age' => 36]; se lit avec $user['name']. Ajouter, modifier et supprimer des paires, parcourir clés et valeurs, obtenir toutes les clés ou valeurs, vérifier une clé, et trier par clé ou par valeur.
- Tableaux multidimensionnelsUn tableau multidimensionnel en PHP est un tableau dont les éléments sont des tableaux, lu avec une paire de crochets par niveau : $grid[1][2] ou $users[0]['name']. Créer des tableaux imbriqués, lire et modifier des valeurs profondes, boucler avec des foreach imbriqués, construire un tableau HTML, extraire une colonne et trier des lignes.
- array_push()array_push($arr, $value) ajoute une ou plusieurs valeurs à la fin d'un tableau ; $arr[] = $value fait la même chose pour une valeur et va plus vite. Ajouter à la fin, au début ou au milieu d'un tableau, ajouter une clé et une valeur, et éviter le bug classique de la valeur de retour.
- count()count($arr) renvoie le nombre d'éléments d'un tableau PHP, donc count(['a', 'b', 'c']) vaut 3. Compter des tableaux imbriqués avec COUNT_RECURSIVE, le lien entre sizeof() et count(), compter les valeurs qui correspondent, et pourquoi count(null) lève une TypeError depuis PHP 8.
- in_array()in_array($needle, $haystack) renvoie true quand la valeur est dans le tableau. Passez true en troisième argument pour une vérification stricte, in_array('1', $ids, true), afin que les types doivent aussi correspondre. Le mode strict, la recherche insensible à la casse, vérifier plusieurs valeurs, les tableaux imbriqués et l'alternative rapide avec isset.
- array_search()array_search($value, $array) renvoie la clé du premier élément égal à $value, ou false s'il n'y en a pas. Comme la clé peut valoir 0, testez toujours le résultat avec !== false. Recherche stricte, trouver toutes les correspondances, chercher dans un tableau multidimensionnel avec array_column, et recherche insensible à la casse.
- array_key_exists()array_key_exists('key', $array) renvoie true quand le tableau a cette clé, même si sa valeur est null. isset($array['key']) est plus rapide mais renvoie false pour une valeur null. La différence, key_exists(), les clés imbriquées, vérifier plusieurs clés, et pourquoi les objets demandent property_exists().
- array_merge()array_merge($a, $b) réunit des tableaux en un seul : les valeurs à clés numériques sont ajoutées et renumérotées, et pour les clés de type chaîne le dernier tableau l'emporte. En quoi array_merge diffère de l'opérateur + et de la syntaxe [...$a, ...$b], comment fusionner une liste de tableaux, et quand array_merge_recursive ou array_replace conviennent mieux.
- array_map()array_map($callback, $array) appelle le callback sur chaque élément et renvoie un nouveau tableau avec les résultats. Fonctions fléchées, clés, plusieurs tableaux à la fois, et quand array_walk ou foreach conviennent mieux.
- array_filter()array_filter($array, $callback) garde les éléments pour lesquels le callback renvoie true. Supprimer les valeurs vides, filtrer par clé avec ARRAY_FILTER_USE_KEY, réindexer le résultat avec array_values et faire des totaux avec array_reduce.
- Trier des tableauxsort($array) trie une liste sur place, asort et ksort trient un tableau associatif par valeur ou par clé, et usort trie avec votre propre comparaison. Toutes ces fonctions, trier un tableau multidimensionnel par une colonne, et éviter l'erreur classique $sorted = sort($arr).
- Supprimer d'un tableauunset($array[$key]) supprime un élément par sa clé, array_splice supprime par position et renumérote, et array_diff supprime par valeur. Chaque méthode, comment réindexer ensuite, et le piège d'array_search qui supprime le mauvais élément.
- array_slice()array_slice($array, $offset, $length) renvoie une copie d'une partie d'un tableau sans modifier l'original. Positions négatives pour les derniers éléments, preserve_keys, pagination d'une liste, et la différence avec array_splice.
- array_unique()array_unique($array) supprime les valeurs en double et garde la première occurrence de chacune, avec sa clé d'origine. Réindexer le résultat, supprimer les doublons sans tenir compte de la casse, dédoublonner un tableau multidimensionnel, et compter ou trouver les doublons.
- array_column()array_column($rows, 'email') renvoie le champ email de chaque ligne sous forme de tableau à plat. L'argument de clé d'index, réindexer des lignes par id, l'utiliser avec des objets, et trouver une ligne avec array_search.
- Déstructuration et list()[$a, $b] = $array affecte les deux premiers éléments à $a et $b en une ligne, et ['name' => $name] = $user fait de même par clé. list() est l'ancienne écriture. Ignorer des éléments, échanger des variables, renvoyer plusieurs valeurs, déstructurer dans foreach et l'opérateur de décomposition ....
Chaînes
- explode()explode(',', $string) découpe une chaîne à chaque virgule et renvoie les morceaux sous forme de tableau. Le paramètre limit, découper par saut de ligne, nettoyer les morceaux, et quand str_split ou preg_split conviennent mieux.
- implode()implode(', ', $array) assemble les valeurs d'un tableau en une seule chaîne avec un séparateur entre elles. implode avec les clés, les tableaux associatifs, construire des listes HTML, et la différence entre implode et join.
- str_replace()str_replace($search, $replace, $subject) remplace chaque occurrence de $search par $replace. Tableaux de recherche et de remplacement, compter les remplacements, str_ireplace insensible à la casse, et remplacer seulement la première occurrence.
- substr()substr($string, $offset, $length) renvoie une partie d'une chaîne. Positions négatives, premiers ou derniers caractères, mb_substr pour le japonais et les autres textes UTF-8, substr_count, et couper un texte avec des points de suspension.
- strpos()strpos($haystack, $needle) renvoie la position de la première occurrence de $needle, ou false si elle n'est pas trouvée. Le test !== false, stripos insensible à la casse, la dernière occurrence avec strrpos, et trouver toutes les occurrences.
- str_contains()str_contains($haystack, $needle) renvoie true si $needle apparaît quelque part dans $haystack. La version insensible à la casse, str_starts_with et str_ends_with, vérifier plusieurs mots, et la version avec strpos pour PHP 7.
- trim()trim($string) supprime les espaces, tabulations et sauts de ligne aux deux extrémités d'une chaîne ; ltrim() et rtrim() nettoient un seul côté. Supprimer des caractères précis, l'espace japonais pleine chasse, et nettoyer chaque valeur d'un tableau.
- strlen()strlen($string) renvoie la longueur d'une chaîne en octets ; mb_strlen($string) la renvoie en caractères. Pourquoi le texte japonais et les emoji donnent des réponses différentes, comment tester une chaîne vide et valider la longueur d'une saisie.
- sprintf()sprintf() construit une chaîne à partir d'un format et de valeurs : sprintf('%05.2f', 3.14159) renvoie "03.14". %s, %d et %f, remplissage avec des zéros, décimales fixes, alignement, numérotation des arguments, printf et vsprintf.
- number_format()number_format(1234567.891, 2) renvoie "1,234,567.89" : elle arrondit au nombre de décimales demandé et ajoute un séparateur de milliers. Les quatre paramètres, les formats européen et japonais, la façon dont elle arrondit, et pourquoi le résultat est une chaîne.
- Retours à la lignePour afficher un retour à la ligne en PHP, écrivez "\n" entre guillemets doubles ou utilisez PHP_EOL. Dans une page web, un saut de ligne ne se voit pas, utilisez donc <br> ou nl2br(). La différence, pourquoi '\n' entre guillemets simples ne fonctionne pas, et comment découper ou supprimer les sauts de ligne.
- preg_match()preg_match($pattern, $subject, $matches) teste une chaîne avec une expression régulière et renvoie 1 en cas de correspondance, 0 sinon. Groupes de capture, groupes nommés, preg_match_all, ancres, motifs de validation et le modificateur u pour l'UTF-8 et le texte japonais.
- preg_replace()preg_replace($pattern, $replacement, $subject) remplace chaque correspondance d'une expression régulière : preg_replace('/\s+/', ' ', $text) réduit les espaces. Les références arrière comme $1, preg_replace_callback, supprimer les caractères non alphanumériques, limites et compteurs.
Fonctions
- FonctionsDéfinissez une fonction PHP avec function name($param) { return $value; }. Valeurs de retour, paramètres par défaut, arguments nommés, passage par référence, déclarations de type avec strict_types, types nullables et union, et ...$args variadique.
- Fonctions fléchéesUne fonction fléchée est une fonction anonyme d'une seule expression, écrite fn($x) => $x * 2. Elle utilise automatiquement les variables extérieures, par valeur, sans use. La syntaxe, le fonctionnement de la capture, les types, les callbacks pour array_map et usort, et quand utiliser plutôt une closure complète.
- Fonctions anonymesUne fonction anonyme (closure) est une fonction sans nom rangée dans une variable : $greet = function ($name) { return "Hi $name"; };. Le mot-clé use, la capture par référence, les callables, la syntaxe de callable de première classe strlen(...) et les closures dans les classes.
- GénérateursUn générateur est une fonction qui utilise yield pour rendre des valeurs une par une, si bien que foreach peut parcourir un million d'éléments sans construire de tableau. yield, les clés, l'économie de mémoire, les séquences infinies, yield from, send() et getReturn().
Classes et objets
- Classes et objetsUne classe PHP est un plan déclaré avec `class Name { }`, et `new Name()` crée un objet à partir de lui. Propriétés, méthodes, `$this`, public/private/protected, propriétés typées et readonly, `__toString`, et pourquoi affecter un objet ne le copie pas.
- ConstructeursUn constructeur PHP est la méthode `__construct()`, qui s'exécute automatiquement quand vous écrivez `new ClassName(...)`. La promotion des propriétés dans le constructeur, les arguments par défaut et nommés, la validation, `parent::__construct()`, et comment simuler plusieurs constructeurs avec des méthodes de fabrique statiques.
- HéritageEn PHP, une classe hérite d'une autre avec `class Dog extends Animal` : elle reçoit les propriétés et méthodes publiques et protégées du parent, peut les redéfinir et peut encore appeler l'original avec `parent::method()`. Redéfinition, protected, final, instanceof et le piège des méthodes privées.
- InterfacesUne interface PHP liste les méthodes qu'une classe promet d'avoir : `interface Shape { public function area(): float; }`, et `class Circle implements Shape` doit alors définir `area()`. Typage avec les interfaces, implémenter plusieurs interfaces, constantes d'interface, interfaces qui en étendent d'autres, interfaces natives comme Countable, et interface ou classe abstraite.
- Classes abstraitesUne classe abstraite PHP se déclare `abstract class Name` et ne peut pas être instanciée : elle existe pour être étendue. Elle peut contenir des propriétés, un constructeur et des méthodes terminées, plus des méthodes `abstract` sans corps que chaque classe enfant doit implémenter.
- TraitsUn trait PHP est un bloc réutilisable de méthodes et de propriétés que vous copiez dans une classe avec `use TraitName;`. Utiliser plusieurs traits, résoudre les conflits de noms avec `insteadof` et `as`, membres abstraits et statiques d'un trait, quelle méthode l'emporte, et trait, interface ou classe abstraite.
- EnumsUne enum PHP (8.1+) est un type avec une liste fixe de valeurs : `enum Status: string { case Active = 'active'; }`. Enums pures et enums adossées, `->value` et `->name`, conversion avec `from()` et `tryFrom()`, liste des cases avec `cases()`, méthodes, constantes, interfaces et enums dans `match`.
- Méthodes statiquesUne méthode ou une propriété `static` appartient à la classe, pas à un objet : vous l'appelez avec `ClassName::method()` et la lisez avec `ClassName::$count`, sans `new`. `self::` ou `static::` (liaison statique tardive), `new static`, les variables statiques dans les fonctions, et quand static est le mauvais outil.
- NamespacesUn namespace PHP regroupe classes, fonctions et constantes sous un préfixe : `namespace App\Models;` en haut d'un fichier, puis `use App\Models\User;` ailleurs pour désigner la classe par son nom court. Noms pleinement qualifiés, alias `use ... as`, `use function`, la barre oblique inverse initiale pour les classes globales, et l'autoloading PSR-4.
Erreurs et exceptions
- try catchEn PHP, le code qui peut échouer va dans un bloc `try { }`, et `catch (Exception $e) { }` s'exécute s'il lève une exception, avec la raison dans `$e->getMessage()`. Intercepter plusieurs types d'exceptions, `finally`, pourquoi `catch (Exception)` rate `TypeError` et `DivisionByZeroError` (interceptez `Throwable`), relancer, et un gestionnaire global.
- ExceptionsEn PHP, on lève une exception avec `throw new Exception('message');`, et l'appelant la lit avec `$e->getMessage()` dans un bloc `catch`. Les classes d'exception natives, écrire des exceptions personnalisées, `getCode()`, `getLine()` et `getPrevious()`, `throw` comme expression, et les erreurs que PHP lève lui-même comme `ValueError` et `TypeError`.
Données, fichiers et web
- json_encode()json_encode($value) transforme un tableau, un objet ou une valeur scalaire PHP en chaîne JSON. Les tableaux associatifs deviennent des objets JSON, les listes des tableaux JSON, et des options comme JSON_PRETTY_PRINT et JSON_UNESCAPED_UNICODE contrôlent la sortie.
- json_decode()json_decode($json, true) transforme une chaîne JSON en tableau associatif PHP ; sans true, vous obtenez des objets stdClass. Valeurs imbriquées, gestion des erreurs avec JSON_THROW_ON_ERROR, json_validate() et pourquoi json_decode renvoie null.
- date()date('Y-m-d') renvoie la date du jour sous forme de chaîne, et date('Y-m-d', $timestamp) formate n'importe quel timestamp Unix. time(), mktime(), strtotime(), DateTimeImmutable, ajouter des jours, la différence entre deux dates et les fuseaux horaires, avec des exemples exécutables.
- Format de dateUn format de date PHP est une chaîne de lettres comme 'Y-m-d H:i:s', où Y est l'année sur 4 chiffres, m le mois, d le jour, H l'heure, i les minutes et s les secondes. Voici chaque caractère de format avec un exemple, plus l'échappement, l'ISO 8601, les dates japonaises et la conversion d'un format à un autre.
- file_get_contents()file_get_contents('notes.txt') lit un fichier entier et le renvoie sous forme d'une seule chaîne, ou false si c'est impossible. Sa partenaire file_put_contents() écrit une chaîne dans un fichier, et file() renvoie les lignes sous forme de tableau.
- fopen()fopen('data.txt', 'r') ouvre un fichier et renvoie une poignée, ou false en cas d'échec. Lisez depuis la poignée avec fgets() ou fread(), écrivez avec fwrite(), fermez-la avec fclose(). Le mode ('r', 'w', 'a', 'x', 'c' et leurs formes +) décide de ce que vous pouvez faire.
- include et requireinclude 'header.php'; exécute un autre fichier PHP à cet endroit, comme si son code y était collé. require fait la même chose mais arrête le script avec une erreur fatale quand le fichier manque, alors qu'include se contente d'un warning et continue. include_once et require_once ne chargent un fichier que la première fois.
- FormulairesUn formulaire PHP s'envoie à lui-même avec <form method="post">, et le script lit les champs dans $_POST['name'] une fois que $_SERVER['REQUEST_METHOD'] vaut 'POST'. Validation, messages d'erreur à côté des champs, conserver les valeurs saisies, cases à cocher et listes déroulantes, et échappement de l'affichage.
- $_GET et $_POST$_GET contient la query string de l'URL (?page=2 donne $_GET['page']) et $_POST contient les champs d'un formulaire envoyé avec method="post". Les lire en toute sécurité, construire des liens avec http_build_query, vérifier $_SERVER['REQUEST_METHOD'], et choisir entre GET et POST.
- htmlspecialchars()htmlspecialchars($text) transforme les cinq caractères qui ont un sens en HTML (& < > " ') en entités, si bien qu'une saisie utilisateur s'affiche en texte au lieu de s'exécuter comme du balisage. ENT_QUOTES, échapper les attributs, double encodage, htmlentities et strip_tags.
- Sessions et cookiesAppelez session_start() en haut de chaque page, puis rangez des valeurs dans $_SESSION['key'] ; PHP les garde sur le serveur et reconnaît le visiteur grâce à un cookie. setcookie('name', 'value', $options) stocke une petite valeur dans le navigateur, relue depuis $_COOKIE. Connexion, déconnexion, messages flash, options des cookies et réglages de sécurité.
- password_hash()Hachez un mot de passe avec password_hash($password, PASSWORD_DEFAULT), stockez le résultat de 60 caractères, et vérifiez une connexion avec password_verify($password, $hash). Pourquoi le hash change à chaque fois, le coût, password_needs_rehash, Argon2id, et pourquoi md5 et sha1 sont inadaptés aux mots de passe.
- filter_var()filter_var($value, FILTER_VALIDATE_EMAIL) renvoie la valeur si elle est valide et false sinon ; FILTER_VALIDATE_INT, FILTER_VALIDATE_URL, FILTER_VALIDATE_BOOL et FILTER_VALIDATE_IP fonctionnent de la même façon. Les options (min_range, default), les drapeaux, les filtres de nettoyage et le piège false ou 0.
- PDOPDO est la couche d'accès aux bases de données de PHP : connectez-vous avec new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', $user, $pass), puis exécutez chaque requête contenant des valeurs avec prepare() et execute([$value]). Connexion, requêtes préparées, lecture des lignes, insertions, transactions et WHERE IN.
- ComposerComposer est le gestionnaire de paquets de PHP : composer require vendor/package télécharge une bibliothèque dans vendor/, l'enregistre dans composer.json, et require 'vendor/autoload.php' la charge. Installer Composer, composer.json, contraintes de version, install ou update, et l'autoloading PSR-4 de vos propres classes.
Débogage et pratique
- var_dump() et print_r()print_r($array) affiche un tableau sous une forme lisible, var_dump($value) montre aussi chaque type et chaque longueur, et var_export affiche du code PHP valide. Quand utiliser chacune, comment obtenir print_r sous forme de chaîne, et comment afficher joliment en HTML avec <pre>.
- Questions d'entretien24 questions d'entretien PHP avec des réponses courtes et exactes pour PHP 8, de == ou === et isset ou empty aux références dans foreach, self ou static, les générateurs, l'injection SQL et le hachage des mots de passe. La plupart des réponses ont du code que vous pouvez exécuter et modifier.