在這個沒有框架的 PHP 項(xiàng)目中,我有這樣的文件夾結(jié)構(gòu):適配器、類和模型
php 文件“index.php”從根目錄執(zhí)行,我在處理模型和適配器類時遇到問題
索引文件
<?php include('Class/Load.php'); $connection = MysqlClass::getConnectionMysql();
類加載
<?php include(__DIR__ . DIRECTORY_SEPARATOR . 'MysqlClass.php'); include(__DIR__ . DIRECTORY_SEPARATOR . 'UtilsClass.php'); include(__DIR__ . DIRECTORY_SEPARATOR . 'EmailClass.php');
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; } }
問題是在第二個 MysqlClass 文件中,我應(yīng)該在此處將文件包含到我需要的不同類中,還是應(yīng)該在 load.php 文件的 index.php 文件中執(zhí)行此操作并從那里加載我在項(xiàng)目的其余部分中需要的所有類。
使用自動加載器總是一個好主意,例如 作曲家。
首先,將 Adapter
、Class
和 Models
子目錄移動到 src
目錄下。完全刪除 Load.php
。
結(jié)構(gòu)將是:
index.php composer.json src/Class/MysqlClass.php src/Class/UtilsClass.php src/Class/EmailClass.php src/Adapter/... src/Models/...
然后在主目錄中創(chuàng)建composer.json
文件:
{ "autoload": { "psr-4": {"Acme\": "src/"} } }
在所有類文件中,放置正確的命名空間并刪除所有 include
和 require
調(diào)用:
在主目錄中運(yùn)行
composer install
或只是composer dump-autoload
,并將autoload.php
文件包含在您的中index.php
(刪除所有其他包含和要求)。現(xiàn)在您可以從任何地方調(diào)用此代碼,如果需要,該類將被加載:
use Acme/Class/MysqlClass // ... $connection = MysqlClass::getConnectionMysql();