PHP - Passage de fonctions : Un guide pour débutants

Salut à toi, futur développeur PHP ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde du passage de fonctions en PHP. Ne t'inquiète pas si tu es nouveau dans le monde de la programmation – je serai ton guide amical, expliquant tout pas à pas avec plein d'exemples. Alors, mettons-nous à l'eau !

PHP - Passing Functions

Quelles sont les fonctions callables ?

Avant de commencer, comprenons ce que nous entendons par "passage de fonctions". En PHP, les fonctions peuvent être traitées comme des données, ce qui signifie que nous pouvons les passer comme arguments à d'autres fonctions. Ces fonctions passables sont souvent appelées "callable" ou "callbacks".

Imagine que tu as une boîte magique (une fonction) qui peut faire différents tours en fonction des instructions (une autre fonction) que tu mets dedans. C'est essentiellement ce que nous faisons lorsque nous passons des fonctions !

array_map() : Transformer des tableaux avec facilité

Commençons par l'une des fonctions les plus couramment utilisées pour passer des callbacks : array_map().

Qu'est-ce que fait array_map() ?

array_map() applique une fonction callback à chaque élément d'un tableau et renvoie un nouveau tableau avec les résultats.

Exemple 1 : Doubler des nombres

$numbers = [1, 2, 3, 4, 5];

$doubled = array_map(function($n) {
return $n * 2;
}, $numbers);

print_r($doubled);

Output :

Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)

Dans cet exemple, nous passons une fonction anonyme (également appelée closure) à array_map(). Cette fonction prend chaque nombre et le multiplie par 2. Le résultat est un nouveau tableau avec tous les nombres doublés.

Exemple 2 : Mettre en majuscule les noms

$names = ['alice', 'bob', 'charlie'];

$capitalized = array_map('ucfirst', $names);

print_r($capitalized);

Output :

Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)

Ici, nous passons la fonction native PHP ucfirst sous forme de chaîne. array_map() applique cette fonction à chaque nom, mettant la première lettre en majuscule.

call_user_func() : Le couteau suisse des appels de fonction

call_user_func() est une fonction polyvalente qui permet d'appeler n'importe quelle fonction callable ou méthode.

Exemple 3 : Appeler une fonction simple

function greet($name) {
return "Hello, $name!";
}

$result = call_user_func('greet', 'World');
echo $result;  // Output : Hello, World!

Dans cet exemple, nous passons le nom de la fonction ('greet') sous forme de chaîne, suivi de ses arguments.

Exemple 4 : Appeler une méthode d'un objet

class Greeter {
public function sayHi($name) {
return "Hi, $name!";
}
}

$greeter = new Greeter();
$result = call_user_func([$greeter, 'sayHi'], 'PHP');
echo $result;  // Output : Hi, PHP!

Ici, nous appelons une méthode d'un objet. Nous passons un tableau contenant l'objet et le nom de la méthode, suivi des arguments.

usort() : Tri personnalisé avec des callbacks

usort() est une fonction puissante qui permet de trier un tableau en utilisant une fonction de comparaison personnalisée.

Exemple 5 : Trier un tableau d'objets

class Person {
public $name;
public $age;

public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}

$people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35)
];

usort($people, function($a, $b) {
return $a->age - $b->age;
});

foreach ($people as $person) {
echo "{$person->name}: {$person->age}\n";
}

Output :

Bob: 25
Alice: 30
Charlie: 35

Dans cet exemple, nous trions un tableau d'objets Person en fonction de leur âge. La fonction de callback compare les âges de deux personnes et renvoie une valeur négative, nulle ou positive pour déterminer leur ordre.

Passage de callbacks à des fonctions utilisateur

Maintenant que nous avons vu comment les fonctions intégrées de PHP utilisent des callbacks, créons notre propre fonction qui accepte un callback.

Exemple 6 : Créer une fonction personnalisée de map

function myMap($array, $callback) {
$result = [];
foreach ($array as $item) {
$result[] = $callback($item);
}
return $result;
}

$numbers = [1, 2, 3, 4, 5];

$squared = myMap($numbers, function($n) {
return $n * $n;
});

print_r($squared);

Output :

Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
)

Dans cet exemple, nous avons créé notre propre fonction myMap qui se comporte comme array_map. Elle prend un tableau et une fonction de callback, applique le callback à chaque élément, et renvoie un nouveau tableau avec les résultats.

Conclusion

Félicitations ! Tu viens de faire tes premiers pas dans le monde du passage de fonctions en PHP. Nous avons couvert array_map(), call_user_func(), usort(), et même créé notre propre fonction qui accepte des callbacks.

Souviens-toi, passer des fonctions est une technique puissante qui permet d'écrire du code plus flexible et réutilisable. C'est comme avoir un couteau suisse dans ton coffre à outils de programmation - polyvalent et toujours prêt à affronter différentes tâches !

While tu continues ton voyage en PHP, tu trouveras de nombreuses occasions de utiliser ces techniques. Continue à pratiquer, et bientôt tu passeras des fonctions comme un pro !

Voici un tableau de référence rapide des fonctions que nous avons discutées :

Fonction Description Exemple d'utilisation
array_map() Applique une callback à tous les éléments d'un tableau Transformer les éléments d'un tableau
call_user_func() Appelle une callback avec des paramètres Appeler dynamiquement des fonctions ou des méthodes
usort() Trie un tableau en utilisant une fonction de comparaison personnalisée Trier des tableaux personnalisés

Bonne programmation, et souviens-toi - dans le monde du PHP, les fonctions sont tes amis !

Credits: Image by storyset