J'essaie de savoir comment puis-je utiliser des interfaces PHP dans ma conception MVC. Je veux m'assurer que la conception applique une interface de sorte que tout nouveau module suivrait cela.
Par exemple: P>
<?php interface BaseAPI { public function postMessage($msg); } class ServiceAPI implements BaseAPI { public function postMessage($msg) { return $msg; } } class Service_Two_API implements BaseAPI { public function postMessage($msg) { return "can't do this: ".$msg; } } ?>
5 Réponses :
dépend de ce que vous demandez. Si vous demandez si vous pouvez rendre le Code Igniter Framework, suivez vos interfaces, vous pourriez, mais cela nécessiterait une totalité de refactorisation dans leur cadre et ne vaudrait probablement pas la peine de travailler. P>
Si vous demandez si vous pouvez ajouter des interfaces pour vos classes personnalisées tout en utilisant le code allumeur, vous pouvez bien sûr. CI ne limite pas votre capacité à créer un code personnalisé, c'est ce que c'est là pour. Je suppose que la vraie réponse est "Qu'est-ce que vous demandez exactement?". P>
Comment ajouter des interfaces pour vos classes personnalisées tout en utilisant le code allumeur?
J'utilise des interfaces dans mon projet CEDERCIATED. Je viens de le faire:
Certaines classes doivent étendre un contrôleur personnel, donc j'ai créé la librairie appelée Module_Controller étend le contrôleur. Cette bibliothèque est automated. P>
Dans le même fichier, j'ai été déclaré l'interface. Donc, mes bibliothèques de fichiers / module_controller.php possèdent le code suivant: p>
class Module_Controller extends Controller{ ... } interface modular{ ... }
ce n'est pas une très bonne façon de faire des choses
En fait, ce n'est pas un mauvais moyen d'organiser des choses. Si l'interface modulaire est un comportement Module_Controller s'attend à ce que des objets qui soient transmis, il est logique. De cette façon, vous n'imposez aucune sorte de hiérarchie d'objet sur des classes qui doivent fonctionner avec module_controller.
Votre interface fonctionne bien ... il suffit de répondre au-dessus du contrôleur qui l'utilisera, puis de le déclarer une nouvelle instance de celui-ci à partir du contrôleur ...
fichier de contrôleur: em> p> Pour être honnête, vous voudrez probablement pouvoir faire une sorte d'injection de dépendance, mais que je n'utilise pas de codeigniter, je ne suis pas sûr de la facilité Pour simuler une usine pour les appels à charge à l'interface avec les classes. P> Permettez-moi de vous donner un exemple si: p> Dépendance Injection: P> P> < P> fichier usine em> p> fichier de contrôleur: em> p>
Ce n'est pas vraiment ce que OP a demandé
p>
J'aimerais juste noter, en raison d'être voté, ce n'est pas une façon standard de faire des interfaces dans PHP. Cependant, aucun contrôle dans un dossier séparé de vos modèles (standard de CI) (Standard de CI).
Ceci est correct et sous la structure de CI, c'est la solution la plus logique. Pourquoi cela a été évité, je ne saurai jamais.
Il y a un problème mineur avec ceci: Si l'interface est utilisée par quelque chose d'autre qu'un modèle (comme une aide), les modèles sont chargés après l'aide ... Donc, cela ne verra pas encore les interfaces. +1 De toute façon, cela m'a fait comprendre comment les choses fonctionnent un peu mieux.
Comment l'interface peut-elle être utilisée dans une fonction de bibliothèque (ou assistant)?
Vous pouvez créer Voici un exemple: http://heatheevens.me. Royaume-Uni / 2013/11/11 / Interfaces-in -dicaiter / P> my_loader code> classe étend
ci_loader code> dans application / noyau et chargez vos interfaces. P>
C'est la façon de le faire.