Efficace PHP automatique de chargement et de stratégies de noms

Comme la plupart des développeurs web ces jours-ci, je suis à fond en profitant des avantages de la solide architecture MVC pour les applications web et des sites. Lorsque vous faites MVC en PHP, le chargement automatique de toute évidence est extrêmement pratique.

Je suis devenu un fan de spl_autoload_register plus simplement de définir un seul __autoload() fonction, comme c'est évidemment plus souple si vous êtes en intégrant différents modules de base que chaque utilisation de leur propre auto-chargement. Cependant, je n'ai jamais ressenti une grande sur les fonctions de chargement que j'écris. Elles impliquent beaucoup de cordes vérification et le répertoire de la numérisation afin de rechercher des classes à charger.

Par exemple, disons que j'ai une application qui a un chemin d'accès de base défini comme PATH_APP, et d'une structure simple, avec des répertoires nommés models, views et controllers. J'utilise souvent une structure de nommage où les fichiers sont nommés IndexView.php et IndexController.php à l'intérieur du répertoire approprié, et les modèles n'ont généralement pas d'un régime particulier, par défaut. Je pourrais avoir un chargeur de fonction de cette structure comme celle-ci qui s'inscrit avec spl_autoload_register:

public function MVCLoader($class)
{
    if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
        require_once(PATH_APP.'/models/'.$class.'.php');
        return true;
    }
    else if (strpos($class,'View') !== false) {
        if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
            require_once(PATH_APP.'/views/'.$class.'.php');
            return true;
        }
    }
    else if (strpos($class,'Controller') !== false) {
        if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
            require_once(PATH_APP.'/controllers/'.$class.'.php');
            return true;
        }
    }
    return false;
}

Si il ne l'est pas après, j'ai peut être une autre fonction pour scanner les sous-répertoires dans le répertoire des modèles. Cependant, tous les if/else-ing, chaîne de la vérification et de l'examen de répertoire semble inefficace pour moi, et je voudrais l'améliorer.

Je suis très curieux de ce que les noms de fichier et le chargement automatique des stratégies d'autres développeurs peuvent utiliser. Je suis à la recherche spécifiquement pour les bonnes techniques à employer pour l'efficacité de chargement automatique, et non pas d'options pour le chargement automatique.

InformationsquelleAutor zombat | 2009-04-27