Visualizzazione risultati 1 fino 16 di 16

Discussione: Come funzionano le funzioni?

  1. #1
    Guest

    Predefinito Come funzionano le funzioni?

    cia gente.
    scusate il gioco di parole, vorrei capire un pò meglio come funzionano le funzione in php.

    mettiamo che io voglia creare una funzione:

    Codice PHP:
    function prova($var){
    for(
    $i=0; $i<$var; $i++){
    echo
    "ciao $i";
    }
    }
    ora, invece di riscriverla ogni volta che mi serve, la posso mettere in un file, tipo
    funzioni.inc.php
    giusto?
    a questo punto basterà includere la pagina e richiamare semplicemente
    Codice PHP:
    ...
    prova($nuova_var);
    per poterla sfruttare?

    e se tipo la funzione dovesse tirar fuori dei valori? come si fa?
    es:
    Codice PHP:
    switch($var){
    case
    1: //fa qualcosa; break;
    case 2: //etc..
    }
    ora, questo switch se fosse direttamente in un file php tirerebbe fuori il case opportuno, se invece lo switch fosse in una function inclusa basterebbe cmq richiamarla che poi il case e l'effetto desiderato vengon fuori per bene?

    graZIE.

  2. #2
    Guest

    Predefinito

    Come prima cosa, vorrei chiarire che il presupposto per creare una funzione è che a te servono delle azioni in più occasioni, quindi per non scrivere ogni volta una serie di codici, lo fai una volta sola e richiami tale funzione quando occorre (l'ho chiarito perchè mi è suonato strano l'inizio del tuo post: "mettiamo che io voglia creare una funzione").

    Le funzioni come principio, devono ritornare qualcosa, attraverso una stampata (echo, print, ecc.) o col classico return (o die, ecc.).

    Un esempio:
    Codice PHP:
    function numero($num){
    switch(
    $num){
    case
    "0": echo "il numero è zero"; break;
    case
    "1": echo "il numero è uno"; break;
    case
    "2": echo "il numero è due"; break;
    default: echo
    "il numero è più di due"; break;
    }

    numero("1");
    }

    Ciaooo!!!!!

  3. #3
    Guest

    Predefinito

    si si, vorrei compattare il codice usando una pagina di inclusione esterna con le funzioni, per dare una sistemata al codice :)
    in pratica basta scrivere tutte le funzioni in una pagina da includere e poi richiamare la funzione come se fosse nella pagina stesa gisuto?

    PS: non arrivano le notifiche via mail! :(
    Ultima modifica di lsdforum : 01-04-2007 alle ore 11.46.56

  4. #4
    Guest

    Predefinito

    Esatto.


    Ciaooo!!!

  5. #5
    Guest

    Predefinito

    allora problema.

    ho creato la mia funzione in func.inc.php
    Codice PHP:
    function rank($rank){
    if(
    $rank <= 10){
    $img_rank = $path."img/ranks/0.jpg";
    $alt = "Matita Spuntata";
    }
    elseif(
    $rank > 10 && $rank <= 20){
    $img_rank = $path."img/ranks/10.jpg";
    $alt = "Lapis";
    }
    }
    la richiamo in una pagina:
    Codice PHP:
    ...
    $rank = $row['rank'];
    rank($rank);
    echo
    "<img src='$img_rank' alt='$alt'>";
    ma non si vede una mazza!
    le immagini non vengono visualizzate! :(
    è come se non venisse attivata la funzione

    mi sai aiutare?

  6. #6
    Guest

    Predefinito

    Mi autoquoto:
    Citazione Originalmente inviato da debug
    Le funzioni come principio, devono ritornare qualcosa, attraverso una stampata (echo, print, ecc.) o col classico return (o die, ecc.).
    Tu non hai usato nè un echo nè un return.

    Con echo o print puoi richiamare la funzione direttamente dove ti serve, con return puoi assegnare il risultato della funzione ad una variabile:

    $miavar=nome_funzione($arg);


    Ciaooo!!!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Mi autoquoto:
    Tu non hai usato nè un echo nè un return.

    Con echo o print puoi richiamare la funzione direttamente dove ti serve, con return puoi assegnare il risultato della funzione ad una variabile:

    $miavar=nome_funzione($arg);


    Ciaooo!!!
    scusa ma non ho capito.

    nel mio caso, per avere in output il percorso dell'immagine e l'alt, che devo aggiungere alla funzione?

    EDIT:
    invece di mettere solo $img_rank = XXX
    metto
    return $img_rank = XXX;
    e poi da main $mia_var=funzione($img_rank)?
    ma per ottenere anche l'altra variabile creata nella funzione?
    Codice PHP:
    $img = rank($img_rank);
    $sopra = rank($alt);
    ma l'output non va bene, perchè mi da solo il primo valore e non il secondo.
    Ultima modifica di lsdforum : 01-04-2007 alle ore 12.56.56

  8. #8
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito

    Non si vede nulla perchè la tua funzione non restituisce alcun valore. Dovresti utilizzare return per far appunto ritornare un valore...

  9. #9
    Guest

    Predefinito

    eh ma alla fine della funzione avevo messo
    Codice PHP:
    return $img_rank;
    return
    $alt;
    e poi nel main, per richiamare i risultati avevo messo:
    Codice PHP:
    $img = rank($img_rank);
    $alt = rank($alt);
    ma non funziona.
    non è che devo mettere return ad ogni if?

  10. #10
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Provo a spiegartela così: dall'esterno la tua funzione è come una "scatola nera" che accetta in ingresso zero, uno o più parametri e che è in grado di restituire al massimo un valore. Ad esempio:
    Codice PHP:
    function delta ($a, $b, $c)
    {
    return
    $b * $b - 4 * $a * $c;
    }
    è una funzione che calcola il discriminante di un'equazione di secondo grado.
    Il concetto di "scatola nera" è spiegabile così: se definisci altre variabili all'interno della funzione, queste non possono essere utilizzate all'esterno. In altre parole, questo codice non funziona bene:
    Codice PHP:
    // qualche piccola modifica...
    function delta ($a, $b, $c)
    {
    $quadrato = $b * $b;
    $prodotto = 4 * $a * $c;
    return
    $quadrato - $prodotto;
    }

    $a1 = 1;
    $b1 = 3;
    $c1 = 2;

    echo (
    delta ($a1, $b1, $c1)); // stampa correttamente 1
    echo ($quadrato); // questa non funziona, $quadrato non è definita!
    debug ti aveva detto che una funzione dovrebbe contenere almeno un echo (per stampare dei risultati a video) o un return (per restituire un risultato da elaborare). Se non ci fossero, la tua funzione sarebbe una "scatola nera" che combina qualcosa senza che nessuno lo sappia (e allora, a che servirebbe?).

    Altra cosa: una funzione può restituire AL MASSIMO un valore, non è possibile scrivere più volte l'enunciato return dentro la funzione (a meno che non sei certo che uno escluda gli altri, ad esempio in un blocco if/else). Se devi usare più valori, una soluzione è l'echo, ma con questa puoi solo stamparli a video e non elaborarli.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  11. #11
    Guest

    Predefinito

    ma non capisco allora nel mio caso come fare.
    in uscita dalla funzione devo tirar fuori sia un url sia un testo associato..
    come faccio con un'unica funzione?
    la funzione base è questa:
    Codice PHP:
    function rank($rank){
    if(
    $rank <= 10){
    $img_rank = $path."img/ranks/0.jpg";
    $alt = "Matita Spuntata";
    }
    elseif(
    $rank > 10 && $rank <= 20){
    $img_rank = $path."img/ranks/10.jpg";
    $alt = "Lapis";
    }
    elseif(
    $rank > 20 && $rank <= 35 ){
    $img_rank = $path."img/ranks/20.jpg";
    $alt = "Penna Biro";
    }
    elseif(
    $rank > 35 && $rank <= 50){
    $img_rank = $path."img/ranks/30.jpg";
    $alt = "Penna Stilografica";
    }
    elseif(
    $rank > 50 && $rank <= 70){
    $img_rank = $path."img/ranks/40.jpg";
    $alt = "Penna d'oca";
    }
    elseif(
    $rank > 70 && $rank <= 90){
    $img_rank = $path."img/ranks/50.jpg";
    $alt = "Calamaio";
    }
    elseif(
    $rank > 90 && $rank <= 100){
    $img_rank = $path."img/ranks/60.jpg";
    $alt = "Custode";
    }
    elseif(
    $rank > 100 && $rank <= 125){
    $img_rank = $path."img/ranks/70.jpg";
    $alt = "Custode Superiore";
    }
    elseif(
    $rank > 125 && $rank <= 150){
    $img_rank = $path."img/ranks/80.jpg";
    $alt = "Lulluputtone";
    }
    elseif(
    $rank > 150&& $rank <= 175){
    $img_rank = $path."img/ranks/90.jpg";
    $alt = "Amanuense";
    }
    elseif(
    $rank > 175 && $rank <= 200){
    $img_rank = $path."img/ranks/100.jpg";
    $alt = "Censore";
    }
    elseif(
    $rank > 200 && $rank <= 230){
    $img_rank = $path."img/ranks/110.jpg";
    $alt = "Censore Massimo";
    }
    elseif(
    $rank > 230 && $rank <= 260){
    $img_rank = $path."img/ranks/120.jpg";
    $alt = "Feldrecensore";
    }
    elseif(
    $rank > 260 ){
    $img_rank = $path."img/ranks/150.jpg";
    $alt = "Recensore Generale";
    }
    return
    $img_rank;
    return
    "$alt";
    }
    ma così non ottengo il path e l'alt relativi all'intervallo richiesto...
    come dovrei fare?

    grazie

  12. #12
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Come ti ho detto sopra, non puoi usare due volte l'enunciato return.

    Se quella funzione ti serve solamente per stampare i dati sulla pagina, allora alla fine della funzione puoi benissimo scrivere:
    Codice PHP:
    echo $img_rank;
    echo
    $alt;
    Un consiglio, all'inizio della funzione, prima del primo if, aggiungi anche un'inizializzazione fittizia, per non rischiare di non trovare nemmeno in questo modo le variabili $img_rank e $alt:
    Codice PHP:
    $img_rank = "";
    $alt = "";
    Se invece quei dati li devi ancora elaborare in qualche modo, l'unica soluzione che hai è quella di scrivere DUE funzioni, una che ti restituisca $img_rank e l'altra che ti restituisca $alt... è una duplicazione di lavoro ma l'unica cosa possibile...

    Stammi bene...

    P.S. Con l'esempio di prima, per "elaborare" intendo questo:
    Codice PHP:
    $a1 = 1;
    $b1 = 3;
    $c1 = 2;

    $d = delta ($a1, $b1, $c1);

    // queste sono le soluzioni...
    $x1 = (-$b + sqrt ($d)) / (2 * $a);
    $x1 = (-$b - sqrt ($d)) / (2 * $a);
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  13. #13
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito

    poi puoi far ritornare solo un valore, non due... però puoi facilmente aggirare la cosa facendo ritornare un array contenente i due valori.

  14. #14
    Guest

    Predefinito

    grazie ad entrambi, ma come detto sopra, NON ho bisogno di stampare i dati sulla pagina in ambo i casi.
    in un caso mi serve, come si capisce bene un url e solo nel secondo, come aggiunta, qualche riga di testo.

    in pratica per ottenere in output il path devo fare return $img_rank; e quindi poi
    Codice PHP:
    $url_da_funzione = funzione_1($var);
    per il testo scritto da un'altra funzione
    Codice PHP:
    echo "funzione_2($alt)";
    giusto?

  15. #15
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Più o meno... nel secondo caso dovresti togliere le virgolette (restituisci già una stringa, non serve chiuderla ulteriormente tra i doppi apici).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  16. #16
    Guest

    Predefinito

    ho provato con due funzioni separate e sembra andare tutto bene.
    grazie :)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •