En PHP, puis-je inclure un répertoire de scripts?
c'est-à-dire au lieu de:
include('classes/Class1.php');
include('classes/Class2.php');
y a-t-il quelque chose comme:
include('classes/*');
Impossible de trouver un bon moyen d'inclure une collection d'environ 10 sous-classes pour une classe particulière.
get_include_path()
ne peut toujours pas déterminer automatiquement l'ordre de chargement (la classe de base peut être chargée APRÈS la classe étendue, les erreurs en résultant)Voici la façon dont j'inclus beaucoup de classes de plusieurs dossiers dans PHP 5. Cela ne fonctionnera que si vous avez des classes.
la source
Je me rends compte que c'est un article plus ancien MAIS ... N'INCLUREZ PAS VOS COURS ... utilisez plutôt __autoload
Ensuite, chaque fois que vous appelez une nouvelle classe qui n'a pas encore été incluse, php lance automatiquement __autoload et l'inclut pour vous
la source
Si vous utilisez php 5, vous voudrez peut-être utiliser le chargement automatique à la place.
la source
ce n'est qu'une modification du code de Karsten
la source
Comment faire cela en 2017:
Recommandé par la documentation PHP ici: Classes de chargement automatique
la source
autoload
n'entrera en jeu que lorsque quelqu'un essaiera de créer un objet de la classe qui n'a pas encore été chargé.Vous pouvez utiliser set_include_path :
http://php.net/manual/en/function.set-include-path.php
la source
classes/
lors de l'utilisation deinclude
/require
Si vous souhaitez inclure tout dans un répertoire ET ses sous-répertoires:
N'oubliez pas qu'il utilisera l'ordre alphabétique pour inclure vos fichiers.
la source
The entries are returned in the order in which they are stored by the filesystem.
- php.net/manual/en/function.readdir.phpSi vous cherchez à inclure un tas de classes sans avoir à définir chaque classe à la fois, vous pouvez utiliser:
De cette façon, vous pouvez simplement définir la classe sur le fichier php contenant la classe et non une liste complète de
$thisclass = new thisclass();
Quant à la façon dont il gère tous les fichiers? Je ne suis pas sûr qu'il puisse y avoir une légère diminution de la vitesse avec cela.
la source
S'il n'y a PAS de dépendances entre les fichiers ... voici une fonction récursive pour inclure_once TOUS les fichiers php dans TOUS les sous-répertoires:
la source
la source
Je vous suggère d'utiliser une fonction readdir () puis de boucler et d'inclure les fichiers (voir le 1er exemple sur cette page).
la source
N'écrivez pas de fonction () pour inclure des fichiers dans un répertoire. Vous risquez de perdre les portées variables et devrez peut-être utiliser «global». Bouclez simplement les fichiers.
En outre, vous pouvez rencontrer des difficultés lorsqu'un fichier inclus a un nom de classe qui s'étendra à l'autre classe définie dans l'autre fichier - qui n'est pas encore inclus. Donc sois prudent.
la source