Valeurs de retour des fonctions

Eléphant du PHP | 291 Messages

03 sept. 2007, 14:46

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 !

ViPHP
ViPHP | 5924 Messages

03 sept. 2007, 14:54

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.

Eléphant du PHP | 291 Messages

03 sept. 2007, 15:02

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) :) .

Eléphant du PHP | 259 Messages

03 sept. 2007, 15:26

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 !

Eléphant du PHP | 291 Messages

03 sept. 2007, 15:36

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 !

Eléphant du PHP | 217 Messages

04 sept. 2007, 07:42

Salut,
sinon rien ne t'empeche de retourner des chiffres négatif selon les types d'erreur.

Eléphant du PHP | 291 Messages

04 sept. 2007, 09:08

J'ai l'habitude en C de retourner '-1' en cas d'erreur, mais en PHP, ça ne change rien, if (-1) passe toujours ;)

ViPHP
ViPHP | 5924 Messages

04 sept. 2007, 13:48

Pourtant, en C, généralement, les codes d'erreur sont positifs…

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 sept. 2007, 14:58

Tu peux aussi retourner un tableau : codeErreur et Message
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 291 Messages

04 sept. 2007, 15:58

héhé j'avais commencé une classe d'erreurs, je devrais m'y remettre tiens (tu m'y refais penser !) ! :)

Invité
Invité n'ayant pas de compte PHPfrance

02 nov. 2007, 13:31

salut, je propose que ta fonction isValidUser doit retourner true or false et les autres cas tu les traite comme exception...