Composer 包:自动加载和扩展另一个包
Composer Package: AutoLoad and Extend Another Package
我刚刚使用 Composer 创建我的第一个 PHP 包,我遇到了问题。
目前我正在开发一个包,他的主要 class 从另一个包扩展了一个 class,所以在我的 composer.json
上我声明了我正在扩展的包作为要求:
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*",
"author/BasePackage": "dev-master"
},
而且,如果我发出 composer update
,我会在我的项目中得到一个很好的 vendor
目录,其中下载了 author/BasePackage
依赖项。
所以我的问题是,在我的主 class 文件 src\Extended.php
上,我需要手动执行 require_once __DIR__ . "/../vendor/autoload.php";
之类的操作才能自动加载 BasePackage
这样我就可以做class Extended extends \BasePackage\BasePackage
.
这样可以吗?我应该如何加载我的包依赖项?当我将这个包提交到 GitHub 左右时,我忽略了 vendor
目录,如果有人通过在他们的项目中要求它来使用它 require_once __DIR__ . "/../vendor/autoload.php";
将会失败,因为它不会在哪里我希望它是。
我应该怎么做?
谢谢。
不,这不行。
您可以放心地假设任何使用您的软件包的人都在使用 Composer。他将使用 Composer 的自动加载器。因此他能够从包中加载您自己的 class 以及您的包所依赖的任何其他 class,前提是您将其列为包中的依赖项。
不要手动加载其他 classes!你不必。
你的包中的测试应该在引导程序中包含 vendor/autoload.php
- 这将允许你的 class 直接可用,因为其他包 classes 可以自动加载为出色地。任何示例脚本还应包括创建的自动加载器。
如果您的包在其他地方使用,该自动加载器将执行相同操作:所有 classComposer 设法下载的具有正确自动加载声明的文件在包含自动加载器后可直接使用。
我刚刚使用 Composer 创建我的第一个 PHP 包,我遇到了问题。
目前我正在开发一个包,他的主要 class 从另一个包扩展了一个 class,所以在我的 composer.json
上我声明了我正在扩展的包作为要求:
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*",
"author/BasePackage": "dev-master"
},
而且,如果我发出 composer update
,我会在我的项目中得到一个很好的 vendor
目录,其中下载了 author/BasePackage
依赖项。
所以我的问题是,在我的主 class 文件 src\Extended.php
上,我需要手动执行 require_once __DIR__ . "/../vendor/autoload.php";
之类的操作才能自动加载 BasePackage
这样我就可以做class Extended extends \BasePackage\BasePackage
.
这样可以吗?我应该如何加载我的包依赖项?当我将这个包提交到 GitHub 左右时,我忽略了 vendor
目录,如果有人通过在他们的项目中要求它来使用它 require_once __DIR__ . "/../vendor/autoload.php";
将会失败,因为它不会在哪里我希望它是。
我应该怎么做?
谢谢。
不,这不行。
您可以放心地假设任何使用您的软件包的人都在使用 Composer。他将使用 Composer 的自动加载器。因此他能够从包中加载您自己的 class 以及您的包所依赖的任何其他 class,前提是您将其列为包中的依赖项。
不要手动加载其他 classes!你不必。
你的包中的测试应该在引导程序中包含 vendor/autoload.php
- 这将允许你的 class 直接可用,因为其他包 classes 可以自动加载为出色地。任何示例脚本还应包括创建的自动加载器。
如果您的包在其他地方使用,该自动加载器将执行相同操作:所有 classComposer 设法下载的具有正确自动加载声明的文件在包含自动加载器后可直接使用。