我刚刚使用Composer创建了我的第一个PHP包,我遇到了一个问题。
目前我正在开发一个包,他的主类从另一个包中扩展了一个类,所以在我的composer.json
我已经扩展的包被声明为一个要求:
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*",
"author/BasePackage": "dev-master"
},
而且,如果我发出composer update
,我的项目中会得到一个很好的vendor
目录,并在那里下载了author/BasePackage
依赖项。
所以我的问题是,在我的主要班级文件src\Extended.php
上,我需要手动执行类似require_once __DIR__ . "/../vendor/autoload.php";
的操作,以便自动加载BasePackage
,以便我可以执行class Extended extends \BasePackage\BasePackage
。
这可以吗?我该如何加载我的包依赖项?当我将这个包提交给GitHub左右时,我忽略了vendor
目录,如果有人通过在项目require_once __DIR__ . "/../vendor/autoload.php";
上要求它而使用它将失败,因为它不会在我预期的位置是
我该怎么做?
谢谢。
答案 0 :(得分:4)
不,这不行。
您可以放心地假设使用您的软件包的任何人都在使用Composer。他将使用Composer的自动加载器。所以他能够从包中加载你自己的类,以及你的包所依赖的任何其他类,前提是你将它列为包中的依赖项。
不要手动加载其他类!你不必。
您的软件包中的测试应该包含引导中的vendor/autoload.php
- 这将允许您的类直接可用,因为其他软件包类也可以自动加载。任何示例脚本还应包括创建的自动加载器。
如果您的软件包在其他地方使用,该自动加载器将采取相同的行动:Composer管理下载的具有正确自动加载声明的所有类都可以在包含自动加载器后直接使用。