Question

Je suis bloqué sur un serveur PHP 4 et j'aimerais commencer à transférer un ancien projet hérité vers des modèles de conception modernes, y compris Dependency Injection. Existe-t-il des infrastructures d'injection de dépendance qui fonctionneront avec PHP 4?

Était-ce utile?

La solution

J'ai trouvé ceci (égouttement), mais il semble qu'il n'ait pas été mis à jour dans quelques instants. années.

Autres conseils

La plupart des infrastructures d'injection de dépendance utilisent la réflexion pour déterminer les dépendances. Puisque PHP4 n’a pas de typehints, vous ne pouvez pas vraiment faire cela. Des expériences ont été faites avec l’utilisation de fichiers de configuration - Parfois incorporées dans des commentaires dans le code (souvent appelées annotations). Bien que cela fonctionne, je le trouve un peu maladroit. À mon avis, vous feriez mieux d'utiliser la nature dynamique de PHP à votre avantage que d'essayer d'appliquer des solutions statiques. Vous pouvez obtenir un long chemin avec des usines artisanales. Voir par exemple ce message sur la manière .

Je ne pense pas qu'un framework d'injection de dépendances fonctionnera vraiment sur PHP à cause de la structure de ses programmes orientés objet. Tout d’abord, ce n’est pas comme C # ou Java où les fichiers binaires sont déjà présents et vous devez trouver un moyen d’instancier cet objet et de l’injecter dans un autre. PHP doit charger les fichiers de classe et les interpréter avant de pouvoir les utiliser. Donc, si vous avez des hiérarchies d’héritage profondes avec PHP, je ne pense pas que ce soit une bonne idée.

Etant donné que PHP est un langage de script, il est préférable de l'utiliser comme tel: un langage de script. Ce qui signifie que je voudrais simplement utiliser des méthodes simples d’usine ou de constructeur pour faire quelque chose de similaire à l’injection de dépendance. Je ne le chargerais pas avec un framework DI qui ne ferait qu'ajouter des éléments que le runtime PHP doit traiter pour chaque requête Web (à moins que vous ne mettiez en cache les opcode, mais il y aura toujours une surcharge que les plateformes Web pour Java et. NET). Si je dois modifier les objets qui seront injectés dans les objets ou la manière dont ils sont créés, ce serait une tâche simple de simplement éditer le script qui contient les méthodes fabrique / constructeur. Pas besoin de recompiler là quand même. J'ai donc une flexibilité et une architecture légère, adaptée à la manière de faire de PHP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top