如何管理这个项目中的 includes、require 和 use

How to manage includes, require and use in this project

在这个没有框架的 PHP 项目中,我有这样的文件夹结构:Adapter、Class 和 Models

php 文件“index.php”是从根执行的,我在处理模型和适配器时遇到问题类

索引文件

<?php

    include('Class/Load.php');

    $connection = MysqlClass::getConnectionMysql();

Class 加载

<?php

    include(__DIR__ . DIRECTORY_SEPARATOR . 'MysqlClass.php');
    include(__DIR__ . DIRECTORY_SEPARATOR . 'UtilsClass.php');
    include(__DIR__ . DIRECTORY_SEPARATOR . 'EmailClass.php');

MysqlClass文件

<?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 文件中,如果 我应该在此处将文件包含到我需要的不同 类 中,或者我应该在 load.php 文件的 index.php 文件中执行此操作,然后从那里加载项目其余部分所需的所有 类。

使用自动加载器总是一个好主意,例如 Composer 提供的自动加载器。

首先,将AdapterClassModels子目录移动到目录src下。完全删除 Load.php

结构将是:

index.php
composer.json
src/Class/MysqlClass.php
src/Class/UtilsClass.php
src/Class/EmailClass.php
src/Adapter/...
src/Models/...

然后在主目录下创建composer.json文件:

{
    "autoload": {
        "psr-4": {"Acme\": "src/"}
    }
}

在所有 class 文件中,放入正确的命名空间并删除所有 includerequire 调用:

<?php

namespace Acme/Class

class MysqlClass {
// ...

运行 composer install 或仅 composer dump-autoload 在主目录中,并在 index.php 中包含 autoload.php 文件(删除所有其他包含和要求).

<?php

require __DIR__ . '/vendor/autoload.php';

现在您可以从任何地方调用此代码,class 将在需要时加载:

use Acme/Class/MysqlClass

// ...

$connection = MysqlClass::getConnectionMysql();