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   -
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 :

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 !

1 réponse

boly38 Messages postés 267 Date d'inscription   Statut Membre Dernière intervention   80
 
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 :
  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..
0