【问题标题】:Composer Package: AutoLoad and Extend Another PackageComposer 包:自动加载和扩展另一个包
【发布时间】:2015-06-01 01:47:24
【问题描述】:

我刚刚使用 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"; 将会失败,因为它不会是我期望的位置。

我应该怎么做?

谢谢。

【问题讨论】:

    标签: php dependencies composer-php


    【解决方案1】:

    不,这样不行。

    您可以放心地假设使用您的软件包的任何人都在使用 Composer。他将使用 Composer 的自动加载器。因此,他能够从包中加载您自己的类,以及您的包所依赖的任何其他类,前提是您将其列为包中的依赖项。

    不要手动加载其他类!你不必这样做。

    您的包中的测试应该在引导程序中包含vendor/autoload.php - 这将允许您的类直接可用,因为其他包类也可以自动加载。任何示例脚本还应包括创建的自动加载器。

    如果您的包在其他地方使用,该自动加载器的行为将相同:Composer 设法下载的所有具有正确自动加载声明的类在包含自动加载器后都可以直接使用。

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 2013-02-17
      • 2013-06-16
      • 2016-06-10
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多