我有一个在 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/