Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - funzione nella funzione PHP
Forum - PHP - funzione nella funzione PHP

Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:00
Mercoledì, 03/04/2013
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
Codice sorgente - presumibilmente Php

  1. function f1() {
  2. function f2() {
  3. }
  4. }



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

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 11:45
Mercoledì, 03/04/2013

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 13:43
Mercoledì, 03/04/2013
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-|

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:44
Mercoledì, 03/04/2013
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.

Codice sorgente - presumibilmente Php

  1. <?php
  2.         function foo(){
  3.                 echo "foo";
  4.  
  5.                 function foo2(){
  6.                         echo "foo 2";
  7.                 }
  8.         }
  9.  
  10.         foo2(); // errore: undeclared
  11.         foo();
  12.         foo2();
  13. ?>





Il mio blog: https://piero.dev
PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 21:44
Mercoledì, 03/04/2013
In molti sorgenti di framework/librerie le vedo usate per registrare dei fallback
Ad esempio
Codice sorgente - presumibilmente Php

  1. function check_support() {
  2.     if (!function_exists ('strlen')) {
  3.         function strlen($input) {
  4.             return length($input);
  5.         }
  6.     }
  7. }


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

PM Quote