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 :

foreach sur un objet [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut foreach sur un objet
    Bonjour,

    Est-il possible de faire un foreach sur un objet retourné dans le constructeur ?

    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
     
    class Functions {
     
    private $func = []; 
     
    public function __construct() { 
     $this->fonctions_a_appeler(); 
    }
     
    public function fonctions_a_appeler() {
     $this-> addFunction (['isRequired', 'isAlphaM']);
    }
     
    public function addFunction (array $functions=[]) { 
     $this->func = $functions;
    }
     
    public function getField() {
     return $this->func; 
    }
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    class Valid {
     
    private $post = []; 
    private $func = []; //'isRequired', 'isAlphaM'
     
    public function __construct ($post,$ofunctions) { //
     var_dump($this->post = $post); 
     var_dump($this->func = $ofunctions); 
    }
     
    static function isRequired($value){
     if(!empty(trim($value))) {
      echo 'OK pour required : ' .$value. '<br><br>';
     } else {
      echo ' required KO <br><br>';
     return false;
     }
    }
     
    static function isAlphaM($value){
     if (!preg_match('/^[A-Z\'-_]{2,30}$/', $value)) {
      echo 'Alpha Majucule KO : ' .$value. '<br><br>' ; 
      return false;
     } else {
      echo 'OK Alpha : ' .$value. '<br><br>';
     }
    }
     
    public function getPost() {
     return $this->post; 
    }
     
    public function getFunction() {
     return $this->func; 
    }
     
    public function test(){
     foreach ($this->getPost() as $name => $value) {
      foreach ($this->getFunction() as $rules => $rule) {
       echo 'test des foreach'; 
       //call_user_func_array(array($this, $rule), array($value));
      //}  
     }
    }
     
    }
     
    $functions = new Functions(); 
    //var_dump($functions); 
     
    $valid = new Valid ($_POST, $functions); // je passe le post et l'objet Functions dans le constructeur 
    //var_dump($valid); 
    //var_dump($valid->getPost()); 
    //var_dump($valid->getFunction());
     
    $valid->test();
    j'aimerai déjà réussir à faire apparaître le 'echo : test des foreach '. Il n'y a pas de message d'erreurs mais rien ne s'affiche....
    Le écho apparaît lorsque je mets les appels des méthodes directement dans la propriété privée
    private $func = ['isRequired', 'isAlphaM'];

    Pb :
    peut-on faire passer un objet dans un constructeur d'une autre class
    comment réussir ma boucle sur mon objet
    faire appel call user func array pour appeler mes fonctions via mon objet

    merci pour vos retours






    Merci pour vos retours

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,
    Citation Envoyé par bricoreur Voir le message
    peut-on faire passer un objet dans un constructeur d'une autre class
    Bien sûr, il te suffit de typer ton paramètre
    Citation Envoyé par bricoreur Voir le message
    comment réussir ma boucle sur mon objet
    Boucler les fonctions d'un objet n'a quasiment aucune utilité et relève d'après moi d'une erreur de conception.

    Si tu cherches à exécuter des fonction dans un contexte particulier, tu as pour cela en PHP les closures

    Bonne continuation dans la recherche d'un système de validation flexible et ouvert

  3. #3
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Comme ça ça à l'air de fonctionner.
    J'ai mis $this->getFunction()->getField() à la place de $this->getFunction().


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form action="test9503b.php" method="post" name="form1">
     <input type="input" name="tosave"  id="tosave"/>
     <input type="input" name="go"      id="go" value="1"/> 
     <input type="input" name="usefile" id="usefile"/> 
      <input type="submit"/> 
    </form>

    fichier : test9503b.php
    Code php : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php
     
    class Functions {
     
     private $func = []; 
     
     public function __construct() { 
      $this->fonctions_a_appeler(); 
     }
     
     public function fonctions_a_appeler() {
      $this-> addFunction (['isRequired', 'isAlphaM']);
     }
     
     public function addFunction (array $functions=[]) { 
      $this->func = $functions; //============== je me demande s'il ne faudrait pas écrire  $this->func[] puisque $func est un tableau !
     }
     
     public function getField() {
      return $this->func; 
     }
    }
     
    class Valid {
     
     private $post = []; 
     private $func = []; //'isRequired', 'isAlphaM'
     
     public function __construct ($post,$ofunctions) { //
      $this->post = $post; 
       $this->func = $ofunctions; 
     }
     
     static function isRequired($value){
      if(!empty(trim($value))) {
       echo 'OK pour required : ' .$value. '<br><br>';
      } else {
       echo ' required KO <br><br>';
      return false;
      }
     }
     
     static function isAlphaM($value){
      if (!preg_match('/^[A-Z\'-_]{2,30}$/', $value)) {
       echo 'Alpha Majucule KO : ' .$value. '<br><br>' ; 
       return false;
      } else {
       echo 'OK Alpha : ' .$value. '<br><br>';
      }
     }
     
     public function getPost() {
      return $this->post; 
     }
     
     public function getFunction() {
      return $this->func; 
     }
     
     public function test(){
      foreach ($this->getPost() as $name => $value) {
       foreach ($this->getFunction()->getField() as $rules => $rule) { //==================== modifié
        echo 'test des foreach'; 
        //call_user_func_array(array($this, $rule), array($value));
       //}  
       }
      }
     }
    }
     
    $functions = new Functions(); 
    //var_dump($functions); 
     
    $valid = new Valid ($_POST, $functions); // je passe le post et l'objet Functions dans le constructeur 
    //var_dump($valid); 
    //var_dump($valid->getPost()); 
    //var_dump($valid->getFunction());
     
    $valid->test();
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Merci, vos codes marchent très bien..et je pensais m'en sortir à partir de vos conseils mais je n'arrive toujours pas à écrire ma méthode validate()

    code html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form action = "form_post.php" method="post">
     <p><input type="text" name="nom"></p>
     <p><input type="text" name="prenom"></p>
     <input type="submit" name="SOUMETTRE" value="VALIDATION">
    </form>
    autoload.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    spl_autoload_register('autoload');
     
    function autoload($class){
     //die($class); 
     require "$class.php";
    }
    form_post.php
    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
     
    <?php
     
    require 'Autoload.php'; 
     
    $functions = new Functions(); 
     
     echo 'Résultat de getField() : '; 
     echo '<pre>';
     print_r($functions->getField());
     echo '</pre>';
     
    $valid = new Valid ($_POST, $functions); // 
     
     
    $valid->validate(); 
     
    if (!$valid->isValid()) {
    $valid->displayErrors(); 
    } else {
    echo 'SUITE DU TRAITEMENT - ENREGISTREMENT'; 
    }
    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
     
    <?php
     
    class Functions {                     // le choix du nom n'est pas pertinent -> Rules_Form_connexion , Rules_Form_SignUp, Rules_Form_xxxxx
     private $func = []; 
     
     public function __construct() { 
      $this->fonctions_todo(); 
     }
     
     public function fonctions_todo() {
      $this-> addFunction ('nom', ['isRequired', 'isAlphaM']);
      $this-> addFunction ('prenom', ['isAlphaM']);
     // tous les tests que j'aimerai faire sur les champs d'un formulaire - à terme j'écrirai une class Abstraite et des class filles par formulaire distinct.....
     }
     
     public function addFunction ($name, array $functions=[]) { 
      $this->func[$name] = $functions;
     }
     
     public function getField() {
      return $this->func; 
     }
    }
     
    ?>
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?php
     
    class Valid {
     
     private $post = []; 
     private $func = [];    
     
     public function __construct ($post,$ofunctions) { 
      $this->post = $post;
      $this->func = $ofunctions;
     }
     
     static function isRequired($value){
      if(!empty(trim($value))) {
       echo 'OK Required: ' .$value. '<br><br>';
      } else {
       echo ' Required KO <br><br>';
       return false;
      }
     }
     
     static function isAlphaM($value){
      if (!preg_match('/^[A-Z\'-_]{2,30}$/', $value)) {
       echo 'Alpha Majucule KO : ' .$value. '<br><br>' ; 
       return false;
      } else {
       echo 'OK Alpha : ' .$value. '<br><br>';
      }
     }
     
     public function getPost() {
      return $this->post; 
     }
     
     public function getFunction() {
      return $this->func; 
     }
     
     public function isValid() {  //renvoi un booléen
      return empty($this->errors);
     }
     
     private function getErrors() { // si utilisation displayErrors => private
      return $this->errors;
     }
     
     public function displayErrors(){
      $html = '<ul>';
      foreach($this->getErrors() as $errors){
       $html .= "<li> Erreur : " .$errors."</li>";
      }
      $html .= '</ul>';
      echo $html; //return $html
     }  
     
     public function validate(){ // je n'arrive pas avec les différents tableaux à chercher les bonnes valeurs et les associer ---------------------- ????
      foreach ($this->getPost() as $name => $value) {
     
       foreach ($this->getFunction()->getField() as $rules => $rule) { 
     
        // $this->$name = $this->{rule};  QUELQUE CHOSE COMME CELA 
     
       call_user_func_array(array($this, $rule), array($value)); // J'AIMERAIS APPELER MES METHODES SUR MES CHAMPS AVEC LEUR VALEURS - si erreur retourne False sinon retourne les valeurs (ou true ?)
       }
      }
     }
     
    }
    Je reste débutant donc je ne sais pas si ma conception est bonne. Mais bon maintenant je ne peux pas faire mieux
    l'idée est la suivante

    J'ai un objet dans lequel j'attribue mes règles à mes champs. (ici Class Functions)

    Je transfert cet objet dans le constructeur de ma Class Valid qui via une méthode validate() pourrait tester si mes champs en corrélation avec mon objet sont True ou False.

    je ne sais pas si cela est possible.

    l'idée est d'avoir une class Valid qui comporte mes méthodes de test + méthode Validate. ET des class ultérieures (une par formulaire) qui accueilleront les règles associées à mes champs

    j'espère avoir été clair

    Merci pour votre aide je m'embrouille

  5. #5
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Il y a deux ou trois semaines j’ai commencé à faire ce que tu veux faire en utilisant les closures. Mais entre temps je suis passé à autre chose.
    Je regarderai ce que j’ai fait en la matière (mais il ne faut pas s’attendre à du transcendant).
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Merci
    Je vais regarder en attendant les closures pour apprendre et comprendre je l’espere

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Voici un exemple avec des closures. ATTENTION. Ce n'est pas un produit fini.

    validate.class.php
    Code php : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
    class Validate
    {
     private $fieldArrayOfControls  = array();
     private $arrayOfData           = array();
     private $ruleNumber            = 0;
     
     public function addControl($errorMessage,$arrayOfFieldNames, $control)
     {
      $this->fieldArrayOfControls[$this->ruleNumber] = [$errorMessage,$arrayOfFieldNames,$control];
      $this->ruleNumber++;
     }
     
     
     public function control($arrayOfData)
     {
      $results = array();
     
      foreach($this->fieldArrayOfControls as $ruleNumber => $data)
      {
       // init pour traitement champs manquants
       $arrMissing    = array();
       $missingFields = false;
       // préparation du message en sortie
       $message     = $data[0];
       // constitution des paramètres de la fonction de closure
       $arrayToMap   = array();
       $fieldNames   = $data[1];
       foreach($fieldNames as $key => $fieldName)
       {
        if (! isset($arrayOfData[$fieldName]))
        {
         // champ manquant
         $missingFields = true; 
         $arrMissing[]  = $fieldName;
        }
        else 
        {
         $fieldValue   = $arrayOfData[$fieldName];
         $arrayToMap[] = $fieldValue;
         // message en sortie
         $message      = str_replace("#$fieldName",$fieldValue,$message);     
        }
       }
       if (!$missingFields)
       {
        // Pas de champ manquant => exécution de la closure
        $function           = $data[2];
        $results[$message]  = array_map($function, [$arrayToMap])[0];     
       }
       else
       {
        foreach($arrMissing as $missingField)
        {
         $results["*** Missing field '$missingField'"] = false;
        }
       }
     
      }
      return $results;
     }
    }

    Code php : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    <?php
    include("validate.class.php");
    //==============================================================================
    //-------------- closures - les fonctions renvoient true ou false
    //==============================================================================
    // controle qu'un champ est rempli
    $remplissage = function($array) {
     $valeur = $array[0];
        return (!empty($valeur)) ? true : false;
    };
    // exemple de contrôle combiné => controle les valeur des 2 champs options
    $controleOption = function($array)
    {
     list($option1,$option2) = $array;
     if ($option1==$option2)
     {
      return false;
     }
     return true;
    };
    // contrôle qu'une valeur est numérique
    $numerique = function($array)
    {
     $valeur = $array[0];
     return (is_numeric($valeur)) ? true : false;
    };
    //==============================================================================
     
    $toto = new Validate();
    $toto->addControl('Le nom n\'est pas renseigné',["nom"], $remplissage);
    $toto->addControl('Le prénom n\'est pas renseigné',["prenom"], $remplissage);
    $toto->addControl("L'âge n'est pas renseigné",["age"], $remplissage);
    $toto->addControl("L'âge n'est pas numérique => #age",["age"], $numerique);
    $toto->addControl("Les deux options ne peuvent avoir la même valeur => option 1 = #option1 et option 2 = #option2",["option1","option2"], $controleOption);
    //+++++++++++++++++++++++++++++++++++++++++++++
    //-------------- j'ai mis ce nom au tableau mais on peut fort bien passer $_POST s'il est renseigné. 
    //               On peut mettre n'importe quel tableau du moment que ses postes sont "nommés"
    // problème sur les options
    $valeurAController = ['nom'=>'Dupont','prenom'=>'Pierre','age'=>25,'option1'=>'oui','option2'=>'oui'];
    $result = $toto->control($valeurAController);
    // on parcourt les résultats qui ont retourné faux pour afficher le message d'erreur.
    foreach($result as $message => $result)
    {
     if (! $result)
     {
      print "$message<br/>";
     }
    }
    //+++++++++++++++++++++++++++++++++++++++++++++
    print "<hr/>";
    // problème sur le nom l'âge et les options
    $valeurAController = ['nom'=>'','prenom'=>'Pierre','age'=>'AZ','option1'=>'oui','option2'=>'oui'];
    $result = $toto->control($valeurAController);
    foreach($result as $message => $result)
    {
     if (! $result)
     {
      print "$message<br/>";
     }
    }
    //+++++++++++++++++++++++++++++++++++++++++++++
    print "<hr/>";
    // problème sur le nom l'âge qui manque et les options
    $valeurAController = ['nom'=>'','prenom'=>'Pierre','option1'=>'oui','option2'=>'oui'];
    $result = $toto->control($valeurAController);
    foreach($result as $message => $result)
    {
     if (! $result)
     {
      print "$message<br/>";
     }
    }

    Donne :

    Nom : Capture20181028001.JPG
Affichages : 581
Taille : 39,2 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Merci je vais regarder votre proposition

    De mon côté j'ai essayé cela je vous le soumets.

    J'ai un dernier pb à règler :

    soit je fais le foreach sur $_POST mais du coup j'ai mes contrôles qui se répètent (mais ils fonctionnent)

    ou

    soit je ne fais pas de foreach sur $_POST mais comment faire passer mes valeurs des champs $_Post ?

    Je pense ne plus être très loin. je vous laisse uniquement le fichier Class Valid - pour le reste rien n'a changé

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <?php
     
    class Valid {
     
     private $post = []; 
     private $func = [];    
     
     public function __construct ($post,$ofunctions) { 
      $this->post = $post;
      $this->func = $ofunctions;
     }
     
     static function isRequired($value){
      if(!empty(trim($value))) {
       echo 'OK Required: ' .$value. '<br><br>';
      } else {
       echo ' Required KO <br><br>';
       return false;
      }
     }
     
     static function isAlphaM($value){
      if (!preg_match('/^[A-Z\'-_]{2,30}$/', $value)) {
       echo 'Alpha Majucule KO : ' .$value. '<br><br>' ; 
       return false;
      } else {
       echo 'OK Alpha : ' .$value. '<br><br>';
      }
     }
     
     public function getPost() {
      return $this->post; 
     }
     
     public function getFunction() {
      return $this->func; 
     }
     
     public function isValid() {  //renvoi un booléen
      return empty($this->errors);
     }
     
     private function getErrors() { // si utilisation displayErrors => private
      return $this->errors;
     }
     
     public function displayErrors(){
      $html = '<ul>';
      foreach($this->getErrors() as $errors){
       $html .= "<li> Erreur : " .$errors."</li>";
      }
      $html .= '</ul>';
      echo $html; //return $html
     }  
     
     public function test(){
     
      foreach ($this->getPost() as $name => $value) {            // $name = key (nom des champs) && $value = valeur des champs 
     
       foreach ($this->getFunction()->getField() as $nameC  => $rules) {      // $nameC est bien un Array puisqu'ils a plusieurs champs possibles
     
        if(isset($name, $nameC)) {                           // array_key_exists => pourquoi cela ne marche pas puisque $nameC est un array 
     
         $name = $nameC;  
     
         echo " _name [array] &nbsp;&nbsp : &nbsp;&nbsp" .$name. "<br>";
     
         foreach($rules as $rule) {
     
          $name = $rule; 
     
          echo " &nbsp;&nbsp;&nbsp;&nbsp - Rules [array] &nbsp;&nbsp   as &nbsp;&nbsp _rule &nbsp;&nbsp : &nbsp;&nbsp" .$rule. "<br>";
     
          call_user_func_array(array($this, $rule), array($value));  // répète plusieurs fois les tests à cause du foreach $_POST - comment faire passer les valeurs $value du $_POST ??
          }
        }
       }
      }
     }
     
    }
    comment boucler sur $_POST sans réitérer mes méthodes ?

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    j'ai tenté de créer une méthode getValuePOST() pour récupérer toutes mes valeurs afin de les réattribuer dans mes boucles mais elle ne fonctionne pas ...j'y suis presque je crois

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <?php
     
    class Valid {
     
    private $post = []; 
    private $func = [];
    private $errors = [];  
     
    public function __construct ($post,$oform_tocheck) { 
     $this->post = $post;
     $this->func = $oform_tocheck;
    }
     
    private function isRequired($value){
     if(!empty(trim($value))) {
       return true; 
     } else {
      $this->errors[$value] = 'La saisie du champ est obligatoire.';
     return false;
     }
    }
     
    private function isAlphaM($value){
     if(!empty($value)) {
      if (!preg_match('/^[A-Z\'-_]{2,30}$/', $value)) {
       $this->errors[$value] = 'La saisie du champ  : &nbsp;&nbsp;&nbsp' .$value. ' &nbsp;&nbsp doit être Apha Majuscule.';
       return false;
      } else {
      return true; 
      }
      return true; 
     }  
    }
     
    public function getPost() {
     return $this->post; 
    }
     
    public function getFunction() {
     return $this->func; 
    }
     
    public function isValid() {  //renvoi un booléen False si getErrors rencontre au moins une erreur ou True si pas d'Erreur
     return empty($this->errors);
    }
     
    private function getErrors() { 
     return $this->errors;
    }
     
    public function displayErrors(){
     $html = '<ul>';
     foreach($this->getErrors() as $errors){
     $html .= "<li> Erreur : " .$errors."</li>";
     }
     $html .= '</ul>';
     echo $html; //return $html
    }  
     
    public function getValuePOST() {
     foreach ($this->getPost() as $name => $value) { // ne boucle pas -- cela récupère uniquement la première valeur
     return $value;
     }
    }
     
     
    public function validate(){
     
     foreach ($this->getPost() as $name => $value) {  
      var_dump(($name). '<br>'); // JE RECUPERE BIEN LES DIFFERENTES VALEURS DU POST
      //return $value;  
     } 
     
     //var_dump($this->getValuePOST()); // LA BOUCLE NE MARCHE PAS 
     
     foreach ($this->getFunction()->getField() as $nameC  => $rules) {   
     
      echo " _name [array] &nbsp;&nbsp;&nbsp : &nbsp;&nbsp;&nbsp" .$nameC. " &nbsp;&nbsp;&nbsp - &nbsp;&nbsp;&nbsp et sa valeur : &nbsp;&nbsp;&nbsp " .$this->getValuePOST(). "<br>";
     
       foreach($rules as $rule) {
     
        echo " &nbsp;&nbsp;&nbsp;&nbsp - Rules [array] &nbsp;&nbsp;&nbsp   as &nbsp;&nbsp;&nbsp _rule &nbsp;&nbsp;&nbsp : &nbsp;&nbsp;&nbsp" .$rule.  "<br>";
     
        call_user_func_array(array($this, $rule), array($this->getValuePOST())); // COMMENT BLOUCLER SUR LES VALEURS
       }
      }
     }
    }
    j'ai modifié test() -> validate() entre autre pour mieux m'y retrouver.

  10. #10
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Je pense que conceptuellement parlant tu ne peux pas mettre tous les types de contrôles dans une classe car il en manquera toujours un.
    De plus tu ne gère pas les contrôles combinés qui mettent en œuvre plusieurs champs.


    EDIT.

    Une chose. On ne contrôle pas qu'une entrée est en majuscules. Il est plus simple de toujours mettre la donnée en majuscules.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $toto = strtoupper($toto);
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salutations,

    Il faut penser à préserver la possibilité d'ajouter des tests de validation. Il t'en manquera toujours, crois-moi... L'idée d'utiliser des closures te permet de résoudre assez élégamment ce problème.
    Tu définis un socle de tests par défaut et tu offres la possibilité d'en créer si nécessaire.

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Oh Salutations,

    justement c'est le but recherché

    j'aurai une Class Valid qui stockera tous mes tests (évolutifs) dont j'aurai besoin + méthode validate() qui lancera les tests

    j'ai une class Rules_Abstract (mère) qui impose une construction et méthodes de class

    et j'aurai des class Rules_Form_A (fille) + class Rules_Form_B (fille)....qui comporteront chacun les champs et les tests à réaliser sur ces derniers. Ces objets seront envoyés dans le constructeur de la Class Valid comme paramètres.

    il ne me reste plus finaliser la méthode validate()....


    Au passage comment fait-on pour renvoyer tous les champs d'un $_POST via une fonction, je m'explique :

    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
     
     
    class Valid {
     
     private $post = []; 
     private $func = [];
     private $errors = [];  
     
     
    public function __construct ($post) { //,$oform_tocheck
     $this->post = $post;
     //$this->func = $oform_tocheck;
    }
     
    public function getPost() {
     return $this->post; 
    }
     
    public function getValuePOST() {
     foreach ($this->getPost() as $name => $value) { 
      return $value;  // comment faire marcher ma boucle -> je ne récupère que la première valeur du $_POST
     }
    }
     
    public function validate(){
     
     foreach ($this->getPost() as $name => $value) {  
      print_r($name. "---" .$value. '<br>') ; // OK J'AFFICHE BIEN TOUTES LES NOMS ET VALEURS DES CHAMPS DU $_POST
     } 
     
     echo '<br><br>'; 
      print_r($this->getValuePOST()); // LA BOUCLE NE MARCHE PAS - JE N'AI QUE LA PREMIERE VALEUR 
     
     
    //...............

  13. #13
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Tu te concentre sur $_POST alors qu’il y a aussi $_GET, etc... sans parler des tableaux qui traiteraient des données sans passer par par de la saisie.
    Bref tu devrais être plus générique dans le nommage de tes méthodes.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    merci pour tous vos retours mais cela fait beaucoup d'informations à traiter...j'essaye de les prendre une à une mais pas facile...

    si vous avez des exemples ...de mon côté je m'acharne pour essayer de progresser

    il est vrai que jusqu'à présent j'utilisais $_POST...je vais voir du côté GET et Tableau et des closures...je continue à étudier vos codes mais pas facile même si j'ai compris des choses

    Si vous aviez une proposition pour ma méthode Validate() ...je vous serai plus que reconnaissant et preneur

    c'est reparti pour toute la nuit encore

    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
     
     
    public function getPost() {
     return $this->post; 
    }
     
    public function getValuePOST() {
     foreach ($this->getPost() as $name => $value) {
      return $value; 
     }
    }
     
    public function validate(){
     
     foreach ($this->getPost() as $name => $value) {  
      print_r($name. "---" .$value. '<br>') ; // ok j'affiche bien toutes mes données du $_POST
     } 
     
     echo '<br><br>'; 
      print_r($this->getValuePOST()); //ne retourne que la 1ere valeur 
     echo '<br><br>'; 
     
     
     foreach ($this->getFunction()->getField() as $nameC  => $rules) {   
     
      echo " _name [array] &nbsp;&nbsp;&nbsp : &nbsp;&nbsp;&nbsp" .$nameC. " &nbsp;&nbsp;&nbsp - &nbsp;&nbsp;&nbsp et sa valeur : &nbsp;&nbsp;&nbsp " .$this->getValuePOST(). "<br>";  // insère que la première valeur de $POST
     
       foreach($rules as $rule) {
     
        echo "&nbsp;&nbsp;&nbsp;&nbsp - Rules [array] &nbsp;&nbsp;&nbsp   as &nbsp;&nbsp;&nbsp _rule &nbsp;&nbsp;&nbsp : &nbsp;&nbsp;&nbsp" .$rule.  "<br>";
     
        call_user_func_array(array($this, $rule), array($this->getValuePOST()));  // insère que la première valeur de $POST
       }
     }
    }

  15. #15
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    As-tu essayé le code que j’ai posté ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  16. #16
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    oui votre code marche très bien ....

    mais je ne comprends pas tout ...j'ai réussi à rajouter une closure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $toto = new Validate();
    $toto->addControl('Le nom n\'est pas renseigné',["nom"], $remplissage);
    $toto->addControl('Le nom n\'est pas AlphaM',["nom"], $alphaM); // nouvelle closure qui fonctionne bien 
     
    $toto->addControl('Le prénom n\'est pas renseigné',["prenom"], $remplissage);
     
    $toto->addControl("L'âge n'est pas renseigné",["age"], $remplissage);
    $toto->addControl("L'âge n'est pas numérique => #age",["age"], $numerique);
    $toto->addControl("Les deux options ne peuvent avoir la même valeur => option 1 = #option1 et option 2 = #option2",["option1","option2"], $controleOption);
    Cependant, je n'ai pas encore tester avec un $_POST car mon formulaire comprendra beaucoup beaucoup de champs car il comportera des tableaux à renseigner

    Ensuite, j'aimais bien mon idée d'avoir un addField dans lequel je pouvais renseigner un champ et tous les contrôles à réaliser sur ce dernier en 1 seule ligne

    Enfin, j'aimerai pour progresser réussir à finaliser ma méthode validate();

    si vous pouviez y jeter un coup d'oeil, j'espère être tout prêt ....

    Je garde sous le coude votre proposition pour l'étudier et me l'approprier ... pas facile lorsqu'on ne maîtrise pas tous les concepts et avec peu de ressources

  17. #17
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Ce qui est bien avec la POO c'est que c'est facilement améliorable.

    Méthode à ajouter à la classe
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     public function addField($errorMessages,$arrayOfFieldNames, $controls)
     {
      foreach($errorMessages as $key => $errorMessage)
      {
       $this->addControl($errorMessage,$arrayOfFieldNames, $controls[$key]);
      }
     }

    Code php : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?php
    include("validate.class.php");
    //==============================================================================
    //-------------- closures - les fonctions renvoient true ou false
    //==============================================================================
    // controle qu'un champ est rempli
    $remplissage = function($array) {
     $valeur = $array[0];
        return (!empty($valeur)) ? true : false;
    };
    // exemple de contrôle combiné => controle les valeur des 2 champs options
    $controleOption = function($array)
    {
     list($option1,$option2) = $array;
     if ($option1==$option2)
     {
      return false;
     }
     return true;
    };
    // contrôle qu'une valeur est numérique
    $numerique = function($array)
    {
     $valeur = $array[0];
     return (is_numeric($valeur)) ? true : false;
    };
    //==============================================================================
     
    $toto = new Validate();
    $toto->addControl('Le nom n\'est pas renseigné',["nom"], $remplissage);
    $toto->addControl('Le prénom n\'est pas renseigné',["prenom"], $remplissage);
    //$toto->addControl("L'âge n'est pas renseigné",["age"], $remplissage);
    //$toto->addControl("L'âge n'est pas numérique => #age",["age"], $numerique);
    $toto->addField(["L'âge n'est pas renseigné","L'âge n'est pas numérique => #age"],["age"], [$remplissage, $numerique]);
    $toto->addControl("Les deux options ne peuvent avoir la même valeur => option 1 = #option1 et option 2 = #option2",["option1","option2"], $controleOption);
    //+++++++++++++++++++++++++++++++++++++++++++++
    //-------------- j'ai mis ce nom au tableau mais on peut fort bien passer $_POST s'il est renseigné. 
    //               On peut mettre n'importe quel tableau du moment que ses postes sont "nommés"
    // problème sur les options
    $valeurAController = ['nom'=>'Dupont','prenom'=>'Pierre','age'=>25,'option1'=>'oui','option2'=>'oui'];
    $result = $toto->control($valeurAController);
    // on parcourt les résultats qui ont retourné faux pour afficher le message d'erreur.
    foreach($result as $message => $result)
    {
     if (! $result)
     {
      print "$message<br/>";
     }
    }
    //+++++++++++++++++++++++++++++++++++++++++++++
    print "<hr/>";
    // problème sur le nom l'âge et les options
    $valeurAController = ['nom'=>'','prenom'=>'Pierre','age'=>'AZ','option1'=>'oui','option2'=>'oui'];
    $result = $toto->control($valeurAController);
    foreach($result as $message => $result)
    {
     if (! $result)
     {
      print "$message<br/>";
     }
    }
    //+++++++++++++++++++++++++++++++++++++++++++++
    print "<hr/>";
    // problème sur le nom l'âge qui manque et les options
    $valeurAController = ['nom'=>'','prenom'=>'Pierre','option1'=>'oui','option2'=>'oui'];
    $result = $toto->control($valeurAController);
    foreach($result as $message => $result)
    {
     if (! $result)
     {
      print "$message<br/>";
     }
    }
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  18. #18
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Le foreach n'est exécuté qu'une fois puisqu'il y a un return qui fait sortir de la méthode.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function getValuePOST() {
     foreach ($this->getPost() as $name => $value) {
      return $value; 
     }
    }
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Points : 121
    Points
    121
    Par défaut
    Merci pour avoir pris le temps de regarder mes codes..en effet, j'ai enlevé les return mais je n'arrive pas à faire passer mes values les unes après les autres...pfff


    je vais me plonger sur votre proposition mais je reste frustré de ne pas avoir trouvé

  20. #20
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Dans ton cas, une fonction de contrôle n’a qu’un seul paramètre. Il faut que tu ailles prendre la valeur dans $_POST qui correspond à ta règle.

    Cependant, tout cela est vain car ne suffit pas d’afficher des messages d’erreurs. Tu ne renvoies pas de true ou de false qui permettrait de stopper l’exécution du script après le validate.

    En plus je pense qu’il ne faut pas afficher les messages d’erreurs dans la classe. En effet, le contrôle est une chose et l’affichage de l’erreur en est une autre. Si quelqu’un d’autre que toi utilise ta classe il n’a pas forcément envie de voir l’affichage comme tu l’as pensé car il a une présentation différente ou a une autre langue que la tienne. Idem pour toi so tu fais évoluer ton affichage.

    En POO une classe ne doit faire que ce qu’elle est censée faire et rien d’autre.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. foreach à l'envers sur un objet
    Par dedis dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2011, 21h00
  2. [JSTL] Faire un forEach sur un objet pour construire un select
    Par weed dans le forum Taglibs
    Réponses: 7
    Dernier message: 19/10/2008, 17h09
  3. pointeur multiple sur un objet
    Par Arnaud-h dans le forum C++Builder
    Réponses: 9
    Dernier message: 02/06/2004, 11h33
  4. [debutant] Contraintes d'intégrité définies sur un objet
    Par maysa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/05/2004, 14h57
  5. Requêtes : recherche de maxi sur plusieur Objet
    Par pertuis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/03/2004, 15h28

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