Polar Code 🎭

Command Palette

Search for a command to run...

03
Pièce N°03

Module 3 : Les Fonctions - Contacts dans l'Ombre

La pluie frappait la vitre. Dans le tiroir, une liasse de fonctions usées. Chacune avait son utilité. Chacune savait faire un travail sale et revenir sans un mot. PHP en avait des natives, prêtes à l'emploi. Et puis il y avait les personnalisées, celles qu'on créait pour des missions spécifiques. Des contacts qu'on pouvait appeler quand le ciel devenait trop lourd.

Fonctions natives Elles étaient déjà là, dans l'ombre du langage. Pas besoin de les présenter. Juste savoir qu'elles existent et quand les utiliser.

<?php
// strlen : mesurer la longueur d'une ombre
$messageSecret = "Le paquet est au pont";
echo strlen($messageSecret);  // 22 caractères. Compte chaque espace.

// strtoupper : crier une information
$chuchotement = "attention aux micros";
echo strtoupper($chuchotement);  // "ATTENTION AUX MICROS"

// date : savoir quel jour on meurt
echo date('d/m/Y H:i:s');  // "21/03/2024 23:47:12"
// Le format est un code. d=jour, m=mois, Y=année, H=heure, i=minutes, s=secondes

// array_push : ajouter un nom à la liste
$cibles = ["Bruno", "Léa"];
array_push($cibles, "Marcus");
// Maintenant : ["Bruno", "Léa", "Marcus"]

// in_array : vérifier si quelqu'un est sur la liste
$estSuspect = in_array("Léa", $cibles);  // true
?>

Création de fonctions personnalisées Quand les natives ne suffisent pas. On définit son propre rituel. On lui donne un nom. On l'appelle quand le besoin se fait sentir.

<?php
// Une fonction simple, sans paramètre
function signalerPresence() {
    echo "Je suis dans la place.";
}

// L'appel
signalerPresence();  // Affiche : "Je suis dans la place."

// Une fonction qui nettoie une arme
function nettoyerArme($nomArme) {
    echo "L'arme '$nomArme' est nettoyée et prête.<br>";
}

nettoyerArme("Colt .45");
nettoyerArme("Couteau à cran d'arrêt");
?>

Paramètres et valeurs de retour La plupart du temps, on donne quelque chose à la fonction. Et on attend qu'elle nous rende quelque chose. Un échange.

<?php
// Fonction avec paramètre et retour
function verifierAlibi($heure, $lieu) {
    if ($heure > 20 && $lieu == "cinéma") {
        return true;  // L'alibi tient
    } else {
        return false; // L'alibi craque
    }
}

$resultat = verifierAlibi(21, "cinéma");
if ($resultat) {
    echo "Le suspect est clean.<br>";
} else {
    echo "Il ment. Serrez-le.<br>";
}

// Paramètres avec valeur par défaut
function fixerRDV($lieu = "pont", $heure = "minuit") {
    return "Rendez-vous à $lieu, à $heure.";
}

echo fixerRDV();                       // "Rendez-vous à pont, à minuit."
echo fixerRDV("bar", "23h");           // "Rendez-vous à bar, à 23h."
echo fixerRDV("gare");                 // "Rendez-vous à gare, à minuit."
?>

Portée des variables C'est là que les débutants se font avoir. Une variable déclarée dans une fonction vit et meurt dans cette fonction. Elle ne voit pas le dehors. Le dehors ne la voit pas.

<?php
$argentDePoche = 500;  // Variable globale

function compterArgent() {
    // Cette variable $argentDePoche est LOCALE
    $argentDePoche = 50;
    echo "Dans la fonction : j'ai $argentDePoche €.<br>";
    // Ça n'affecte PAS la variable globale
}

compterArgent();  // Affiche : "Dans la fonction : j'ai 50 €."
echo "Dehors : j'ai toujours $argentDePoche €.<br>";  // Affiche : "Dehors : j'ai toujours 500 €."

// Pour accéder à la globale, il faut la déclarer
function volerArgent() {
    global $argentDePoche;  // Je pointe vers la variable du dehors
    $argentDePoche -= 200;
    echo "Vol commis. Il reste $argentDePoche €.<br>";
}

volerArgent();  // Affiche : "Vol commis. Il reste 300 €."
echo "Confirmé : il reste $argentDePoche € dehors.<br>";  // 300
?>

Fonctions anonymes Des contacts sans nom. Utiles pour une mission unique. Souvent utilisées comme paramètres d'autres fonctions.

<?php
// Une fonction anonyme stockée dans une variable
$messageCode = function($nom) {
    return "Le corbeau chante pour $nom.";
};

echo $messageCode("Marlowe");  // "Le corbeau chante pour Marlowe."

// Utilisation classique : array_map
$listeNoire = ["Bruno", "Léa", "Marcus"];

// On veut transformer chaque nom en "Suspect : [Nom]"
$listeMarquee = array_map(function($nom) {
    return "Suspect : $nom";
}, $listeNoire);

print_r($listeMarquee);
// Array ( [0] => Suspect : Bruno [1] => Suspect : Léa [2] => Suspect : Marcus )

// Une fonction anonyme avec 'use' pour capturer une variable extérieure
$quantite = 3;
$calculSecret = function($prix) use ($quantite) {
    return $prix * $quantite;  // $quantite vient de l'extérieur
};

echo $calculSecret(50);  // 150
?>

J'éteignis l'écran. La pluie avait cessé. Les fonctions étaient comme des indic, des petites mains. Certaines étaient fournies par le système. D'autres, on les façonnait pour des besoins précis. Il fallait savoir lesquelles appeler, et quand. Et surtout, ne jamais oublier qui voyait quoi. La portée, c'était la première règle de survie dans ce métier.