IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Ajouter method à stdClass()


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Ajouter method à stdClass()
    Bonjour !

    Je me tourne vers vous pour savoir si je peux ajouter une méthode à une stdClass(). La méthode prendrait effet sur la donnée appelée. En faîte je cherche un moyen élégant pour faire un check d'input saisi par un utilisateur. Par exemple :

    (les données saisie arrivent en POST)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         function input_set($data){
              $input = new stdClass();
                   foreach ($data as $key => $value){
                        $input->$key = $value;
                   }
              return $input
         }
     
         $input = input_set($_POST);
         echo $input->user;
         echo $input->password;
    Maintenant j'aimerais ajouter une fonction qui fasse des tests sur les données saisies par l'utilisateur (pas de carac spec, pas trop long, etc etc). Et que la méthode soit appelable un peu comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         echo $input->user->check_input('text');
    ('text' serait le type à contrôler (text, e-mail, number, etc)

    Je suis sûr que c'est faisable, mais je bloque sur la logique à mettre en place.

    D'avance merci !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Je me rends compte que ça va être compliqué.

    Fatalement si je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $input->user->check_input('text');
    j'essaie de faire appel à 'check_input' de la variable, donc un String.... Il faudrait surcharger la class String.... hmmm

    Évidemment je peux partir sur un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $input->password = $this->input_check('text', $input->password);
    L'élégance n’y est pas .. Mais ça marche. Je continue à chercher une solution plus sympathique.

  3. #3
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Salut,

    La méthode prendrait effet sur la donnée appelée
    Regarde ce-ci : Surcharge magique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $input->password = $this->input_check('text', $input->password);
    L'élégance n’y est pas
    Soit tu check, soit tu formate, mais le check qui retourne une donnée : A revoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    class CheckerPassword
    {
      public $errors;
     
      public function check($password){
        // check if password is conforme
        return TRUE;
      }
    }
     
    class InputPassword
    {
      public $name;
      protected $checker;// use CheckerPassword or CheckerPasswordMD5, CheckerPasswordSHA1, ...
      protected $filterer;// used to formate data
    }
     
    class Form
    {
      protected $password;// use InputPassword
     
      // construct the form model : password = new Input();
     
      public function check($data) {
        // foreach input :
        $value = $this->password->filterer->filter($data[$this->password->name]);
        return $this->password->checker->check($value);
      }
     
      public function get() {
        return array(...);// return formated datas
      }
      public function set($data) {
        $this->password->set($data[$this->password->name]);
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $form = new Form();
     
    if ($_SERVER['REQUEST_METHOD']=='POST') {
      if ($form->check($_POST)) {
        // Succesfull : $form->getDatas();
      } else {
        // Erreur de saisie : $form->getErrors();
        // $form->setDatas($_POST);
      }
    } else {
      // $form->setDatas($initial);
    }

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Pourquoi vouloir passer par un stdClass plutôt qu'une classe Input définie pour le besoin ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    @Gaulouis
    merci de ta réponse

    oui en effet, si je check j’ai pas a renvoyé une donné. Erreur de ma part.

    La suite du code est très intéressante, je vais prendre note de tout ça et mettre une place une stratégie similaire.

    @grunk
    Je voulais évité de crée une class dans ma liste de controllers qui n’aurait rien à voir avec un controller qu’on pourrait appeler via URL (l’application passe tout par ‘index’ qui fait dispatcher)

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Un éventuelle classe Input n'a pas à être avec tes controllers.
    C'est juste un objet métier qui te permet de traiter tes paramètres.

    Que tu fasse un new StdClass ou new Input le résultat est le même si ce n'est qu'une des deux classe sera facilement modifiable.

    Perso j'ai jamais utilisé de StdClass (à part sur un retour de PHP) , le seul intérêt que j'y vois c'est de remplacer un array pour un passage par référence simplifié.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme d ajout methode , diagramme de classe
    Par oussama skilatchi dans le forum UML
    Réponses: 3
    Dernier message: 28/05/2012, 05h15
  2. Ajouter un DLL comme parametre dans une method
    Par charaf dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/09/2007, 09h36
  3. une methodes pour ajouter des DLL
    Par am@123 dans le forum C#
    Réponses: 3
    Dernier message: 09/06/2007, 11h46
  4. Classe interne, methode static et ajout de boutons
    Par comme de bien entendu dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 09/03/2006, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo