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

时间:2017-04-06 14:15:37

标签: php cakephp composer-php

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

最近,我添加了phpspec/php-diffhttps://packagist.org/packages/phpspec/php-diff)并运行了composer update。它按预期将文件放在vendor/phpspec/php-diff/

我可以在我的一个CakePHP控制器中实例化这样的类:

// 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()中所做的那样)。< / p>

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

显然require_once语句不起作用,因为Inline.php不在作曲家层次结构中。

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

Class&#39; App \ Controller \ Diff_Renderer_Html_Inline&#39;找不到

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

1 个答案:

答案 0 :(得分:2)

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

new \Diff_Renderer_Html_Inline;

或者在命名空间声明后添加use Diff_Renderer_Html_Inline即可:new Diff_Renderer_Html_Inline