我正在使用Composer创建我的第一个PHP包之一,我遇到了一个问题。
目前我正在开发一个包,他的主类从另一个包扩展了一个类,所以在我的composer.json
上,我已经将我扩展的包声明为需求:
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*",
"author/BasePackage": "dev-master"
},
并且,如果我发布composer update
,我会在我的项目中获得一个很好的vendor
目录,并在那里下载author/BasePackage
依赖项。
所以我的问题是,在我的主类文件srcExtended.php
,我需要手动做一些像require_once __DIR__ . "/../vendor/autoload.php";
为了自动加载BasePackage
,所以我可以做class Extended extends BasePackageBasePackage
。
这样可以吗?我应该如何加载我的包依赖?当我将这个包提交到GitHub左右时,我忽略了vendor
目录,如果有人在他们的项目上使用它,require_once __DIR__ . "/../vendor/autoload.php";
将失败,因为它不会在我期望的地方。
我该怎么做?
谢谢。
不行。
你可以放心地假设任何正在使用你的包的人都在使用Composer。他将使用Composer的自动装弹器。所以他既可以从包中加载你自己的类,也可以从包中加载你的包所依赖的任何其他类,只要你把它列为包中的依赖项。
不要手动加载其他类!你不需要。
您的包中的测试应该包括引导中的vendor/autoload.php
-这将允许您的类直接可用,因为其他包类也可以自动加载。任何示例脚本都应该包括创建的自动加载器。
如果你的包在其他地方被使用,那么自动加载器的作用是一样的:在自动加载器被包含之后,Composer下载的所有类都可以直接使用。