Visualizzazione risultati 1 fino 5 di 5

Discussione: Dubbio logico sul funzionamento di elseif

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito Dubbio logico sul funzionamento di elseif

    Salve raga!
    So che è una domanda da nubbio ma, col php sono decisamente nubbio quindi mi tocca chiedere
    Stavo leggendo qui: http://php.html.it/guide/lezione/258...lse-e-else-if/ l'uso di elseif e dice:
    Elseif permette di specificare casualità non definite da if; un esempio potrebbe essere: "Se $a è uguale a $b visualizza $a, se $a è diversa da $b visualizza un messaggio d'errore, avvisa se $a non esiste, avvisa se $b non esiste". Con i soli if ed else non si potrebbe fare, ma con elseif diventa semplice:
    Codice:
    if ($a == $b) {
    echo "\$a è uguale a \$b.\n";
    } elseif ($a != $b) {
    echo "\$a è diversa da \$b.\n";
    } elseif (!$a) {
    echo "\$a non esiste.\n";
    } elseif (!$b) {
    echo "\$b non esiste.\n";
    }
    che con i soli if ed else non si potrebbe fare
    Non convincendomi la logica di quanto detto ho provato un semplice
    Codice:
    $a = 1;
    $b = 2;
    if ($a == $b) {
    echo "\$a è uguale a \$b.\n";
    } if ($a != $b) {
    echo "\$a è diversa da \$b.\n";
    } if (!$a) {
    echo "\$a non esiste.\n";
    } if (!$b) {
    echo "\$b non esiste.\n";
    }
    e funziona esattamente allo stesso identico modo quindi mi chiedo: "perchè usare elseif invece di if"?

  2. #2
    Guest

    Predefinito

    L'elseif serve a verificare una condizione non specificata nell'if precedente. Prendi per esempio questo codice:

    Codice PHP:
    $a = 1;
    $b = 1;
    if(
    $a == $b ) {
    echo
    "$a uguale a $b";
    }
    if(
    $a > $b ) {
    echo
    "$a maggiore di $b";
    } else {
    echo
    "$a minore di $b";
    }
    In questo caso la prima condizione sarà vera, quindi verrà eseguito il codice del primo if. Nel passo successivo c'è un altro blocco if-else, che non è per niente collegato al precedente (secondo PHP), quindi la prima condizione sarà falsa, ma il successivo else verrà eseguito, perchè è in relazione con il secondo if, ma non con il primo.
    Se invece avessimo usato l'elseif al posto del secondo if, al verificarsi della prima condizione il resto del blocco if-elseif-else sarebbe stato ignorato, ottenendo quindi un risultato corretto (cioè sarebbe stato eseguito solo il primo if).

    Quindi un esempio corretto sarebbe:
    Codice PHP:
    $a = 1;
    $b = 1;
    if(
    $a == $b ) {
    echo
    "$a uguale a $b";
    } elseif(
    $a > $b ) {
    echo
    "$a maggiore di $b";
    } else {
    echo
    "$a minore di $b";
    }
    Oppure si potrebbe fare anche solo con degli if-else:
    Codice PHP:
    $a = 1;
    $b = 1;
    if(
    $a == $b ) {
    echo
    "$a uguale a $b";
    } else {
    if(
    $a > $b ) {
    echo
    "$a maggiore di $b";
    } else {
    echo
    "$a minore di $b";
    }
    }
    Ultima modifica di camba : 08-06-2009 alle ore 14.44.25

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Beh, perché solo con if, potrebbero verificarsi tutte le condizioni (tutti i casi).
    Invece, con if - else verrà eseguito SOLO una condizione

    CIao!

    EDIT: anticipato: potete cancellare se ritenete opportuno...
    Ultima modifica di alemoppo : 08-06-2009 alle ore 14.43.12

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

    Predefinito

    C'è una differenza piuttosto sostanziale: se scrivi solo "if", tutte le condizioni vengono verificate e i relativi stralci di codice eseguiti quando soddisfano la condizione associata. Da ciò consegue che se per qualche motivo il tuo codice dovesse soddisfare più di una condizione, TUTTI i rispettivi blocchi sarebbero eseguiti.

    Nel blocco "if" / "elseif" / "else", invece, le condizioni vengono verificate una alla volta fino a che ne viene trovata una soddisfatta dal codice precedente. Ne consegue che ad essere eseguito sarà comunque UN solo ramo della struttura, precisamente quello associato alla prima condizione vera tra quelle esaminate.

    Che a te funzioni uguale, è un caso: in quell'esempio le condizioni sono fatte apposta per essere esclusive l'una rispetto all'altra (tra l'altro, è un codice scritto un po' con i piedi... si dovrebbe verificare se una variabile esiste PRIMA di qualsiasi utilizzo, anche un semplice confronto...).

    Stammi bene...
    Ultima modifica di dementialsite : 08-06-2009 alle ore 14.43.14
    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...

  5. #5
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Grazie per le risposte :)
    Il tutto era perchè stavo revisionando i vari title fix che misi nel template del mio sito:
    Codice PHP:
    // Check homepage url
    $fixfullurl = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $fixlink1 = "http://darkwolf.altervista.org/forum/";
    $fixlink2 = "http://darkwolf.altervista.org/forum/index.php";
    $fixlink3 = "http://darkwolf.altervista.org/forum/index.php?language=italian";
    $fixlink4 = "http://darkwolf.altervista.org/forum/index.php?language=english";
    $fixlink5 = "http://www.darkwolf.altervista.org/forum/";
    $fixlink6 = "http://www.darkwolf.altervista.org/forum/index.php";
    $fixlink7 = "http://www.darkwolf.altervista.org/forum/index.php?language=italian";
    $fixlink8 = "http://www.darkwolf.altervista.org/forum/index.php?language=english";
    // Set empty value
    $fixdescription = "";
    $fixtitleafter = "";
    $fixtitlebefore = "";
    // Fix da inserire prima del titolo - homepage
    if (($fixfullurl == $fixlink1) || ($fixfullurl == $fixlink2) || ($fixfullurl == $fixlink3) || ($fixfullurl == $fixlink4) || ($fixfullurl == $fixlink5) || ($fixfullurl == $fixlink6) || ($fixfullurl == $fixlink7) || ($fixfullurl == $fixlink8)){
    $fixtitleafter = $txt['fixindex'];
    // Fix description
    $fixdescription = $txt['fixindexdesc'];}
    if (
    $context['page_title'] == 'Downloads'){
    $fixtitleafter = " Area";}
    if (
    $context['page_title'] == 'Albums'){
    $fixtitleafter = " - Gallery";}
    // Fix da inserire prima del titolo - altre pagine
    if (($context['page_title'] == 'Regolamento') || ($context['page_title'] == 'GuestBook') || ($context['page_title'] == 'Downloads') || ($context['page_title'] == 'Albums')) {
    $fixtitlebefore = "DarkWolf - ";}
    if (
    $context['page_title'] == 'Download'){
    $fixtitlebefore = "DarkWolf - Area ";}
    definendo le variabili vuote mi sono risparmiato gli else ed ho eliminato alcuni errori nel log ma ancora non mi "piace" (nonostante funzioni perfettamente) e volevo vedere di ottimizzarlo :)
    -
    Quindi, se ho capito bene, gli ultimi 4if andrebbero cambiati in elseif giusto?
    Cioè così:
    Codice PHP:
    // Set empty value
    $fixdescription = "";
    $fixtitleafter = "";
    $fixtitlebefore = "";
    // Fix da inserire prima del titolo - homepage
    if (($fixfullurl == $fixlink1) || ($fixfullurl == $fixlink2) || ($fixfullurl == $fixlink3) || ($fixfullurl == $fixlink4) || ($fixfullurl == $fixlink5) || ($fixfullurl == $fixlink6) || ($fixfullurl == $fixlink7) || ($fixfullurl == $fixlink8)){
    $fixtitleafter = $txt['fixindex'];
    // Fix description
    $fixdescription = $txt['fixindexdesc'];}
    elseif (
    $context['page_title'] == 'Downloads'){
    $fixtitleafter = " Area";}
    elseif (
    $context['page_title'] == 'Albums'){
    $fixtitleafter = " - Gallery";}
    // Fix da inserire prima del titolo - altre pagine
    elseif (($context['page_title'] == 'Regolamento') || ($context['page_title'] == 'GuestBook') || ($context['page_title'] == 'Downloads') || ($context['page_title'] == 'Albums')) {
    $fixtitlebefore = "DarkWolf - ";}
    elseif (
    $context['page_title'] == 'Download'){
    $fixtitlebefore = "DarkWolf - Area ";}
    -
    PS: invece di controllare tutti i valori (primo if) come posso fare?
    Ultima modifica di darkwolf : 08-06-2009 alle ore 15.19.45

Regole di scrittura

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