2012-07-13 4 views
14

que tiene una función:Las mejores prácticas para el retorno de "error" de una función

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

¿Hay una mejor manera de encontrar errores? En esta función, si no se devuelven las filas, no significa un "error" per se, simplemente significa que no se puede calcular el valor. Cuando verifico el resultado de una función, siento que hay una mejor manera de verificar los datos que se devuelven antes de mostrarlos en la función if. ¿Cuál es la mejor manera de hacer esto? Me gustaría devolver un "falso", pero ¿cómo lo verificaría cuando llame a la función? ¡Gracias!

+1

==> Excepciones. –

+1

bueno, no es realmente un error (si fuera un error usaría 'throw new Exception ('Hay un error con esta clasificación.');' Simplemente devuelva 'null' o' false' y deje que la aplicación lo maneje por consiguiente – Hannes

+2

@Hannes - Estoy de acuerdo. No hay ningún error aquí. El bit de Exception es útil, pero no aquí. Si se presiona, diría que un valor de retorno 'nulo' es el más apropiado. – thetaiko

Respuesta

6

No son (en mi opinión) 2 formas comunes:

  1. que vuelvenfalse
    Muchas funciones PHP incorporadas hacer eso

  2. Usando SPL exceptions
    marcos Evolved PHP (Symfony2, ZF2, ...) hacer eso

+0

Tomé su consejo y ahora simplemente devuelvo 'falso'. Esto parece funcionar mejor. ¡Gracias! – Jeff

0

la mejor manera de manejar los errores es lanzar una excepción. de esa manera puede tener todo tipo de errores diferentes y manejarlos en consecuencia.

puede

A continuación, sólo hacer:

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

Use excepciones. Evitar errores de funciones y métodos

2

Es necesario exceptions regresar:

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

Casi perfecto, la forma correcta de hacerlo sería 'if (! $ row) throw ...' de lo contrario 'return' al final de la función. Y te estás perdiendo una apertura '{'. – netcoder

+0

sí, copypasted que –

0

probar esto:

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

Esto se asegurará de que no se romperá si devuelves un cero

Cuestiones relacionadas