PHP : Niveau Intermédiaire
Passez du script simple à une architecture structurée, sécurisée et professionnelle.
Classes, Héritage et Encapsulation
<?php
class Membre {
protected string $pseudo;
private int $experience = 0;
public function __construct(string $pseudo) {
$this->pseudo = $pseudo;
}
public function gagnerXP(int $points): void {
$this->experience += $points;
}
public function getInfos(): string {
return "Membre : {$this->pseudo}, XP : {$this->experience}";
}
}
$winny = new Membre("WinnyKing");
$winny->gagnerXP(50);
echo $winny->getInfos();
?>
Connexions et requêtes préparées
PDO (PHP Data Objects) est l'interface universelle pour communiquer avec vos bases de données de façon sécurisée.
<?php
try {
$dsn = "mysql:host=localhost;dbname=tuto;charset=utf8mb4";
$pdo = new PDO($dsn, "user_db", "pass_db", [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
// Requête préparée (Protection contre les injections SQL)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => 'winny@king.fr']);
$user = $stmt->fetch();
} catch (PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
?>
Maintenir l'état de l'utilisateur
<?php
// Démarrage sécurisé
session_start([
'cookie_httponly' => true,
'cookie_secure' => true, // Si HTTPS
'use_only_cookies' => true,
]);
$_SESSION['user_id'] = 123;
// Cookie de préférence (valable 30 jours)
setcookie("theme", "dark", time() + 3600 * 24 * 30, "/", "", true, true);
?>
Organiser et éviter les conflits
<?php
namespace App\Controllers;
use App\Models\User; // Importation d'une classe d'un autre namespace
class AuthController {
public function login() {
$user = new User();
// ...
}
}
?>
Gérer les dépendances (Standard PSR-4)
Utilisez Composer pour installer des bibliothèques tierces et automatiser le chargement de vos classes sans multiplier les require.
// Dans votre composer.json
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Fichiers, Dossiers et Dates
<?php
// Écrire dans un log
file_put_contents('app.log', "Action à " . date('H:i:s') . "\n", FILE_APPEND);
// Manipulation de dates avec l'objet DateTime
$date = new DateTime('now');
$date->add(new DateInterval('P7D')); // Ajoute 7 jours
echo $date->format('d/m/Y');
?>
Éviter les erreurs classiques
La sécurité commence par la méfiance envers toutes les données venant de l'extérieur.
<?php
// 1. Hachage de mot de passe (JAMAIS en clair)
$hash = password_hash("mon_pass_secret", PASSWORD_ARGON2ID);
// 2. Vérification
if (password_verify($saisie_user, $hash)) {
echo "Connecté !";
}
// 3. Éviter XSS
echo htmlspecialchars($pseudo_depuis_db, ENT_QUOTES, 'UTF-8');
?>