我已经使用自动加载功能时如何使用作曲家的自动加载功能?

时间:2018-06-28 21:16:45

标签: php composer-php

我有一个config.php文件,我在其中将所有个人课程都使用自动加载

function __autoload($class_name) {
    include __DIR__.'/classes/'.$class_name . '.php';
}

我现在需要使用位于以下位置的作曲家提供的第三方课程 /vendor/guzzlehttp

所以我的代码现在是:

require('Config.php'); // my config file: this is used in ALL site
require 'vendor/autoload.php'; // the copmoser 
$client = new GuzzleHttp\Client([]); // call to the 3rd party class installed by composer

哪个会引发404错误:php在/ classes中搜索GuzzleHttp

  

未捕获的错误:找不到类'GuzzleHttp \ Client'

我不知道该如何解决:我需要将自己的类保留在/ classes

我需要自动加载它们,因为所有网站都使用它。

那么:如何使用composer在我的网站上安装的类?

我的composer.json内容是:

{
    "require": {
        "firebase/php-jwt": "^5.0"
    }
}

2 个答案:

答案 0 :(得分:3)

自动装带器可以堆叠在一起,但是您需要在尝试包含文件之前对其进行检查,以查看文件是否存在。

但是,如果您已经在使用Composer,只需让Composer处理自动加载即可。

添加对从composer.json的autoload PSR-4部分的classes目录中加载的全局名称空间的引用:

"autoload": {
    "psr-4": {
        "": "classes"
    }
},

答案 1 :(得分:0)

__autoload()已过时,似乎与Composer使用的当前最佳实践spl_autoload_register()不兼容。

function myAutoload($class_name) {
    include __DIR__.'/classes/'.$class_name . '.php';
}
spl_autoload_register('myAutoload');

但是您应该真正地将依赖项移到您已经拥有的依赖管理器Composer中。

对于Composer中已经存在的外部库,例如Guzzle:https://packagist.org/packages/guzzlehttp/guzzle

对于内部开发的库:https://getcomposer.org/doc/04-schema.md#autoload

编辑:第二眼没有理由@Devon的答案不起作用。