php - 使用 Composer 时引用 PHP 包的子类的正确方法是什么?

标签 php cakephp composer-php

我有一个在 CakePHP 3 中运行的应用程序,并通过 Composer 安装了我的软件包。

最近我添加了 phpspec/php-diff ( https://packagist.org/packages/phpspec/php-diff ) 并运行了 composer update。正如预期的那样,它已将文件放入 vendor/phpspec/php-diff/

我可以在我的 CakePHP Controller 之一中实例化该类,如下所示:

// src/Controller/UrlsController.php
// ...

use Diff;

public function test()
{
    $diff = new Diff(foo, bar);
    // This works
}

但是,此包的文档以 https://github.com/chrisboulton/php-diff/blob/master/example/example.php#L43 为例。这是实例化Diff之后发生的(如上面的test()中所做的那样)。

require_once dirname(__FILE__).'/../lib/Diff/Renderer/Html/Inline.php';
$renderer = new Diff_Renderer_Html_Inline;
echo $diff->render($renderer);

显然,require_once 语句不起作用,因为这不是 Inline.php 在 Composers 层次结构中所在的位置。

那么如何实例化new Diff_Renderer_Html_Inline?如果我只是像这样使用它,它会错误地说

找不到类“App\Controller\Diff_Renderer_Html_Inline”

我认为的另一个解决方法可能是更改 require_once 中的路径,使其指向 vendor/ 中的位置。但肯定有更好的解决方案吗?

最佳答案

如果您尝试从另一个命名空间引用一个类,您需要使用其完全限定名称来引用它,例如

new \Diff_Renderer_Html_Inline;

或者在命名空间声明后添加一个use Diff_Renderer_Html_Inline,以便能够执行以下操作:new Diff_Renderer_Html_Inline

关于php - 使用 Composer 时引用 PHP 包的子类的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257804/

相关文章:

javascript - 防止通过 file_get_contents 执行 javascript

php - 网站的维基百科模板

javascript - 为什么选择文件时此表单不自动提交?

php - 为什么只有最后一项保存在数据库中?

php - 尝试自定义 Flash 消息时出现错误 $content_for_layout

ubuntu - 无法在 ubuntu 18.04 上安装 php-mbstring

php - 在浏览器中使用 PHP 脚本运行 composer

php - Cakephp:模型中属于多个级别

mysql - 在 CakePHP ORM 中使用计数子查询

php - Composer Satis Repository 似乎指的是源 URL 而不是 dist URL