2009-05-15 12 views
1

Je suis novice dans la programmation orientée objet et j'écris certaines de mes premières classes pour une application PHP.Utilisation correcte de 'construct' lors de la conception de classes

Dans certaines des classes les plus simples, je déclare un function __construct(), et à l'intérieur de cette fonction, appelez certaines méthodes de classe. Dans certains cas, je me trouve instancier la classe dans mon application, et ne pas avoir besoin de faire quoi que ce soit avec l'objet résultant parce que la classe __construct() a appelé les méthodes, qui ont fait leur travail, ne me laissant rien à faire avec la classe.

Cela ne me semble pas juste. On dirait que j'ai un nouvel objet avec lequel je ne fais jamais rien.

Encore une fois, je soulignerai que c'est seulement le cas pour certaines de mes classes plus simples. Dans les plus compliquées, j'utilise des méthodes de classe via l'objet et en dehors de __construct(). Est-ce que je dois repenser la façon dont je code les choses, ou est-ce que je suis ok?

Répondre

4

Eh bien, le constructeur est utilisé pour créer une nouvelle instance d'une classe, et pour effectuer toute configuration nécessaire sur cette classe. Si vous créez simplement la classe et la quittez, cela semble un peu un gâchis. Pourquoi ne pas, par exemple, utiliser des fonctions statiques dans la classe en tant qu'outil organisationnel et les appeler simplement (ou une fonction qui les appelle) au lieu de construire une nouvelle instance que vous n'utiliserez jamais?

+0

Merde, vous me battez, j'étais sur le point de dire exactement la même chose. xD –

+0

Ha, ça a été un problème récurrent pour moi. Je suis toujours battu aux questions auxquelles je peux répondre. : P Je viens d'avoir de la chance pour une fois! :RÉ – Annath

2

Cela ne me semble pas juste. On dirait que j'ai un nouvel objet avec lequel je ne fais jamais rien.

Oui, cela devrait déclencher un drapeau rouge.

En général, vous ne devriez pas laisser les constructeurs avoir des effets secondaires; Ils sont destinés à initialiser l'état de l'objet - pas pour autre chose. Il y a bien sûr des exceptions à cette règle, mais en général c'est une bonne ligne de conduite. Vous devriez également vous abstenir de faire des calculs lourds dans le constructeur. Déplacez cela vers une méthode à la place.

Side effects sont beaucoup de choses - Changements aux variables globales ou variables statiques (classe); sortie vers l'environnement (par exemple, appels vers print(), header() ou exit()); appels à une base de données ou un autre service externe et même des changements à l'état d'autres objets.

Une fonction sans effet secondaire est également appelée une fonction "pure" - par opposition à une procédure , qui est une fonction qui a des effets secondaires. C'est une bonne pratique de séparer explicitement les fonctions pures des procédures (et peut-être même de les étiqueter comme telles).

Questions connexes