2017-04-06 56 views
2

我有一个在CakePHP 3中运行的应用程序,并通过Composer安装了我的软件包。使用Composer时,引用PHP包的子类的正确方法是什么?

最近我添加了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()所做的那样)。

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?如果我只是用它这个样子的错误说法

级“应用程序\控制器\ Diff_Renderer_Html_Inline”未找到

我想可能是改变require_once路径另一个解决办法,使其指向它在vendor/位置。但肯定有更好的解决方案?

+0

这是PSR-0式的自动加载(这作曲家支持),所以'新\ DIFF \渲染器\ HTML \ Inline'大概会工作(也许?) – apokryfos

+0

谢谢,我已经尝试过,但它给出了一个类似的错误,'Class'Diff \ Renderer \ Html \ Inline'找不到' – Andy

+0

如果不是那么'new \ Diff_Renderer_Html_Inline'(根NS相对)也许会工作 – apokryfos

回答

2

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

new \Diff_Renderer_Html_Inline; 

或命名声明后添加use Diff_Renderer_Html_Inline要能够做到:new Diff_Renderer_Html_Inline

相关问题