PHP5 - Comment organiser la porté des classes
F.A.B.
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
boly38 Messages postés 267 Date d'inscription Statut Membre Dernière intervention -
boly38 Messages postés 267 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai crée ce topic pour essayer de répondre a une question que je me pose depuis longtemps déjà.
Ma question est la suivante : comment en PHP5 doit-on organiser la porté de ces objets ?
Par exemple:
Je fais un site web et pour cela je crée deux classes php $site et $page. Elles sont toutes les deux instanciées une seule fois (car il n'y a qu'un seul site, et que il n'y a qu'une page courant a la fois d'affichée). Or comment faire pour afficher des infos d'une classe, dans une autre classe ? Pour illustrer le problème :
- $site (gestion des paramètres du site web)
---- $site->get_nom_admin() (affiche le nom de l'admin du site)
- $page (gestion de la page courante)
---- $page->load_content() (affiche le contenu de la page)
Comment faire pour afficher le nom de l'admin, dans la méthode "load_content()" ??? Pour l'instant, la solution que j'emploie est le passage de l'objet $site, en tant qu'attribut de l'objet $page. En gros je fais :
Je n'aime pas trop cette façon de faire, car comme j'ai pas mal d'objet, sa alourdi beaucoup le code...
Merci à tous ceux qui auront lu jusqu'au bout, et qui pourront m'aider !
J'ai crée ce topic pour essayer de répondre a une question que je me pose depuis longtemps déjà.
Ma question est la suivante : comment en PHP5 doit-on organiser la porté de ces objets ?
Par exemple:
Je fais un site web et pour cela je crée deux classes php $site et $page. Elles sont toutes les deux instanciées une seule fois (car il n'y a qu'un seul site, et que il n'y a qu'une page courant a la fois d'affichée). Or comment faire pour afficher des infos d'une classe, dans une autre classe ? Pour illustrer le problème :
- $site (gestion des paramètres du site web)
---- $site->get_nom_admin() (affiche le nom de l'admin du site)
- $page (gestion de la page courante)
---- $page->load_content() (affiche le contenu de la page)
Comment faire pour afficher le nom de l'admin, dans la méthode "load_content()" ??? Pour l'instant, la solution que j'emploie est le passage de l'objet $site, en tant qu'attribut de l'objet $page. En gros je fais :
class Page{ protected $obj_site; function __construct($site) { $this->obj_site = $site; } function load_content() { echo $this->obj_site->get_nom_admin(); } }
Je n'aime pas trop cette façon de faire, car comme j'ai pas mal d'objet, sa alourdi beaucoup le code...
Merci à tous ceux qui auront lu jusqu'au bout, et qui pourront m'aider !
A voir également:
- PHP5 - Comment organiser la porté des classes
- Porte monnaie vinted - Guide
- Comment organiser son téléphone - Guide
- Camille organise une discussion à distance avec ses 5 cousins qui ont des smartphones mais pas d’ordinateur. - Accueil - Guide téléphones
- Camille ✓ - Forum Cinéma / Télé
- Comment classer par ordre croissant sur excel - Guide
1 réponse
Le sujet en question correspond au patron de conception "singleton"
Des articles traitent du sujet pour PHP aussi :
http://www.manuelphp.com/php/language.oop5.patterns.singleton.php
https://fr.wikipedia.org/wiki/Singleton_%28patron_de_conception%29#PHP_5
Dans l'exemple évoqué, la méthode load_content() contiendrai :
Ici le singleton MonSite est appelé
C'est la méthode getInstance() qui ne crée l'instance MonSite que la première fois (le constructeur est dailleurs privé).
L'avantage est que la page n'a pas à conserver une instance de l'objet $site
L'inconvénient serait peut-être la gestion mémoire : un nombre important de singleton en php peut poser des soucis si de la mémoire doit être libérée... vaste sujet..
Des articles traitent du sujet pour PHP aussi :
http://www.manuelphp.com/php/language.oop5.patterns.singleton.php
https://fr.wikipedia.org/wiki/Singleton_%28patron_de_conception%29#PHP_5
Dans l'exemple évoqué, la méthode load_content() contiendrai :
MonSite::getInstance()->get_nom_admin();
Ici le singleton MonSite est appelé
C'est la méthode getInstance() qui ne crée l'instance MonSite que la première fois (le constructeur est dailleurs privé).
L'avantage est que la page n'a pas à conserver une instance de l'objet $site
L'inconvénient serait peut-être la gestion mémoire : un nombre important de singleton en php peut poser des soucis si de la mémoire doit être libérée... vaste sujet..