Arborescence de classes PHP et séquentialité.

  • Auteur de la discussion Auteur de la discussion ortolojf
  • Date de début Date de début
WRInaute accro
Bonjour

Je refais mon site https://www.pronostics-courses.fr en mode POO ( pour éliminer les variables globales ), j'ai déjà fait les listes de courses, il n'y a plus que les stats à faire.

Pour celà :

J'ai 5 classes PHP type père/filles arborescence classique.

Mon besoin : Faire en sorte que chaque classe dispose des variables de chaque classe adjacente, tout en s'exécutant après celle-ci.

Le bug : Si cette première classe dérive de la seconde classe, celle-ci s'exécute avant. ( parent__construct() dans le constructeur de la première classe ). Donc la deuxième classe ne voit pas les variables de l'autre classe.

Si la deuxième classe dérive de la première classe, la première classe ne dispose pas encore des variables de la deuxième classe, puisque la première classe s'exécute d'abord.

Il s'avère, que je voudrais que cette arborescence de classes soit en mode : "a un" et non pas "est un".

Comment résoudre cette problématique ?

Merci beaucoup.
 
WRInaute accro
Bon, bon...

Théoriquement :

Composition au lieu d'héritage.

Chacune des classes calcule des variables et les apporte à la classe suivante.

Donc :

Classe terminale : "extends ROOT"

classes suivantes : __construct($class_preced);

Cà risque de me faire des duplications nombreuses de variables ?

Quelle est la solution pour des relations "a un" entre classes ?

Merci.
 
WRInaute accro
Trouvé :

Composition forte.

PHP:
$pronos = new PRONOSTICS_COURSES_NOUVELLES($id);
 
$pronos2 = new PRE_MOTEUR_NOUVELLE($pronos);

$pronos3 = new MOTEUR_STATS($pronos);

$pronos4 = new MOTEUR_STATS_NEW ($pronos);

$pronos5 = new NEW_TMP_AFFIC_NEW($pronos);


Dans chaque classe, je pointe les variables de classe pseudo globales avec le pointeur $pronos.

J'ai été obligé de modulariser, car certaines classes sont communes pour différentes urls.

Honte à moi.

Super POO...

Merci beaucoup.
 
WRInaute passionné
Ben oui, si on veut qu'un objet ait accès à un autre objet, on le lui passe tout simplement, puis il le stocke dans une propriété et y accède comme n'importe quelle autre propriété.

La problématique est d'accéder aux propriétés private, a priori en PHP il y a la Reflection pour ça.
 
WRInaute accro
Bonjour rick38

Le $this sur la première classe est envoyé vers les autre classes comme paramètre.

Il y a 4 classes recevant le this.

Si le this est une variable locale pour ces constructeurs, celà semble logique que son contenu ne change pas de classe en classe ?

J'ai un bug avec une variable de classe qui ne change pas.

Pourtant d'autres variables de classe changent.

Je vais expertiser.

Merci beaucoup de ton aide.

Amicalement.
 
WRInaute accro
Bonjour rick38

Le pointeur $this de la première classe est le paramètre du constructeur de la deuxième classe.

Mais le contenu de $this n'est pas modifié car il est envoyé comme paramètre à chaque classes.

Comment faire pour partager les data de plusieurs classes ?

Merci.

PHP:
<?php

class DECLENCHEMENT {

    public $pronos        = null;
    public $pronos2        = null;
    public $pronos3        = null;
    public $pronos4        = null;
    public $pronos5        = null;

    public function __construct($id) {
        ob_start();

        $this->pronos = new PRONOSTICS_COURSES_NOUVELLES($id);

        $this->pronos2 = new PRE_MOTEUR_NOUVELLES($this->pronos);

        $this->pronos3 = new MOTEUR_STATS($this->pronos);

        $this->pronos4 = new MOTEUR_STATS_NEW($this->pronos);

        $this->pronos5 = new NEW_TMP_AFFIC_NEW($this->pronos);

        ob_end_flush();

        return $this;
    }
}

$id = "1,3";
$pronostics = new DECLENCHEMENT($id);

?>
 
WRInaute accro
Avis aux futurs visiteurs qui tomberaient sur ce post : c'est un exemple de ce qu'il ne faut surtout pas faire.
 
Discussions similaires
Haut