Page 1 sur 1

Valeurs de retour des fonctions

Posté : 03 sept. 2007, 14:46
par cf357
Bonjour,

je suis confronté à un choix ; qui ne me pose pas de problème en soi, mais comme ça me semble être une bonne interrogation, je vous en fait part !

Supposons que je sois en train de développer un système d'authenfiication. Je dois donc coder une fonction de ce type :
int  isValidUser(string $login, string $password)
Cette fonction doit retourner plusieurs codes d'erreurs possible :
- Authentification OK
- Le pseudo n'existe pas
- Le mot de passe est incorrect
- La vérification n'a pu avoir lieu

Mon interrogation est liée à la chose suivante :

Ce genre de fonction peut être destinée à être utilisée à différents endroits d'une application, par différents développeurs. Un développeur peu attentif pourrait faire la chose suivante :
if (isValidUser('toto', 'tata')) // au lieu de isValidUser('toto', 'tata') == 42 par  exemple
{
    // création du cookie, sessions, blabla...
}
else
{
    // message en fonction du code d'erreur
}

Seulement, du fait qu'il y ai plusieurs code possibles, si on choisis des entiers (autres que zéro), la fonction sera toujours considérée comme "vraie", ce qui pose des soucis de fonctionnement et sécurité évidents. Comment alors éviter au mieux ces situations ? A mon avis c'est ici une fausse question, étant donné que le développeur est sensé maitriser les valeur de retour, mais bon, je vous fais tout de même part de ma réflexion !

Posté : 03 sept. 2007, 14:54
par Sékiltoyai
Pour éviter les fautes de ce genre, tu peux renommer ta fonction en verifValidUser(). Le is de isValidUser sous entend que ta fonction retournera un booléen, alors qu'un verif ne sous entend rien, et oblige le développeur à s'assurer des valeurs de retour.

Posté : 03 sept. 2007, 15:02
par cf357
C'est vrai que le nom est une première manière de sous-entendre un "type" de résultat...

Personnellement j'avais utilisé LoginUser(a, b) :) .

Posté : 03 sept. 2007, 15:26
par Jules Petibidon
Hello,

Une classe est intéressante dans ton cas... imagine un script du style :
if( Auth::isValidUser( $login, $pass) === false ){
    $erreur = Auth::getError();
    // traitement en fonction de l'erreur
}
else{
    // traitement en cas de réussite
}
T'as plus qu'à faire ta classe en fonction de ça... rien de bien sorcier ?

Bon courage !

Posté : 03 sept. 2007, 15:36
par cf357
Bien vu :)
Mon système d'authentification suit une architecture MVC (voir mon topic précédent dans cette même section) et une solution comme celle là s'intégrera parfaitement en mettant les bons traitement sur chaque couche !

Posté : 04 sept. 2007, 07:42
par mojorisin
Salut,
sinon rien ne t'empeche de retourner des chiffres négatif selon les types d'erreur.

Posté : 04 sept. 2007, 09:08
par cf357
J'ai l'habitude en C de retourner '-1' en cas d'erreur, mais en PHP, ça ne change rien, if (-1) passe toujours ;)

Posté : 04 sept. 2007, 13:48
par Sékiltoyai
Pourtant, en C, généralement, les codes d'erreur sont positifs…

Posté : 04 sept. 2007, 14:58
par mere-teresa
Tu peux aussi retourner un tableau : codeErreur et Message

Posté : 04 sept. 2007, 15:58
par cf357
héhé j'avais commencé une classe d'erreurs, je devrais m'y remettre tiens (tu m'y refais penser !) ! :)

Posté : 02 nov. 2007, 13:31
par Invité
salut, je propose que ta fonction isValidUser doit retourner true or false et les autres cas tu les traite comme exception...