2010-11-09 3 views
0

Cela peut être une question stupide, mais je vais essayer quand même.Que faire avec une méthode qui peut être utilisée dans plusieurs classes?

Ceci est pour PHP5. Disons que j'ai deux classes Member.class.php et Forum.class.php et ont un method appelé returnDate($queryDate) qui peut être utilisé dans les deux classes - pour la classe membre, il retourne les utilisateurs date de dernière consultation et pour la classe de forum, il renvoie la dernière réponse. Par exemple, Forum post: last answered **10 mins ago**.

En supposant que c'est une mauvaise idée de mettre cette méthode dans les deux classes pour éviter la duplication, je me demande si une classe d'interface serait utile? Ou est-ce que je fais quelque chose d'évident comme créer une classe pour le site pour le mettre en e.g. Website.class.php. Juste essayer de poursuivre ma compréhension, merci.

+0

C'est un peu subjectif. Je ne pense pas que ce soit mauvais de classer la méthode en deux catégories distinctes, car il est probable qu'elles effectuent un travail sensiblement différent pour collecter l'information. Si vous voulez centraliser quelque chose vous pouvez faire un String.class.php qui a des méthodes statiques pour traduire la valeur retournée dans une chaîne localisée (en la faisant dynamiquement dire "il y a 2 minutes" ou "3 hours ago" basé sur des règles centralisées) . –

+0

@dpk: La case de réponse est un peu plus bas: P –

+0

Ouais. Je n'y ai pas répondu car je ne pense pas qu'elle ait vraiment une "bonne" réponse. Je pourrais aller dans toutes les autres options, comme sous-classer à la fois d'une classe commune ou écrire une interface (comme il parle) mais c'est vraiment tout dépendant de l'environnement. (De plus, je voulais ajouter un peu plus à mon commentaire, mais Stackoverflow.com piège à tort "retour" en entrant du texte dans ces boîtes de textarea.J'ai donc abandonné et je l'ai laissé.) –

Répondre

1

Si l'on suppose que les deux fonctions sont essentiellement identiques ...

Ma suggestion: Composition> Héritage.

Créez une classe 'DateHelper' et installez-en une instanciation comme composant de chacune de ces classes. De cette façon vous avez une place pour que le code vive (DRY!) Et il est clair qu'il y a des fonctionnalités partagées entre les deux classes.

Vous pouvez également rendre la méthode statique et appeler DateHelper :: returnDate ($ x), mais j'essaie de minimiser l'utilisation de fonctions statiques où je peux.

Cette approche a l'avantage de vous permettre d'ajouter plus de fonctionnalités liées à la date et de la conserver dans un seul endroit compréhensible pour ce qui est de la date.