Συναρτήσεις επανάκλησης (Callbacks) στην PHP
Συνάρτηση επανάκλησης (Callback) ονομάζεται μια συνάρτηση, που μεταβιβάζεται ως παράμετρος σε μια άλλη συνάρτηση.
Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε μια συνάρτηση που αποδέχεται ως πρώτη παράμετρο έναν αριθμό, και ως δεύτερη παράμετρο - μια συνάρτηση επανάκλησης:
<?php
function func($num, $calb)
{
}
?>
Ας κάνουμε έτσι ώστε μέσα στη συνάρτηση η συνάρτηση επανάκλησης μας να κληθεί για τον αριθμό που μεταβιβάστηκε:
<?php
function func($num, $calb)
{
echo $calb($num);
}
?>
Ας δούμε τώρα ποιες επιλογές έχουμε για τη μεταβίβαση της συνάρτησης επανάκλησης στη συνάρτησή μας.
Επιλογή 1
Η συνάρτηση επανάκλησης μας μπορεί να είναι μια συνηθισμένη συνάρτηση:
<?php
function calb($num) {
return $num ** 2;
}
?>
Σε αυτή την περίπτωση, ως συνάρτηση επανάκλησης θα μεταβιβάσουμε το όνομα της συνάρτησής μας:
<?php
func(3, 'calb');
?>
Μέσα στη συνάρτηση func η
συνάρτηση επανάκλησης θα κληθεί με βάση το όνομά της.
Επιλογή 2
Η συνάρτηση επανάκλησης μας μπορεί να είναι μια ανώνυμη συνάρτηση, που έχει αποθηκευτεί σε μια μεταβλητή:
<?php
$calb = function($num) {
return $num ** 2;
};
?>
Σε αυτή την περίπτωση, μεταβιβάζουμε ως παράμετρο τη μεταβλητή που περιέχει τη συνάρτησή μας:
<?php
func(3, $calb);
?>
Επιλογή 3
Μπορούμε να μεταβιβάσουμε την ανώνυμη συνάρτηση αμέσως ως παράμετρο:
<?php
func(3, function($num) {
return $num ** 2;
});
?>
Επιλογή 4
Μπορούμε να συντομεύσουμε τον κώδικα, χρησιμοποιώντας συνάρτηση βέλους:
<?php
func(3, fn($num) => $num ** 2);
?>
Πρακτικές ασκήσεις
Δίνεται μια συνάρτηση, που δέχεται ως παράμετρο έναν πίνακα και μια συνάρτηση επανάκλησης, η οποία θα εφαρμοστεί σε κάθε στοιχείο του πίνακα:
<?php
function func($arr, $calb)
{
$res = [];
foreach ($arr as $elem) {
$res[] = $calb($elem);
}
return $res;
}
?>
Καλέστε αυτή τη συνάρτηση, μεταβιβάζοντας ως παράμετρο έναν πίνακα με αριθμούς και μια συνάρτηση επανάκλησης, που υψώνει τον αριθμό που μεταβιβάστηκε στο τετράγωνο.