2010-09-16 11 views
10

Comment supprimer l'erreur "Division par zéro" et définir le résultat sur null pour l'application entière? En disant «pour toute l'application», je veux dire que ce n'est pas pour une seule expression. Au lieu de cela, chaque fois qu'une erreur "Division par zéro" se produit, le résultat est automatiquement défini sur null et aucune erreur ne sera générée.Comment supprimer l'erreur "Division par zéro" et définir le résultat sur null pour l'ensemble de l'application?

+0

Si vous cherchez C++ possibilité de surcharge de l'opérateur, de sorte que le php ne le supporte pas, voir la discussion ici: http: // stackoverflow .com/questions/787692/operator-overloading-in-php – Igor

+0

La suppression des erreurs est généralement considérée comme une mauvaise pratique. Vous pouvez utiliser 'try' et' catch', mais pas '@'. Vous devez écrire votre code de manière à ce que les valeurs incorrectes soient nettoyées et qu'aucune erreur ou avertissement ne soit émis par l'exécution standard de votre code. – Mike

+0

dans 'SQL Server', il y a un petit truc' NULLIF() 'http://www.bennadel.com/blog/984-using-nullif-to-prevent-divide-by-zero-errors-in-sql .htm – Jaider

Répondre

20

Cela devrait faire l'affaire.

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

sorties

NULL 

Voir les refs ici error controls.

EDIT

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

En tout lieu substitut 1/0 par l'appel de fonction division(1,0).

EDIT - Sans troisième variable

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

    return $a/$b; 
} 
+0

Wow c'est si simple (j'aurais aimé y penser) mais est-ce que ça le met à zéro? –

+0

mmm droite, mais je suis toujours perplexe par son édition: P –

+2

Ceci est le meilleur concept général. Cependant, il échoue quand 'a == 0'. Vous devriez changer le conditionnel pour être 'if ($ c === false)'. Mais en fait, vous devriez juste vérifier si '$ b == 0'. ;) – Matthew

5

Simple comme .. bien 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 
} 

En fonction

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

Utilisez il comme celui-ci

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

Je ne peux pas penser à une façon de ensemble chaque fois il y a division mais j'utiliser la fonction et le renommer à quelque chose comme « d » il est court!

5

C'est une solution horrible, mais heureusement, vous ne serez pas l'utiliser parce que la variable est définie à false au lieu de null.

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

set_error_handler('ignore_divide_by_zero', E_WARNING); 

Dans votre cas, je créerais une fonction pour votre division.

2

Qu'en est-il en utilisant un opérateur ternaire, comme ceci:

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

Cela ne gère pas vraiment l'aspect 'application complète'. –

Questions connexes