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 :

Architecture de classes, découpage et héritage [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Architecture de classes, découpage et héritage
    Bonjour,

    J'avais un souci dans une succession de classe Form => Validator, souci justifié par le fait que j'avais les propriétés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	private 	$cntField  = 0 ; 
    	private 	$cntFilled = 0 ;
    	private 	$stillFill = 0 ;
    Définies au niveau Form mais calculées au niveau enfant.
    J'ai résolu mon problème en n'en faisant qu'une seule classe de 324 lignes ???? , ce qui va dans le sens contraire de la philosophie OOP.

    Ces 3 propriétés sont utilisées pour le diagnostic de la Form et le message en bas de celle-ci !

    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
    	function getMsg()  // Public car function appelée du formulaire...
    	{	
    //
    //		affichage du message inférieur
    //		==============================			
    		if ($this->debug)
    			user_error("getMsg[".$this->cntFilled."][".$this->cntField."][".$this->stillFill."]" , E_USER_NOTICE) ;	
    					
    		if ($this->isFormValid() )
    		 	{	if ($this->cntFilled)
    					if ($this->stillFill)
    						$this->msg = STILL ;
    					else
    						$this->msg = OK ;
    				else
    					$this->msg = VIDE ;
    			}
    		else
    			{	if ($this->cntFilled)
    					if ($this->stillFill)
    						$this->msg = STILL ;
    					else
    						$this->msg = KO ;
    				else
    					$this->msg = VIDE ;
    			}
    		return( $this->tabMsg[$this->msg] ) ;  
    	}
    Sont calculées au niveau enfant (ex classe Validator)

    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
    			switch( $this->form[$i][self::Clas] ) 
    			{	case STRING : 	if ($this->ifFilled() )  
    									if ($this->ifLength() )
    										return ( $this->valDatatype() )  ;
    								else
    									return ( $this->mustFill() ) ; 
    								break ;
    
    //
    //  bla  bla bla 
    //
    								
    /**
    * 	ifFilled
    *
    */	
    	function ifFilled() 
    	{	if ($rc = ($this->value != NULL) == true)
    			$this->cntFilled++ ;
    		return( (bool) $rc ) ;
    	}
    	
    /**
    * 	mustFill
    *
    */	
    	function mustFill() {
    		if ($this->must) 
    			{	$this->msg = "Le champ[".$this->name."] doit être encodé !" ;
    				$this->stackMessage($this->msg) ;
    				$this->stillFill++ ;
    			}
    	    return( (bool) $this->must) ;
    	}
    Or ma(s) classe(s) doive(ent) encore subir des extensions... ce qui va en faire un monstre inmaintenable si je les conserve d'une seule pièce !

    J'en appelle à vous pour me montrer la bonne marche à suivre pour organiser les classes selon le modèle OOP de PHP5 !
    Je vous mets la source en pièce attachée !

    Merci à vous tous
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Tu peux utilisé un classe exception pour gérer tes erreurs

    par contre (dans valDatatype) faire un throw dans un try...catch c'est inutile, c'est au moment d'appeler valDatatype qui faut faire le try…catch

    Je te conseil aussi de bien mettre tes public, private sur tes fonctions

    et pour tes validator, ça existe déjà sous PHP avec filter_var

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    filter_var($email, FILTER_VALIDATE_EMAIL));
    filter_var($url, FILTER_VALIDATE_URL));
    Tu as la liste ici : http://fr.php.net/manual/fr/filter.filters.validate.php


    Ça sera plus joli et plus simple (vu qu'en plus tes regexp sont faux)

  3. #3
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Architecture de classes, découpage et héritage
    Grand merci pour tes commentaires, cela aide !
    Et de plus cela fonctionne....

    En parlant de valDatatype, c'est cette fonction que j'avais écrite comme classe enfant et avec laquelle j'avais des problèmes avec les 3 propriétés en tête de mon 1er mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            private 	$cntField  = 0 ; 
    	private 	$cntFilled = 0 ;
    	private 	$stillFill = 0 ;
    Elles sont utilisés dans le parent et calculées chez l'enfant... hors si je ne me trompe pas, le méchanisme de l'héritage va des parents vers les enfants en PHP5.... et pas l'inverse comme dans Java et d'autres langages....
    Alors la seule solution trouvée a été de faire une seule grande classe avec le tout !
    Pas très OOP...
    Si tu as une solution, je prends...
    Merci en tout cas, c déjà bcp !

  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 243
    Points
    20 243
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected	$cntField  = 0 ; 
    protected	$cntFilled = 0 ;
    protected	$stillFill = 0 ;
    Et les enfant pourrons modifier les attributs de la classe mère

  5. #5
    Débutant Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Points : 170
    Points
    170
    Par défaut Merci
    Merci Grunk,

    Je pense que j'avais essayé (je pense....) je referrais le test demain car je dois partir maintenant.


    Etienne

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

Discussions similaires

  1. Classes amies et héritage simple
    Par nicolas66 dans le forum C++
    Réponses: 1
    Dernier message: 27/02/2008, 08h27
  2. Comment hériter de deux classes ? (que signifie héritage multiple ?)
    Par adil_vpb dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/10/2007, 19h27
  3. Réponses: 17
    Dernier message: 27/08/2007, 18h35
  4. Foncteur, classes templates et héritage
    Par Floréal dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2007, 21h56
  5. [c++]Architecture des classes pour un jeu
    Par Pegasus32 dans le forum C++
    Réponses: 23
    Dernier message: 16/02/2005, 14h07

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