PHP - Passaggio delle funzioni: una guida per principianti

Ciao a tutti, aspiranti sviluppatori PHP! Oggi ci imbarcheremo in un viaggio emozionante nel mondo del passaggio delle funzioni in PHP. Non preoccupatevi se siete nuovi alla programmazione - sarò il vostro guida amichevole, spiegando tutto passo per passo con abbondanti esempi. Allora, entriamo nel vivo!

PHP - Passing Functions

Cos'è una funzione callable?

Prima di iniziare, capiamo cosa intendiamo per "passaggio delle funzioni." In PHP, le funzioni possono essere trattate come dati, il che significa che possiamo passarle come argomenti ad altre funzioni. Queste funzioni passabili sono spesso chiamate "callable" o "callbacks."

Immaginate di avere una scatola magica (una funzione) che può fare diversi trucchetti in base alle istruzioni (un'altra funzione) che ci mettete dentro. Questo è essenzialmente ciò che facciamo quando passiamo le funzioni!

array_map(): Trasformare array con facilità

Iniziamo con una delle funzioni più utilizzate per il passaggio di callbacks: array_map().

Cos'è array_map()?

array_map() applica una funzione callback a ciascun elemento di un array e restituisce un nuovo array con i risultati.

Esempio 1: Raddoppiare numeri

$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
)

In questo esempio, stiamo passando una funzione anonima (detta anche closure) a array_map(). Questa funzione prende ciascun numero e lo moltiplica per 2. Il risultato è un nuovo array con tutti i numeri raddoppiati.

Esempio 2: Maiuscolizzare i nomi

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

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

print_r($capitalized);

Output:

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

Qui, stiamo passando la funzione integrata PHP ucfirst come stringa. array_map() applica questa funzione a ciascun nome, maiuscolizzando la prima lettera.

call_user_func(): La svizzera delle chiamate di funzione

call_user_func() è una funzione versatile che permette di chiamare qualsiasi funzione o metodo callable.

Esempio 3: Chiamare una funzione semplice

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

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

In questo esempio, stiamo passando il nome della funzione ('greet') come stringa, seguita dai suoi argomenti.

Esempio 4: Chiamare un metodo di un oggetto

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

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

Qui, stiamo chiamando un metodo di un oggetto. Passiamo un array contenente l'oggetto e il nome del metodo, seguiti dagli argomenti.

usort(): Ordinamento personalizzato con callbacks

usort() è una funzione potente che permette di ordinare un array utilizzando una funzione di confronto personalizzata.

Esempio 5: Ordinare un array di oggetti

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

In questo esempio, stiamo ordinando un array di oggetti Person in base alla loro età. La funzione di callback confronta le età di due persone e restituisce un valore negativo, zero o positivo per determinare l'ordine.

Passare callbacks a funzioni definite dall'utente

Ora che abbiamo visto come le funzioni integrate di PHP utilizzano callbacks, creiamo la nostra funzione che accetta un callback.

Esempio 6: Creare una funzione personalizzata 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
)

In questo esempio, abbiamo creato la nostra funzione myMap che si comporta in modo simile a array_map. Prende un array e una funzione di callback, applica la callback a ciascun elemento e restituisce un nuovo array con i risultati.

Conclusione

Complimenti! Avete appena fatto i vostri primi passi nel mondo del passaggio delle funzioni in PHP. Abbiamo coperto array_map(), call_user_func(), usort(), e persino creato la nostra funzione che accetta callbacks.

Ricordate, il passaggio delle funzioni è una tecnica potente che permette di scrivere codice più flessibile e riutilizzabile. È come avere una svizzera nel vostro kit di programmazione - versatile e sempre pronta a affrontare diverse任务!

Mentre continuate il vostro viaggio in PHP, troverete molte più opportunità per utilizzare queste tecniche. Continuate a praticare, e presto sarete in grado di passare funzioni come professionisti!

Ecco una tabella di riepilogo delle funzioni che abbiamo discusso:

Funzione Descrizione Caso d'uso esempio
array_map() Applica una callback a tutti gli elementi di un array Trasformare elementi di array
call_user_func() Chiama una callback con parametri Chiamare funzioni o metodi dinamicamente
usort() Ordina un array utilizzando una funzione di confronto definita dall'utente Ordinamento personalizzato di array

Buon coding, e ricorda - nel mondo di PHP, le funzioni sono i tuoi amici!

Credits: Image by storyset