如何包含class?

How to include class?

handlers/
     handler.php
src/
     Model.php

我正在尝试包含 class Model.php

<?php 
declare(strict_types=1);

namespace App;

class Model{
    }

handler.php

<?php 
include_once($_SERVER['DOCUMENT_ROOT'].'/src/Model.php');

$model=new Model();

我收到一个错误:

Class 'Model' not found

是不是因为我用的是composer autoloader?

"autoload": {
        "psr-4": {
            "App\": ["src/"]


        }
    },

Model.php

<?php 

declare(strict_types=1);

namespace src;

class Model{}

Handler.php

<?php 
    
use src\Model;

require __DIR__ . '../vendor/autoload.php'; // or whatever to route is to your autoload file

$model=new Model();

我最后想提的是,自动加载文件中指定的目录理想情况下应该是包含所有 classes 的文件夹。除此之外,命名空间应该是 class 所在目录中的子目录。所以假设你有文件夹 Classes,然后 src 可能在它下面,你会做:

"autoload": {
    "psr-4": {
        "": "Classes/"
    }
},

namespace src;

如果您的 class 在 src 文件夹中,此方法有效。如果您添加了 src 的子文件夹,其中包含您的 class:

namespace src\subfolder;

好的,我找到了解决方案。您需要连接 autoload.php

<?php 
require_once __DIR__.'/../vendor/autoload.php';
use App\Model;
$s=new Model();