2010-09-16 10 views
10

Jak wyłączyć błąd "Podział przez zero" i ustawić wynik na wartość null dla całej aplikacji? Mówiąc "dla całej aplikacji", mam na myśli, że nie jest to pojedyncze wyrażenie. Zamiast tego, gdy wystąpi błąd "Podział przez zero", wynik zostanie automatycznie ustawiony na wartość null i nie zostanie zgłoszony żaden błąd.Jak wyłączyć błąd "Podziel przez zero" i ustawić wynik na wartość null dla całej aplikacji?

+0

Jeśli szukasz C++ operatora przeciążenia możliwości, więc php nie obsługuje, zobacz dyskusję tutaj: http: // stackoverflow .pl/questions/787692/operator-overloading-in-php – Igor

+0

Pomijanie błędów jest ogólnie uważane za złą praktykę. Możesz użyć 'try' i' catch', ale nie '@ '. Powinieneś napisać swój kod w taki sposób, że niepoprawne wartości są oczyszczone i żadne błędy ani ostrzeżenia nie są generowane przez standardowe wykonanie twojego kodu. – Mike

+0

w 'SQL Server' jest mała sztuczka' NULLIF() 'http://www.bennadel.com/blog/984-using-nullif-to-prevent-divide-by-zero-errors-in-sql .htm – Jaider

Odpowiedz

20

To powinno wystarczyć.

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

wyjścia

NULL 

Zobacz bibl tutaj error controls.

EDIT

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

w dowolnym miejscu substytut 1/0 przez wywołanie funkcji division(1,0).

EDIT - Bez trzeciej zmiennej

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

    return $a/$b; 
} 
+0

Wow thats so simple (Chciałbym o tym pomyśleć), ale czy to ustawienie na wartość null? –

+0

mmm w prawo, ale nadal jestem zaskoczony jego zmianą: P –

+2

To jest najlepsza ogólna koncepcja. Jednak zawiedzie, gdy 'a == 0'. Powinieneś zmienić warunek, aby był "if ($ c === false)". Ale tak naprawdę powinieneś sprawdzić, czy '$ b == 0'. ;) – Matthew

5

prosty jak również 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 
} 

Jako funkcji

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

Zastosowanie to tak

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

Nie mogę myśleć o sposób zestawu to gdy istnieje podział ale chciałbym korzystać z funkcji i przemianować go coś jak „d” więc jest to krótki!

5

To straszne rozwiązanie, ale na szczęście, nie będzie go używać, ponieważ zmienna jest ustawiona na false zamiast null.

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

set_error_handler('ignore_divide_by_zero', E_WARNING); 

W twoim przypadku utworzę funkcję, która wykona twój podział dla ciebie.

2

Co o użyciu operatora potrójny, tak:

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

To naprawdę nie obsługuje aspektu" całej aplikacji ". –

Powiązane problemy