Oppure

Loading
03/04/13 9:00
giocala88
Salve ragazzi, da poco mi sono imbattuto in una ricerca e mi sono ritrovato di fronte ad una dichiarazione di funzione in una funzione, del tipo
function f1() {
function f2() {
}
}


Forse sarà una domanda stupida la mia però vorrei sapere l'utilità nel dichiarare una funzione nella funzione. Perché sinceramente io non la vedo, però mi interesserebbe sapere i pro e i contro dell'ultilizzo della stessa (magari pure con qualche esempio o qualche link che spieghi).
Grazie
aaa
03/04/13 9:45
tasx
aaa
03/04/13 11:43
giocala88
Diciamo che il concetto che non mi è stato molto chiaro, forse perché alla fine non ha un senso utilizzare queste funzioni nelle funzioni e comunque credo che non sia conveniente utilizzarle. Poi correggetemi se sbaglio 8-|
aaa
03/04/13 17:44
pierotofy
E' una semplice particolarita' del parser che le funzioni annidate sono permesse. Al confronto di altri linguaggi (come Javascript) dove funzioni annidate sono limitate nel loro scope (e ci sono vantaggi in questo approccio, come la possibilita' di impostare diversi livelli di visibilita' per certe funzioni), PHP semplicemente mette tutte le funzioni che incontra nello scope globale. Nell'esempio qui sotto, se scrivessi lo stesso programma in Javascript, anche la seconda chiamata a foo2() ritornerebbe errore. In PHP l'unico effetto e' che foo2 non viene definita fino a quando foo non viene chiamata. Il che non ha nessun vantaggio.

<?php
	function foo(){
		echo "foo";

		function foo2(){
			echo "foo 2";
		}
	}

	foo2(); // errore: undeclared
	foo();
	foo2();
?>


Il mio blog: piero.dev
03/04/13 19:44
Qwertj
In molti sorgenti di framework/librerie le vedo usate per registrare dei fallback
Ad esempio
function check_support() {
    if (!function_exists ('strlen')) {
        function strlen($input) {
            return length($input);
        }
    }
}

Così se non è già dichiarata la funzione sei sicuro di averne comunque una tua implementazione che gira al suo posto

In generale si usa questa feature per dichiarare certe funzioni solo in certi casi
aaa