2015-07-23 5 views
7

Cosa c'è di diverso tra isset($string) e @$string in PHP?

Questo funziona in entrambi i modi, quindi qual è la differenza?

if(isset($string)) 
.... 


if(@$string) 
.... 
+6

Il primo controlla che la variabile sia definita e non nullo. Il secondo è il controllo per un valore di verità, il segno '@' sopprime eventuali errori – billyonecan

+0

così possiamo usare entrambi? isset (@ $ stringa)? – Abudayah

+0

non è necessario – billyonecan

risposta

1

Funzione variabile isset() e restituisce true se la variabile esiste. Registrati @ Ignora errore. Dare quasi gli stessi valori. codice successivo forse vederlo:

if(isset($string)) 
     print 1; // no print 
    if(@$string) 
     print 2; // no print 

    $string = false; 
    if(isset($string)) 
     print 3; // print 3 
    if(@$string) 
     print 4; // no print 
+2

FYI: I backtick tripli funzionano solo con il markdown di GitHub, non qui. –

+0

Ok, proverò a ricordarlo :) – ventaquil

6
  1. isset è true se la variabile data esiste e non è null.
    @$var è true se il valore di $varè true in confronto sciolto. *
    !== null e == true abbinamento valori diversi.

  2. Nel caso di @$var, se $var non esiste, verrà generato un errore internamente e generato e il suo output verrà soppresso tramite @. Questa è un'operazione molto più costosa e può far scattare gestori di errori personalizzati in arrivo. Non usarlo mai se c'è un'alternativa.

* Il valore di una variabile inesistente è sostituito da null, che è uguale false.

2

Utilizzare isset($str)non è lo stesso come @$str.

isset($str) è vero se $stris set and is not null.
@$str è vero se $str è truthy.

consideri il seguente esempio:

$str = "0"; 

if (isset($str)) { 
    // This gets printed because $str is set 
    echo "Str is set" . PHP_EOL; 
} 

if (@$str) { 
    // This is NOT printed because $str is falsy 
    echo "Str is truthy" . PHP_EOL; 
} 

Va inoltre osservato che @, oltre ad essere una cattiva abitudine, incorre significant performance penalty.

Problemi correlati