2012-07-13 29 views
14

Tôi có một chức năng:thực hành tốt nhất cho trở về "lỗi" từ một hàm

public function CustomerRating() { 
    $result = $db->query("..."); 
    $row = $result->fetch_assoc(); 

    if($row) 
      $output = $row['somefield']; 
    } else { 
      $output = "error"; 
    } 

    return $output; 
} 

//somewhere on another page... 
if(is_numeric($class->CustomerRating()) { 
    echo $class->CustomerRating; 
} else { 
     echo "There is an error with this rating."; 
} 

Có cách nào tốt hơn để tìm lỗi? Trong hàm này, nếu không có hàng nào được trả về, nó không có nghĩa là "lỗi" cho mỗi lần, nó chỉ đơn giản nghĩa là giá trị không thể được tính toán. Khi tôi kiểm tra kết quả của một hàm, tôi cảm thấy có cách tốt hơn để kiểm tra dữ liệu được trả lại trước khi tôi hiển thị nó trong hàm if. Cách tốt nhất để làm điều này là gì? Tôi muốn trả về "false", nhưng làm cách nào để kiểm tra điều đó khi gọi hàm? Cảm ơn!

+1

==> Trường hợp ngoại lệ. –

+1

tốt, nó không thực sự là một lỗi (nếu nó là nơi mà bạn sẽ sử dụng lỗi 'ném ngoại lệ mới (' Có một lỗi với đánh giá này. '); 'Chỉ trả về' null' hoặc 'false' và để cho ứng dụng xử lý nó – Hannes

+2

@ Hannes - Tôi đồng ý, không có lỗi ở đây, bit ngoại lệ có ích, nhưng không phải ở đây Nếu được nhấn, tôi sẽ nói rằng giá trị trả về 'null' là thích hợp nhất. – thetaiko

Trả lời

6

Có (theo ý kiến ​​của tôi) 2 cách phổ biến:

  1. Trởfalse
    Nhiều chức năng PHP BUILTIN làm điều đó

  2. Sử dụng SPL exceptions
    Evolved PHP framework (Symfony2, ZF2, ...) làm điều đó

+0

Tôi đã lấy lời khuyên của bạn và bây giờ chỉ cần trả về 'false'. Điều này dường như làm việc tốt nhất. Cảm ơn! – Jeff

0

Tôi sẽ sử dụng exceptions - Tiết kiệm khi nhầm lẫn.

0

cách tốt nhất để xử lý lỗi là ném ngoại lệ. bằng cách đó bạn có thể có tất cả các loại lỗi khác nhau và xử lý chúng cho phù hợp.

bạn có thể sau đó chỉ cần làm:

try { 
    $myvar = CustomerRating(); 
    //do something with it 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
3

Sử dụng ngoại lệ. Tránh lỗi từ chức năng và phương pháp

2

Bạn cần exceptions trở về:

public function CustomerRating() { 
    $result = $db->query("..."); 
    $row = $result->fetch_assoc(); 
    if ($row !== null) { 
      return $row['somefield']; 
    } else { 
      throw new Exception('There is an error with this rating.'); 
    } 
} 

// Somewhere on another page... 
try { 
    echo $class->CustomerRating(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

Gần như hoàn hảo, cách thích hợp để làm điều này sẽ là 'if (! $ row) throw ...' nếu không 'return' ở cuối hàm. Và bạn đang thiếu một mở '{'. – netcoder

+0

yep, copypasted rằng –

0

Hãy thử điều này:

public function CustomerRating() { 
    $result = $db->query("..."); 
    $row = $result->fetch_assoc(); 

    if($row){ 
     $output = $row['somefield']; 
    } else { 
     $output = false; 
    } 

    return $output; 
} 

//somewhere on another page... 
if($class->CustomerRating() !== false) { 
    echo $class->CustomerRating(); 
} else { 
    echo "There is an error with this rating."; 
} 

Điều này sẽ đảm bảo rằng nó sẽ không phá vỡ nếu bạn trả về số không.

Các vấn đề liên quan