2010-09-16 8 views
10

Wie unterdrückt man den Fehler "Division durch Null" und setzt das Ergebnis auf Null für die gesamte Anwendung? Indem ich "für die ganze Anwendung" sage, meine ich, dass es nicht für einen einzelnen Ausdruck ist. Bei einem Fehler "Division durch Null" wird das Ergebnis automatisch auf null gesetzt, und es wird kein Fehler ausgegeben.Wie unterdrückt man den Fehler "Division durch Null" und setzt das Ergebnis für die gesamte Anwendung auf null?

+0

Wenn Sie suchen C++ Betreiber Überlastung Möglichkeit, so dass die PHP unterstützt es nicht, siehe die Diskussion hier: http: // Stackoverflow .com/questions/787692/operator-overloading-in-php – Igor

+0

Die Unterdrückung von Fehlern wird im Allgemeinen als eine schlechte Praxis angesehen. Sie können 'try' und' catch' verwenden, aber nicht '@'. Sie sollten Ihren Code so schreiben, dass falsche Werte bereinigt werden und keine Fehler oder Warnungen durch die Standardausführung Ihres Codes ausgelöst werden. – Mike

+0

in 'SQL Server', gibt es einen kleinen Trick' NULLIF() 'http://www.bennadel.com/blog/984-using-nullif-to-prevent-divide-by-zero-errors-in-sql .htm – Jaider

Antwort

20

Dies sollte den Trick tun.

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

Ausgänge

NULL 

Siehe den Refs hier error controls.

EDIT

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

In jedem Ort Ersatz 1/0 durch den Funktionsaufruf division(1,0).

EDIT - Ohne dritten Variable

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

    return $a/$b; 
} 
+0

Wow, das ist so einfach (ich wünschte, ich hätte daran gedacht), aber setzt es auf null? –

+0

mmm richtig, aber ich bin immer noch ratlos von seiner Bearbeitung: P –

+2

Dies ist das beste allgemeine Konzept. Es schlägt jedoch fehl, wenn 'a == 0'. Sie sollten die Bedingung so ändern, dass sie 'if ($ c === false)' ist. Aber eigentlich sollten Sie nur prüfen, ob $ b == 0 ist. ;) – Matthew

5

So einfach .. gut 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 
} 

Als Funktion

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; 
} 

Verwenden es wie diese

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

Ich kann es nicht glauben, einen Weg zu Satz, wenn die Division dort aber ich die Funktion verwenden würde und es etwas umbenennen wie „d“ so kurz, es ist!

5

Dies ist eine schreckliche Lösung, aber zum Glück, Sie werden es nicht verwenden, da die Variablen false gesetzt statt null.

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

set_error_handler('ignore_divide_by_zero', E_WARNING); 

In Ihrem Fall würde ich eine Funktion erstellen, die Ihre Abteilung für Sie erledigt.

2

Was einen ternären Operator über die Verwendung, etwa so:

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

Dies behandelt nicht wirklich den Aspekt 'ganze Anwendung'. –

Verwandte Themen