Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 02h30   #1
Candidat au titre de Membre du Club
 
Homme Brendan Rius
Inscription : octobre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Homme Brendan Rius
Localisation : France

Informations forums :
Inscription : octobre 2010
Messages : 11
Points : 12
Points : 12
Par défaut Instantiation des classes POO.

Bonsoir tout le monde

Je suis actuellement en train de coder mon site web en full-POO.
Cependant je me suis posé une question récemment.

J'ai des classes telles que UserManager, NewsManager, FileManager. Bref, elles servent à gérer les enregistrements des classes User, News, File dans la BDD et à exécuter certaines actions dessus. Cependant, je voulais savoir : devrais-je instancier ces classes (les managers) ou appeler leurs fonctions de cette manière UserManager::func(args).
Une autre question dois-je lier les managers à chaque User (càd, je déclare un manager en passant par exemple le pseudo de l'user à __construct() et toutes les requêtes effectuées seront faites en tant que l'user) ou devrais-je passer les users en args d'une manière similaire NewsManager::add($news, $user) ?

Merci d'avance,
Brendan.
Thüzhen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 09h00   #2
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
Cependant, je voulais savoir : devrais-je instancier ces classes (les managers) ou appeler leurs fonctions de cette manière UserManager::func(args).
Des appels statiques seront légèrement plus rapide mais tu vas avoir un problème au niveau de ton objet de bdd. Qui dis méthode statique dis obligation de récupérer l'objet d'accès à la base dans chaque méthode.

Ex :

Code :
1
2
UserManager::foo($sql);
UserManager::bar($sql,$x,$y);
Au contraire si tu instancie ta classe , tu injecte une fois la dépendance à ton objet sql et tu l'utilise partout dans tes méthodes :

Code :
1
2
3
4
5
6
7
8
$um = new UserManager();
$um->setSQLObject($sql);
 
//Dans ta class
public function foo()
{
    $this->sql->query(...);
}
Citation:
Une autre question dois-je lier les managers à chaque User (càd, je déclare un manager en passant par exemple le pseudo de l'user à __construct() et toutes les requêtes effectuées seront faites en tant que l'user) ou devrais-je passer les users en args d'une manière similaire NewsManager::add($news, $user) ?
J'ai plutôt tendance à utiliser les informations que j'ai en session sur l'utilisateur. Mais là c'est plus selon ton besoin.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/12/2011, 18h38   #3
Candidat au titre de Membre du Club
 
Homme Brendan Rius
Inscription : octobre 2010
Messages : 11
Détails du profil
Informations personnelles :
Nom : Homme Brendan Rius
Localisation : France

Informations forums :
Inscription : octobre 2010
Messages : 11
Points : 12
Points : 12
Merci de ta réponse vraiment rapide.

Donc si je bind l'user aux managers, il me faut déclarer plusieurs managers. Dois-je les "unset()", ou se libèrent-ils seuls ? Sinon ça utilise beaucoup de mémoire non ? Penses-tu que la différence sera significative si je n'ai qu'un seul manager à qui je passe en argument l'user ?
Thüzhen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 08h46   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
Envoyé par Thüzhen
Merci de ta réponse vraiment rapide.

Donc si je bind l'user aux managers, il me faut déclarer plusieurs managers. Dois-je les "unset()", ou se libèrent-ils seuls ?
PHP à un garbage collector qui fait le ménage tout seul. Qui plus est à la fin d'éxecution de ton script toute (en principe) la mémoire est restituée.
Pour finir la mémoire d'un script ça s'augmente si vraiment tu as des objets très gros.
Bref le unset n'a d'intérêt que dans des cas très particulier comme des script qui boucle très longtemps et ou la gestion de la mémoire est délicate.

Citation:
Envoyé par Thüzhen
Sinon ça utilise beaucoup de mémoire non ? Penses-tu que la différence sera significative si je n'ai qu'un seul manager à qui je passe en argument l'user ?
A moins que tes objets contiennent énormément de ressource l'empreinte mémoire est faible.
Un gros manager ou 4 petit c'est de toute manière la même chose.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h04.


 
 
 
 
Partenaires

Hébergement Web