J'ai récemment réorganisé mon framework en préparation de la deuxième version du CMS de notre société. I undid une énorme quantité de choses que j'ai fait statique afin de les remplacer par des objets normaux. Ce faisant, j'ai créé une énorme quantité de flexibilité qui dépendait de moi pour passer à travers et pirater les fichiers de base. Je n'utilise maintenant que des constructions statiques lorsque la seule alternative est les fonctions globales, qui ne sont liées qu'à des fonctionnalités de base de bas niveau.
Je vais montrer quelques lignes de mon fichier bootstrap.php (toutes mes demandes sont envoyées via ce fichier, mais vous pouvez obtenir le même résultat en l'incluant en haut de chaque fichier) pour vous montrer ce que je veux dire. C'est une version assez lourde de ce que vous utiliseriez probablement dans votre situation, mais j'espère que l'idée est utile. (Tout est légèrement modifié.)
//bootstrap.php
...
// CONSTRUCT APPLICATION
{
$Database = new Databases\Mysql(
Constant::get('DATABASE_HOST'),
Constant::get('DATABASE_USER'),
Constant::get('DATABASE_PASSWORD'),
Constant::get('DATABASE_SCHEMA')
);
$Registry = new Collections\Registry;
$Loader = new Loaders\Base;
$Debugger = new Debuggers\Dummy; // Debuggers\Console to log debugging info to JavaScript console
$Application = new Applications\Base($Database, $Registry, $Loader, $Debugger);
}
...
Comme vous pouvez le voir, j'ai toutes sortes d'options pour créer mon objet d'application, que je peux fourni comme argument dans le constructeur à d'autres objets pour leur donner accès à ces nécessités « globales ».
L'objet de base de données est explicite. L'objet de registre agit comme un conteneur pour l'objet I que vous souhaitez accéder ailleurs dans l'application. Le chargeur agit comme un utilitaire pour charger d'autres ressources comme des fichiers modèles. Et le débogueur est là pour gérer la sortie de débogage.
Je peux, par exemple, changer la classe de base de données que j'instancie et, voila j'ai une connexion à une base de données SQLite. Je peux changer la classe du débogueur (comme indiqué) et maintenant toutes mes informations de débogage seront enregistrées sur ma console JavaScript.
Bon, revenons maintenant au problème. Comment donnez-vous d'autres objets à tout cela? Vous le passez simplement dans un argument au constructeur. Non seulement cela, mais mon routeur (ou n'importe quel objet que je construis avec) est plus flexible aussi. Maintenant, je peux simplement instancier mon objet d'application différemment, et mon routeur se comportera différemment en conséquence.
Salut, merci pour votre réponse, est-il possible de sauvegarder des variables dans des classes statiques. c'est-à-dire la fonction d'appel pour vérifier si l'utilisateur est connecté, puis accéder à cette variable plusieurs fois plus tard dans la page? –
Oui, pour une classe statique, faites la même chose que j'ai faite pour déclarer la variable $ class. La seule chose est que vous devez déclarer toutes les variables que vous utilisez. –
Mais, le code que je vous ai donné vous permet d'utiliser n'importe quelle classe régulière, eh bien, régulièrement. La partie statique vous donne simplement la classe, au lieu de la globaliser. Je vais modifier pour montrer un peu plus. –