PHP使用来自 Composer 的自动加载器添加自定义命名空间

标签 php namespaces composer-php autoload

这是我的文件夹结构:

Classes
  - CronJobs
    - Weather
      - WeatherSite.php

我想从我的脚本中加载 WeatherSite 类。我使用带有自动加载功能的 Composer :

$loader = include(LIBRARY .'autoload.php');
$loader->add('Classes\Weather',CLASSES .'cronjobs/weather');
$weather = new Classes\Weather\WeatherSite();

我假设上面的代码是添加命名空间和命名空间解析到的路径。但是当页面加载时我总是得到这个错误:

 Fatal error: Class 'Classes\Weather\WeatherSite' not found

这是我的 WeatherSite.php 文件:

namespace Classes\Weather;

class WeatherSite {

    public function __construct()
    {

    }

    public function findWeatherSites()
    {

    }

}

我做错了什么?

最佳答案

您实际上不需要自定义自动加载器,您可以使用 PSR-4。

更新 composer.json 中的 autoload 部分:

"autoload": {
    "psr-4": {
        "Classes\\Weather\\": "Classes/CronJobs/Weather"
    }
}

解释一下:就是{"Namespace\\\": "directory to be found in"}

不要忘记运行 composer dump-autoload 来更新 Composer 缓存。

然后你可以像这样使用它:

include(LIBRARY .'autoload.php');

$weather = new Classes\Weather\WeatherSite();

关于PHP使用来自 Composer 的自动加载器添加自定义命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504980/

相关文章:

php - 使用 Laravel Eloquent 在 MySQL 列别名中添加空格

c# - 在您自己的类上使用 System.* 命名空间是否被视为不良做法?

php - composer create-project 没有安装 Laravel 5.3

php - Composer.json 位置和链接到 psr-4 命名空间

php - Jenkins 用户无法运行 composer install

javascript - 如何在 JavaScript/HTML 中检索 $_SESSION 值

javascript - Ajax 数据不会 $_POST 到 php 页面

php - MySQL:整个数据库,将[空]值转换为NULL

javascript - 如何在 JavaScript 中返回对象字面量

php - Phalcon:命名空间类声明错误