2010-09-16 14 views
10

Come sopprimere l'errore "Divisione per zero" e impostare il risultato su zero per l'intera applicazione? Dicendo "per l'intera applicazione", voglio dire che non è per una singola espressione. Invece, ogni volta che si verifica un errore "Divisione per zero", il risultato viene impostato automaticamente su null e non viene generato alcun errore.Come sopprimere l'errore "Divisione per zero" e impostare il risultato su null per l'intera applicazione?

+0

Se siete alla ricerca di C++ l'overloading degli operatori possibilità, in modo che il PHP non sostenerlo, vedere la discussione qui: http: // StackOverflow .com/questions/787692/operator-overloading-in-php – Igor

+0

Gli errori di soppressione sono generalmente considerati una cattiva pratica. Puoi usare 'try' e' catch', ma non '@'. Dovresti scrivere il tuo codice in modo tale che i valori errati siano disinfettati e non vengano emessi errori o avvertimenti dall'esecuzione standard del tuo codice. – Mike

+0

in 'SQL Server', c'è un piccolo trucco' NULLIF() 'http://www.bennadel.com/blog/984-using-nullif-to-prevent-divide-by-zero-errors-in-sql .htm – Jaider

risposta

20

Questo dovrebbe fare il trucco.

$a = @(1/0); 
if(false === $a) { 
    $a = null; 
} 
var_dump($a); 

uscite

NULL 

Vedi gli arbitri qui error controls.

EDIT

function division($a, $b) { 
    $c = @(a/b); 
    if($b === 0) { 
     $c = null; 
    } 
    return $c; 
} 

In ogni luogo sostituto 1/0 dalla funzione chiamata division(1,0).

EDIT - Senza terza variabile

function division($a, $b) {   
    if($b === 0) 
     return null; 

    return $a/$b; 
} 
+0

Wow è così semplice (vorrei averlo pensato) ma lo imposta su null? –

+0

mmm giusto, ma sono ancora sconcertato dalla sua modifica: P –

+2

Questo è il miglior concetto generale. Tuttavia, fallisce quando 'a == 0'. Dovresti cambiare il condizionale per essere 'if ($ c === false)'. Ma in realtà, dovresti semplicemente controllare se '$ b == 0'. ;) – Matthew

5

Semplice come .. bene abc * 123-pi

$number = 23; 
$div = 0; 

//If it's not 0 then divide 
if($div != 0) 
    $result = $number/$div;//is set to number divided by x 
} 
//if it is zero than set it to null 
else{ 
    $result = null;//is set to null 
} 

In funzione

function mydivide($divisior, $div){ 
    if($div != 0) 
    $result = $divisor/$div;//is set to number divided by x 
    } 
    //if it is zero than set it to null 
    else{ 
    $result = null;//is set to null 
    } 
    return $result; 
} 

Usa è come questo

$number = mydivide(20,5)//equals four 

Non riesco a pensare ad un modo per set ogni volta che c'è divisione ma mi piacerebbe utilizzare la funzione e rinominarlo a qualcosa come "d" quindi è breve!

5

Questa è una soluzione orribile, ma per fortuna, non lo userà perché la variabile è impostata su false invece di null.

function ignore_divide_by_zero($errno, $errstring) 
{ 
    return ($errstring == 'Division by zero'); 
} 

set_error_handler('ignore_divide_by_zero', E_WARNING); 

Nel tuo caso, creerei una funzione che fa la tua divisione per te.

2

Cosa succede ad usare un operatore ternario, in questo modo:

$a = $c ? $b/$c : null; 
+0

Questo in realtà non gestisce l'aspetto di 'tutta l'applicazione'. –

Problemi correlati