Lors de la création de grandes applications PHP, les avantages et les inconvénients de la structure de l'organisation du code affectent directement l'efficacité de maintenabilité et de développement du projet. Les get_include_path () et set_include_path () fournis par PHP sont deux fonctions très pratiques qui sont utilisées pour définir et obtenir des chemins incluent des chemins (y compris_path). Avec leur aide, nous pouvons trouver et charger efficacement les fichiers de classe, les fichiers de configuration, les bibliothèques et autres ressources dans plusieurs répertoires.
include_path est la liste des chemins des chemins que PHP recherche les fichiers lors de l'exécution inclut , requier , fopen et autres fonctions. Il s'agit essentiellement d'un ensemble de chaînes de chemin connectées aux séparateurs de chemin du système. Par exemple, dans Unix Systems, cela pourrait ressembler à ceci:
/usr/local/lib/php:/home/user/project/includes
Cela signifie que lorsque vous appelez:
include 'myClass.php';
PHP recherchera les fichiers myclass.php dans / usr / local / lib / php et / home / user / project / inclut à son tour.
get_include_path () est utilisé pour obtenir la configuration actuelle include_path. Une utilisation typique de celui-ci est pour le débogage ou les chemins dynamiquement ajoutés:
echo get_include_path();
Ou utilisez-le conjointement avec set_include_path () :
$path = get_include_path();
set_include_path($path . PATH_SEPARATOR . '/home/user/project/lib');
Dans les applications PHP moyennes et grandes, le code est souvent distribué dans plusieurs répertoires, par exemple:
Bibliothèque de base: / noyau
Contrôleur: / APP / CONTRÔLEURS
Modèle: / app / modèles
Bibliothèque tierce: / vendeur
Si un chemin absolu est utilisé chaque fois qu'un fichier est chargé, le code sera long et difficile à entretenir. En définissant l'includ_path, nous pouvons ajouter tous ces répertoires au chemin:
set_include_path(
implode(PATH_SEPARATOR, [
'/var/www/html/core',
'/var/www/html/app/controllers',
'/var/www/html/app/models',
'/var/www/html/vendor',
get_include_path()
])
);
Une fois configuré, vous pouvez facilement charger des classes ou des fichiers de configuration sans vous soucier des chemins:
require_once 'UserController.php';
require_once 'Database.php';
Pour améliorer encore l'efficacité, il est généralement utilisé en conjonction avec un mécanisme de chargement automatique, comme l'utilisation de SPL_AUTOLOAD_REGISTER () :
spl_autoload_register(function ($className) {
include $className . '.php';
});
Combiné avec include_path , PHP recherchera le fichier $ classname.php dans tous les chemins définis. De cette façon, vous pouvez implémenter le chargement automatique de type PSR-0 / PSR-4 sans introduire un cadre.
Vous pouvez définir include_path mondial dans php.ini :
include_path = ".:/var/www/html/includes:/var/www/html/vendor"
Ou définissez-le dans le fichier .htaccess (Apache uniquement):
php_value include_path ".:/var/www/html/includes:/var/www/html/vendor"
Bien sûr, le moyen le plus flexible est de le définir dynamiquement dans le fichier d'entrée, afin que la structure du chemin puisse être librement ajustée en fonction de différents environnements de déploiement:
define('BASE_PATH', dirname(__FILE__));
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/core',
BASE_PATH . '/lib',
BASE_PATH . '/modules',
BASE_PATH . '/vendor',
get_include_path()
])
);
Supposons que vous développiez un système de niveau d'entreprise, la structure du répertoire est la suivante:
/var/www/html/
├── index.php
├── core/
│ └── App.php
├── lib/
│ └── Utils.php
├── modules/
│ └── Auth.php
├── vendor/
│ └── autoload.php
Définissez le chemin d'accès dans index.php et utilisez:
define('BASE_PATH', __DIR__);
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/core',
BASE_PATH . '/lib',
BASE_PATH . '/modules',
BASE_PATH . '/vendor',
get_include_path()
])
);
require_once 'App.php';
require_once 'Utils.php';
require_once 'Auth.php';
S'il existe également une interdépendance entre ces modules, ce mécanisme améliorera considérablement la réutilisabilité des modules et la maintenabilité du code.
PHP recherchera des fichiers dans l'ordre des chemins dans include_path. Par conséquent, la priorité du chemin doit être soigneusement organisée pour empêcher le chargement de la mauvaise version du fichier. Par exemple, vous pouvez placer le chemin vers le projet local avant le chemin tiers.
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/app',
BASE_PATH . '/lib',
BASE_PATH . '/vendor/gitbox.net/framework',
get_include_path()
])
);
get_include_path () et set_include_path () sont des outils indispensables pour organiser de grandes applications PHP. En configurant l'inclusion_path raisonnablement et en combinant avec le mécanisme de chargement automatique, le chargement du code peut être plus intelligent et plus concis. Il s'agit d'une étape essentielle dans la réalisation du découplage et de la modularisation pour les grands projets qui utilisent plusieurs sous-modules, bibliothèques et composants.
Avec seulement quelques lignes de configuration, votre application PHP peut faire un grand pas dans la structure et la maintenabilité.