recherche
  • Se connecter
  • S'inscrire
Réinitialisation du mot de passe réussie

Suivez les projets qui vous intéressent et découvrez les dernières actualités les concernant.

Maison Bibliothèques PHP Autres bibliothèques Bibliothèque PHP pour les conteneurs d'injection de dépendances
Bibliothèque PHP pour les conteneurs d'injection de dépendances
<?php
namespace Auryn;
class CachingReflector implements Reflector
{
    const CACHE_KEY_CLASSES = 'auryn.refls.classes.';
    const CACHE_KEY_CTORS = 'auryn.refls.ctors.';
    const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.';
    const CACHE_KEY_FUNCS = 'auryn.refls.funcs.';
    const CACHE_KEY_METHODS = 'auryn.refls.methods.';
    private $reflector;
    private $cache;
    public function __construct(Reflector $reflector = null, ReflectionCache $cache = null)
    {
        $this->reflector = $reflector ?: new StandardReflector;
        $this->cache = $cache ?: new ReflectionCacheArray;
    }
    public function getClass($class)
    {
        $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class);
        if (!$reflectionClass = $this->cache->fetch($cacheKey)) {
            $reflectionClass = new \ReflectionClass($class);
            $this->cache->store($cacheKey, $reflectionClass);
        }
        return $reflectionClass;
    }

Notre idée est que lorsque l'application utilise une classe Foo, elle créera la classe Foo et appellera la méthode de la classe Foo. Si cette méthode nécessite une classe Bar, elle créera la classe Bar et appellera la méthode de la classe Bar, et cette méthode Si une classe Bim est nécessaire, la classe Bim sera créée puis d'autres travaux seront effectués. L'idée d'utiliser l'injection de dépendances est que l'application utilise la classe Foo, la classe Foo a besoin de la classe Bar et la classe Bar a besoin de la classe Bim, puis créez d'abord la classe Bim, puis créez la classe Bar et injectez Bim, puis créez la classe Foo et injectez la classe Bar, puis appelez la méthode Foo, Foo appelle la méthode Bar, puis effectuez d'autres travaux. Il s’agit du modèle d’incrackée de contrôle. Le contrôle des dépendances est inversé jusqu'au début de la chaîne d'appel. De cette façon, vous avez un contrôle total sur les dépendances et contrôlez le comportement de votre programme en ajustant les différents objets injectés. Par exemple, la classe Foo utilise Memcache et vous pouvez utiliser redis à la place sans modifier le code de la classe Foo.

L'idée après avoir utilisé un conteneur d'injection de dépendances est que si l'application a besoin d'accéder à la classe Foo, elle récupère la classe Foo du conteneur, le conteneur crée la classe Bim, puis crée la classe Bar et injecte Bim, puis crée le Foo et y injecte Bar, puis applique le programme appelle la méthode Foo, Foo appelle la méthode Bar, puis effectue d'autres travaux. En bref, le conteneur est responsable de l'instanciation, de l'injection des dépendances, du traitement des dépendances, etc.


Clause de non-responsabilité

Toutes les ressources de ce site proviennent d'internautes ou sont réimprimées par les principaux sites de téléchargement. Veuillez vérifier vous-même l'intégrité du logiciel ! Toutes les ressources de ce site sont uniquement à titre de référence d'apprentissage. Merci de ne pas les utiliser à des fins commerciales. Sinon, vous serez responsable de toutes les conséquences ! En cas d'infraction, veuillez nous contacter pour la supprimer. Coordonnées : admin@php.cn

Comment effectuer une visualisation de données avec Python et Matplotlib ? (Tracer, personnaliser et enregistrer) Comment effectuer une visualisation de données avec Python et Matplotlib ? (Tracer, personnaliser et enregistrer)

04 Feb 2026

Pour créer, personnaliser et enregistrer des tracés Python avec Matplotlib : installer et importer des bibliothèques ; générer des données et tracer ; ajouter des titres, des étiquettes, des couleurs et des styles ; ajuster la taille et la disposition des figures ; inclure la grille, la légende et les annotations ; puis enregistrer au format PNG, PDF ou autres formats haute résolution.

Comment MySQL empêche-t-il les utilisateurs d'accéder à une méthode de restriction d'autorisation spécifique à Databases_mysql Comment MySQL empêche-t-il les utilisateurs d'accéder à une méthode de restriction d'autorisation spécifique à Databases_mysql

24 Feb 2026

GRANTSELECT,INSERTONapp_db.TO'user1'@'localhost' doit être utilisé pour autoriser explicitement la bibliothèque cible à éviter ON.*; exécuter FLUSHPRIVILEGES après autorisation ; SHOWDATABASES affiche toujours les autres noms de bibliothèques mais n'est pas accessible. Pour vraiment vous cacher, vous devez désactiver les autorisations SHOWDATABASES ou activer show_database_privilege (8.0.29) ; il est recommandé d'utiliser les autorisations de gestion des rôles pour améliorer la maintenabilité.

Utilisez Markdown et JavaScript pour créer des zones de saisie de texte enrichi personnalisables et des aperçus en temps réel Utilisez Markdown et JavaScript pour créer des zones de saisie de texte enrichi personnalisables et des aperçus en temps réel

06 Dec 2025

Cet article vise à guider les lecteurs sur la façon d'utiliser la syntaxe Markdown et les bibliothèques JavaScript côté client (telles que Marked.js) pour créer une zone de saisie de texte enrichi prenant en charge les formats gras, italique et autres, et obtenir un aperçu en temps réel du contenu. Grâce à une structure HTML claire, une mise en page CSS et une logique JavaScript de base, Reader sera en mesure de fournir aux utilisateurs une expérience de publication intuitive et puissante.

Stratégie d'importation de polices de Reagraph pour afficher des caractères non latins (tels que le russe) dans les applications Vite Stratégie d'importation de polices de Reagraph pour afficher des caractères non latins (tels que le russe) dans les applications Vite

20 Jan 2026

Dans le projet Vite, lorsque vous utilisez Reagraph pour dessiner des graphiques et essayer d'afficher des caractères russes et autres caractères non latins sur les nœuds, les caractères ne peuvent souvent pas être affichés normalement en raison d'un échec de chargement du fichier de police. La solution principale consiste à déclarer les types de modules de polices tels que .ttf dans le fichier vite-env.d.ts afin que Vite puisse analyser et importer correctement ces actifs, fournissant ainsi la prise en charge des polices nécessaire pour Reagraph ou d'autres bibliothèques de rendu de texte.

Comment exposer en toute sécurité les pointeurs C sous-jacents à d'autres modules lors de la création de liaisons CGO pour une bibliothèque C dans Go Comment exposer en toute sécurité les pointeurs C sous-jacents à d'autres modules lors de la création de liaisons CGO pour une bibliothèque C dans Go

10 Jan 2026

Cet article explique comment exposer en toute sécurité et de manière modulaire les pointeurs C sous-jacents à d'autres modules Go qui doivent interagir lors de l'utilisation de cgo pour créer des liaisons Go pour les bibliothèques C. Nous analyserons les avantages et les inconvénients de l'exposition directe et de l'utilisation de méthodes unsafe.Pointer, uintptr et autres, et nous concentrerons sur une solution plus conforme aux habitudes du langage Go : en définissant des interfaces publiques et des accesseurs privés, combinés avec des assertions de type d'exécution, pour obtenir un accès contrôlé aux pointeurs C pour prendre en compte la sécurité et la flexibilité des types.

Je pensais que les bibliothèques Windows étaient inutiles jusqu'à ce que je les utilise comme ça Je pensais que les bibliothèques Windows étaient inutiles jusqu'à ce que je les utilise comme ça

28 Feb 2026

L'Explorateur de fichiers possède plusieurs fonctionnalités sous-estimées, dont beaucoup sont délibérément cachées par Windows. Les bibliothèques entrent carrément dans cette catégorie, d’autant plus que Windows 11 les désactive par défaut. À première vue, les bibliothèques peuvent

Afficher plus