Visualizzazione dei risultati da 1 a 7 su 7

Discussione: sintassi particolare

  1. #1

    sintassi particolare

    ragazzi leggevo un pezzo di codice su php.net:

    Codice PHP:
    <?php
    function isBuggyIe() {
        
    $ua $_SERVER['HTTP_USER_AGENT'];
        
    // quick escape for non-IEs
        
    if (!== strpos($ua'Mozilla/4.0 (compatible; MSIE ')
            || 
    false !== strpos($ua'Opera')) {
            return 
    false;
        }
        
    // no regex = faaast
        
    $version = (float)substr($ua30); 
        return (
            
    $version 6
            
    || ($version == 6  && false === strpos($ua'SV1'))
        );
    }

    // usage:
    isBuggyIe() || ob_start("ob_gzhandler");
    ?>
    non avevo mai visto l'uso di quest'ultima riga di codice...

    mi spiegate che fa?

    cioè è facile intuirlo (se isBuggyIE() ritorna TRUE allora fa partire il comando di ob_start altriementi non lo fa)

    ma è spiegato da qualche parte nel manuale che si può fare una cosa del genere? io sinceramnete è la prima volta che la vedo...

    a questo punto si può utilizzare anche l'operatore &&?

    per fare:

    codice:
    isBuggyIE() && doNothing()
    giusto?

    mannaggia a saperlo prima mi sarei risparmiato un pò bel pò di if nel mio codice

  2. #2
    a quanto pare non ero l'unico ad averle viste per la prima volta

  3. #3
    quando fai una condizione, in ||, php vede la prima espressione, e se è vera testa la seconda per finire l'or... in questo caso ha senso perchè così la seconda funzione viene fatta partire solo se la prima è vera... se usi && non avrebbe piu senso perchè anche se la prima espressione fosse falsa testerebbe la cmq la seconda
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Originariamente inviato da Santino83_02
    quando fai una condizione, in ||, php vede la prima espressione, e se è vera testa la seconda per finire l'or... in questo caso ha senso perchè così la seconda funzione viene fatta partire solo se la prima è vera... se usi && non avrebbe piu senso perchè anche se la prima espressione fosse falsa testerebbe la cmq la seconda
    hm?

    in un If se c'è l'OR vengono testati entrambi i membri... il comportamento è diverso se || è usato in un if oppure in quel caso (a quanto mi pare di capire) ma nel manuale c'è scritto qualocsa a riguardo? io non ho trovato nulla...

  5. #5
    hmm no, non è proprio esatto

    quando calcoli un or, se una delle espressioni è vera, l'or restituisce sempre true. Quindi, è inutile andare a calcolare N espressioni in or quando la prima è vera...

    quindi, se chiedi a php di calcolarti $a || $b, se $a è vera non andrà mai a calcolarti $b, perchè sarebbe uno spreco di tempo e risorse. Infatti, come hai detto giustamente te, nell'esempio c'è isBuggyIe() || ob_start(..), e tu hai detto "se isBuggyIe è vera allora ob_start parte"... se non fosse come dico io, l'affermazione tua sarebbe errata perchè cmq php andrebbe a testare il valore di ob_start

    con && non succede perchè bisogna sempre testare i valori di almeno le prime tre espressioni della condizione per sapere se è true o false ( vero && falso = falso, ma vero && vero e falso && falso = vero)

    per farti un esempio, esegui

    Codice PHP:
    <?php

    function a1(){ echo "a1 executed"; return true; }
    function 
    a2(){ echo "a2 executed"; return false; }


    if(
    a1() || a2())
            echo 
    "c'è";
    else
            echo 
    "non c'è";

    ?>
    e vedi un pò che output ti torna

    ps: e chi l'ha mai letto il manuale... o almeno, non per queste cose
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Originariamente inviato da Santino83_02
    ( ma vero && vero e falso && falso = vero)

    [/php]
    (false && false ) = vero?



    ahahahah






    ps: e chi l'ha mai letto il manuale... o almeno, non per queste cose
    avresti dovuto farlo

  7. #7
    Originariamente inviato da xnavigator
    (false && false ) = vero?
    si è vero dico un sacco di cavolate alle 2 del mattino


    Originariamente inviato da xnavigator
    avresti dovuto farlo
    e te manco leggendolo ci capisci niente...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.