Bonjour,

j'ai lu qu'il ne faut pas injecter dans les class elle même alors j'ai quelque questions la dessus (sans phpDI)

si je montre l'exemple de ma pagination GitHub pagination

Imaginont que j'en ai besoin dans ma page home je ferais comme ça avec un contoller admettons qu'il extends de Renderer qui contien les méthode thisPDO, thisRoute etc :

class HomeController extends Renderer

    public function home()
    {
        $pagination = new Pagination(
            $this->thisPDO(),
            $this->ThisRoute(),
            'SELECT COUNT(id) FROM f_topics',
            null,
            $perpage,
            $this->app()
        );
        $this->render('home', compact('pagination'));
    }

mon Renderer qui extrait le $this->render :

    public function render(string $fichier, array $data = []) {

        // Extraction des données
        extract($data);

        // Rendu de la vue
        ob_start();
        require_once $viewPath;
        $contentForLayout = ob_get_clean();

        // Chargement du layout principal
        require_once theme.php;
    }

Mon router qui renvois la vue home a l'index ressemblerais a ça :

    /*
    * target === filename
    */

    public function home()
    {
        if($this->matchRoute()['target'] === 'home')
        {
          return (new \Controllers\HomeController)->home();
        }
    }

Et là je me pose quand même la question puisse que je n'intancie pas une class dans une autre class, mais dans mon premier exemple je dois quand même instancier ma pagination et elle a besoin des routes, de ma BDD etc. a un moment je dois bien faire un new Database() pour que ça fonctionne et donc si on instancie pas une dans une class on le fais où car le but de l'otienté objet c'est bien de passer par des class de faire des methode etc. ?

J'essaie vraiment de comprend seul pour ma culture personnel mais là j'ai pas compris.

5 réponses


Hello,

J'ai un peu regarder ton projet. Je pense qu'il y a pas mal de chose à dire sur l'ensemble.

Je suis en train de refaire le projet de mon côté pour voir ce qu'il faudrait indiquer. Lien du projet

Il y a un fichier upgrade.md qui sert de base.

Et si tu veux que l'on discutte de l'injection de dépendance on peut.

neecride
Auteur

Bonjour quenti77,

je ne me sert pas autant de github j'y compren rien, j'ai fais des update hier mais tout n'est peut être pas compatible il va manquer des fichiers notament le theme les js etc. puis des class qui on changer depuis, mon Renderer est un énorme bordel mais je veut vraiment m'en servire de carrefour donc si j'ai des truc a changer ça devrais passer par là, c'est le plus simple que j'ai compris.

Re,

En effet ton renderer qui à besoin de la terre entière ce n'est pas forcément bon.

Ça t'intéresserai d'apprendre un peu plus pour php, git et ce que tu veux ?

Si jamais je suis dispo demain aprem.

neecride
Auteur

C'est bien là tout mon problème je ne parviens pas a comprendre la logique de l'instance, toutes mes class on besoin des methode d'autre class, c'est là mon plus gros frein le reste je peut m'en sortir ma class pagination n'est pas si null, mai il faut bein intancier quelque part et en même temps rendre exportable et maintenable etc. sans que ça casse tout.

C'est pour ça aussi que on peut utiliser des interfaces pour définir un "contrat" sur ce qu'est censé faire ta classe et tu injecte la classe correspondant à l'interface.

Après c'est dur de t'aider sans voir directement avec toi. Je peux toujours te montrer comme ça et expliquer, mais il faut beaucoup de code et d'explication. (C'est pour ça que j'ai fork ton projet pour commencer les updates).

N'hésite pas aussi à m'envoyer un message sur discord de tes disponibilitées (quenti77 mon pseudo).