Tôi có một biểu thức toán học lớn phải được tạo động. Ví dụ: khi tôi đã phân tích cú pháp "cái gì đó", kết quả sẽ là một chuỗi như sau: "$foo+$bar/$baz";
.PHP, Làm thế nào để bắt một bộ phận bằng không?
Vì vậy, để tính kết quả của biểu thức mà tôi đang sử dụng các chức năng eval
... một cái gì đó như thế này:
eval("\$result = $expresion;");
echo "The result is: $result";
Vấn đề ở đây là đôi khi tôi nhận được lỗi nói rằng đã có một bộ phận của không, và tôi không biết cách bắt ngoại lệ đó. Tôi đã thử những thứ như:
eval("try{\$result = $expresion;}catch(Exception \$e){\$result = 0;}");
echo "The result is: $result";
Hoặc:
try{
eval("\$result = $expresion;");
}
catch(Exception $e){
$result = 0;
}
echo "The result is: $result";
Nhưng nó không hoạt động. Vì vậy, làm thế nào tôi có thể tránh được rằng ứng dụng của tôi bị treo khi có một bộ phận bằng không?
Edit:
Trước tiên, tôi muốn làm rõ điều gì đó: biểu thức được xây dựng tự động, vì vậy tôi không thể chỉ eval nếu mẫu số là zero. Vì vậy ... liên quan đến nhận xét của Mark Baker, hãy để tôi cho bạn một ví dụ. phân tích cú pháp của tôi có thể xây dựng một cái gì đó như thế này:
"$foo + $bar * ($baz/($foz - $bak))"
Các phân tích cú pháp xây dựng các bước chuỗi bước mà không lo lắng về giá trị của các vars ... do đó, trong trường hợp này nếu $foz == $bak
có trong thực tế, một phép chia cho không: $baz/(0)
.
Mặt khác như Pete đề nghị, tôi đã cố gắng:
<?php
$a = 5;
$b = 0;
if(@eval(" try{ \$res = $a/$b; } catch(Exception \$e){}") === FALSE)
$res = 0;
echo "$res\n";
?>
Nhưng nó không in bất cứ điều gì.
bạn có thể kiểm tra nếu '$ expression' được chia cho zero trước? –
@Anthony Forloney: Câu hỏi hay, câu trả lời của tôi giả định bạn có thể, nhưng nếu Cristian thực sự đang sử dụng eval cho điều này, thì câu trả lời có lẽ là "không". – Powerlord
Sử dụng 'eval' có thể là một ý tưởng tồi. Bây giờ bạn sẽ cho phép người dùng cuối của bạn thực thi mã PHP trên máy chủ của bạn.Tôi không biết một giải pháp thay thế, vì vậy tôi không đăng câu trả lời, nhưng bạn nên suy nghĩ xem liệu bạn có muốn tôi có thể nhập vào bất kỳ mã PHP nào bất kể việc phá hoại trang web của bạn như thế nào. – Umang