J'ai travaillé sur le passage à la POO en PHP. J'ai lu des explications sur php.net, mais j'espérais pouvoir obtenir des réponses spécifiques ici.Comment structurer les classes en PHP
J'ai essayé de créer l'exemple suivant pour illustrer ma question. Dites que j'ai des classes "Base de données", "Produits" et "Utilisateurs", et que je veux afficher des produits si un utilisateur a accès. J'appelle donc la classe "Products" "showProducts()", qui à son tour crée une instance de la classe "User", qui crée une instance de l'objet "Database" et vérifie le niveau d'accès des utilisateurs.
Si l'utilisateur a accès, la fonction "showProducts()" crée une autre instance de l'objet "Database" et interroge la base de données.
class Database{
public function query(){
//runs query here
}
public function __construct() {
//sets up connection here
}
}
class User{
public function checkAccess(){
$db = new Database();
$db->query(//pass in query to check access)
//does stuff, then returns true or false
}
}
class Products{
public function showProducts(){
$user = new User();
if($user->checkAccess())
$db = new Database();
$db->query(//pass in query to get products)
}
}
J'espérais que quelqu'un pourrait illustrer comment le faire de la bonne façon. Je voudrais avoir une sorte de classe de contrôleur, qui crée un objet "Database", disponible pour toutes les classes qui ont besoin d'y accéder, sans avoir à créer plusieurs instances de l'objet "Database". Je voudrais la même chose avec la classe users, donc il y a un objet $ users auquel toutes les classes peuvent accéder, sans avoir à créer un nouvel objet chaque fois que j'ai besoin d'utiliser quelque chose dans la classe "User".
Je m'excuse si ma question n'est pas claire, et merci d'avance pour toute réponse !!
Merci à tous pour les réponses!
Merci beaucoup pour la réponse!Donc, si j'avais une autre classe référencée sur la classe d'utilisateur, je passerais aussi l'objet utilisateur $ comme paramètre? – Ben
Oui, vous pouvez! Vous pouvez passer autant de cours que vous le souhaitez. Vous pouvez passer un objet à travers le constructeur si l'objet a réellement besoin de cet objet pour fonctionner. Et vous pouvez le passer à travers la méthode setter si l'objet est optionnel. Une fois que vous avez des dépendances compliquées, alors vous pouvez penser à utiliser Conteneur d'Injection Dépendante où vous décririez les dépendances et Conteneur serait capable d'assembler l'objet des autres objets et de vous le renvoyer :) Vous pouvez en savoir plus sur Injection de Dépendance et Injection de Dépendance ici : http://fabien.potencier.org/article/12/do-you-need-a-dependency-injection-container – otporan