Maison > Questions et réponses > le corps du texte
Dans ce projet PHP sans framework, j'ai cette structure de dossiers : Adaptateurs, Classes et Modèles
Le fichier php "index.php" est exécuté depuis le répertoire racine et j'ai un problème pour gérer les classes de modèle et d'adaptateur
Fichier d'index
<?php include('Class/Load.php'); $connection = MysqlClass::getConnectionMysql();
Chargement des cours
<?php include(__DIR__ . DIRECTORY_SEPARATOR . 'MysqlClass.php'); include(__DIR__ . DIRECTORY_SEPARATOR . 'UtilsClass.php'); include(__DIR__ . DIRECTORY_SEPARATOR . 'EmailClass.php');
Fichier de classe MySQL
<?php include ('UtilsClass.php'); class MysqlClass { /** * @return PDO */ public static function getConnectionMysql(): PDO { $dbhost = ReadEnvFileClass::getConfig('MYSQL_LOCAL_HOST'); $dbuser = ReadEnvFileClass::getConfig('MYSQL_LOCAL_USER'); $dbpass = ReadEnvFileClass::getConfig('MYSQL_LOCAL_PWD'); $dbname = ReadEnvFileClass::getConfig('MYSQL_LOCAL_DBNAME'); try { $dsn = "mysql:host=$dbhost;dbname=$dbname"; $dbh = new PDO($dsn, $dbuser, $dbpass); } catch (PDOException $e){ var_dump($dbhost,$dbuser,$dbpass); echo $e->getMessage(); } return $dbh; } }
Le problème réside dans le deuxième fichier MysqlClass, dois-je inclure le fichier ici dans les différentes classes dont j'ai besoin ou dois-je le faire dans le fichier index.php du fichier load.php et le charger à partir de là Toutes les classes nécessaires dans le reste du projet.
P粉2425357772024-02-26 13:40:45
C'est toujours une bonne idée d'utiliser un chargeur automatique, tel que Composer.
Tout d'abord, placez Adapter
、Class
和 Models
子目录移动到 src
目录下。完全删除 Load.php
.
La structure sera :
index.php composer.json src/Class/MysqlClass.php src/Class/UtilsClass.php src/Class/EmailClass.php src/Adapter/... src/Models/...
Créez ensuite le fichier composer.json
dans votre répertoire personnel :
{ "autoload": { "psr-4": {"Acme\": "src/"} } }
Dans tous les fichiers de classe, mettez le bon espace de noms et supprimez tous les include
和 require
appels à :
Exécutez
composer install
或只是composer dump-autoload
,并将autoload.php
文件包含在您的中index.php
dans votre répertoire personnel (supprimez toutes les autres inclusions et exigences).Vous pouvez désormais appeler ce code de n'importe où et la classe sera chargée si nécessaire :
use Acme/Class/MysqlClass // ... $connection = MysqlClass::getConnectionMysql();répondre0