2010-09-16 19 views
10

Cómo suprimir el error "División por cero" y establecer el resultado en nulo para toda la aplicación? Al decir "para toda la aplicación", quiero decir que no es para una sola expresión. En cambio, siempre que se produce un error de "División por cero", el resultado se establece en nulo automáticamente y no se lanzará ningún error.¿Cómo suprimir el error "División por cero" y establecer el resultado en nulo para toda la aplicación?

+0

Si usted está buscando para C++ operador posibilidad de sobrecarga, por lo que el php no lo soporta, véase la discusión aquí: http: // stackoverflow .com/questions/787692/operator-overloading-in-php – Igor

+0

La supresión de errores generalmente se considera una mala práctica. Puede usar 'try' y' catch', pero no '@'. Debe escribir su código de tal manera que los valores incorrectos se desinfecten y no se generen errores o advertencias por la ejecución estándar de su código. – Mike

+0

en 'SQL Server', hay un pequeño truco' NULLIF() 'http://www.bennadel.com/blog/984-using-nullif-to-prevent-divide-by-zero-errors-in-sql .htm – Jaider

Respuesta

20

Esto debería hacer el truco.

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

salidas

NULL 

Ver las referencias aquí error controls.

EDITAR

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

En cualquier lugar sustituto 1/0 por la llamada a la función division(1,0).

EDITAR - Sin tercera variable

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

    return $a/$b; 
} 
+0

Wow, eso es tan simple (ojalá lo hubiera pensado), pero ¿lo establece en nulo? –

+0

mmm bien, pero todavía estoy perplejo por su edición: P –

+2

Este es el mejor concepto general. Sin embargo, falla cuando 'a == 0'. Debería cambiar el condicional para que sea 'if ($ c === false)'. Pero en realidad, solo debes comprobar si '$ b == 0'. ;) – Matthew

5

simple como .. así 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 función

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

Uso que como esto

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

no puedo pensar en una manera de conjunto que cada vez que hay división pero que haría uso de la función y cambiarle el nombre a algo así como"d" por lo que es corta!

5

Ésta es una solución horrible, pero por suerte, no se va a usar debido a que la variable se establece en lugar de falsenull.

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

set_error_handler('ignore_divide_by_zero', E_WARNING); 

En su caso, crearía una función que hace su división por usted.

2

¿Qué pasa con el uso de un operador ternario, así:

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

Esto realmente no maneja el aspecto de 'toda la aplicación'. –

Cuestiones relacionadas