我有一个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"
}
}
答案 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的答案不起作用。