Classe membre

Publié le 13 mai 2009 par Rkueny

Nous allons aujourd’hui commencer à aborder le développement en lui même. Nous allons construire les briques pour un jeu. Des petits bout de code qui sont là pour vous montrer comment moi je vois les choses. Les lignes ne sont pas à copier-coller !!! Elles sont là pour vous montrer dans quel esprit je développe.

Aujourd’hui nous allons aborder la classe membre. On va la créer assez minimaliste pour commencer. Voici ce qu’elle devra gérer :

  • Création d’un utilisateur avec diverses vérifications :
    • Unicité du login
    • Adresse email valide
    • Attribut désiré de bonne taille
    • Encodage du mot de passe en md5
  • Récapitulatif de toutes les infos
  • Sauvegarde des données

Cette classe sera en PHP 5, utilisera PDO en global.

Utilisation de PDO :

On inclus le fichier config/pdo.php pour que la classe fonctionne correctement. Voici comment il est composé :

/*
     Fichier de configuration de PDO
     Mise à jour : 11 mai 2009
     Auteur : SorenS
*/
 
/*
     Constantes pour la connexion
*/
define('DB_HOST','localhost'); // hôte pour la BDD
define('DB_NAME','test'); // nom de la base
define('DB_LOGIN','root'); // login d'identification à la base
define('DB_PASSWORD',''); // mot de passe de la base
 
// dsn nécessair pour PDO (mysql)
define('DSN_MYSQL','mysql:host='DB_HOST';dbname='DB_NAME);
 
// connexion à la bdd
try{
     $pdo = new PDO(DSN_MYSQL,DB_LOGIN,DB_PASSWORD);
}
catch(PDOExeception $e) {
     die("erreur!: " $e->;getMessage());
}
 
/*
     On passe $pdo en global pour pouvoir l'utiliser à traver les classes
*/
global $pdo;

Certains utilisent l’héritage pour utiliser PDO dans leur classes mais je préfère ma méthode :).

Abordons désormais la classe en elle même. Elle est commentée en doc php. C’est les commentaires qui sont ainsi :

/**
* Commentaire
* @author SorenS
*/

D’ailleurs dans un futur proche vous aurez droit à un petit billet là dessus. J’ai découvert cela il n’y a pas longtemps et c’est quand même pas mal. Vous verrez ça améliore pas mal la lisibilité et ça a d’autres atouts. Enfin, on verra ça bientôt ;=)

Voici donc la classe commentée :

/**
* Classe de gestion de membre
* - Inscription avec diverses vérifications
* - Récapitulatif du membre
* - Génération de l'âge via la date de naissance (<em>source : <a href="http://blog.jaysalvat.com/articles/snippet-php-calculer-un-age-a-partir-date-de-naissance.php">ce billet</a></em>)
* @author SorenS
*/
class Member{
 
     /**
     * Login de l'utilisateur
     * @access private
     * @type String
     */
     private $login;
 
     /**
     * Mot de passe de l'utilisateur
     * @access private
     * @type String || md5
     */
     private $password;
 
     /**
     * Adresse email de l'utilisateur
     * @access private
     * @type String
     */
     private $mail;
 
     /**
     * Date de naissance de l'utilisateur
     * @type Timestamp
     */
     private $birthDate;
 
     /*
          Méthodes classiques de la classe
          - get (prendre), set(modifier), display(afficher)
     */
          /**
          * Méthode pour prendre un attribut de la classe
          * @access public
          * @param $attribute String Nom de l'attribut visé
          * @return Mixed
          */
          public function __get($attribute){
               // on vérifie que l'attribut demandé existe
               if(isset($this-&gt;$attribute))
                    $return = $this-&gt;$attribute; // on renvoi la valeur
               else
                    $return = false; // on renvoi faux car l'attribut n'existe pas
 
               return $return;
          }
 
          /**
          * Méthode pour modifier un attribut
          * @access public
          * @param $attribute String Nom de l'attribut visé
          * @param $value Mixed Valeur désirée pour l'attribut visé
          * @return boolean
          */
          public function __set($attribute, $value){
               // on met $return a true
               $return = true;
 
               // on vérifie que l'attribut demandé existe
               if(isset($this-&gt;$attribute))
                    $this-&gt;$attribute = $value; // on remplace la valeur de l'attribut
               else
                    $return = false; // on renvoi faux car l'attribut n'existe pas          
 
               return $return;
          }
 
          /**
          * Méthode pour afficher la valeur de l'attribut désiré
          * @access public
          * @param $attribute String Nom de l'attribut visé
          * @return void
          */
          public function display($attribute){
               // on vérifie que l'attribut demandé existe
               if(isset($this-&gt;$attribute))
                    echo $this-&gt;$attribute; // on affiche la valeur de l'attribut désiré
               else
                    echo 'Error : attribute not exist'; // affichage d'une erreur
          }
 
          /*
               Vérifications
          */
 
          /**
          * Vérification de la taille d'une chaine (mot de passe ou login par exemple)
          * /!\ Pour la vérification de la longueur du mot de passe, il faut l'appeller
          * avant la fonction checkPassword /!\
          * @access public
          * @param $attribute String Nom de l'attribut visé
          * @param $length Integer Longueur désirée pour la chaine
          * @return boolean
          */
          public function checkLength($attribute, $length){
               // Si la longueur de la chaine est trop petite
               if(strlen($this-&gt;$attribute) &lt; $length)
                    $return = false; // on retourne faux
               else
                    $return = true; // sinon c'est ok
 
               return $return;
          }
 
          /**
          * Vérification de l'unicité du login
          * /!\ PDO requit /!\
          * @access public
          * @return boolean
          */
          public function checkLogin(){
               // récupération du nombre d'occurrence du login
	       $sql = "SELECT COUNT(*)
		       AS count_pseudo
		       FROM member
		       WHERE login = '$this->login'";
	       $st = $GLOBALS['pdo']-&gt;query($sql);
 
		// passage en objet
		$result = $st-&gt;fetch(PDO::FETCH_OBJ);
 
		// si le login est libre
		if($result-&gt;count_pseudo == 0){
		     $return = true;
		}
		else{ // si pseudo déjà utilisé
		     $return = false;
		}
 
		return $result;
          }
 
          /**
          * MD5 du mot de passe et suppression des espaces
          * @access public
          * @return void
          */
          public function md5password(){
               // on enlève les espaces en début et en fin de chaine
               $this-&gt;password = trim($this-&gt;password);
 
               // on md5 le mot de passe
               $this-&gt;password = md5($this-&gt;password);
          }
 
          /**
          * Vérification de la bonne forme de l'email
          * @access public
          * @return boolean
          */
          public function checkMail(){
              //regex de vérification du format de l'email
	      if(preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]_?])*@[[:alnum:]]([-.]?[[:alnum:]])+\.([a-z]{2,6})$`',$this-&gt;mail))
	           $return = true; // ok
	      else
		   $return = false; // mauvais format
 
	      return $return;
          }
 
          /**
          * Affichage de toute les infos de la classe
          * A utiliser en développement pas en production
          * Affichage brut des données
          * @access public
          * @return void
          */
          public function displayAll(){
               var_dump($this);
          }
 
          /**
          * Méthode pour sauvegarder le membre
          * A utiliser après les diverses méthodes check de préférence
          * /!\ PDO requit /!\
          * Cette méthode doit sûrement être optimisable
          * @access public
          * @return boolean
          */
          public function save(){
               // requête sql
               $sql = "INSERT INTO member
	       VALUES('','$this->;login','$this->password','$this->mail','$this->birthDate')";
	       $GLOBALS['pdo']-&gt;query($sql);
 
               try{
                    $GLOBALS['pdo']-&gt;query($sql);
                    $return = true;
               }catch (Exception $e){
                    echo 'Error PDO : '$e;
                    $return = false;
               }
 
                return $return;
           }
 
}

Attention : il se peut que des bugs subsistent dans le code. N’oubliez pas que cela n’a pas pour but de servir pour du copier-coller

Si vous ne connaissez pas l’une des fonctions php utilisées (md5, strlen,…) cliquez dessus pour accéder au manuel PHP.

Je pense qu’il n’y a pas besoin de plus commenter. Si vous avez des optimisations, des avis, des critiques à émettre, n’hésitez pas.

See you later