我有一个项目,其中包含以下composer.json
个依赖项:
"propel/propel1": "dev-master"`,
"halleck45/phpmetrics": "dev-master"
我最近做了一个composer update
,发现PhpMetrics所需的新版本的库叫做Hoa,引入了一个新的类\EngineException
来模拟一个新的PHP7类。不幸的是,Propel 1还定义了\EngineException
,因此会产生冲突。
对此的正确解决方法是升级到使用名称空间的Propel 2。然而,这仍然是阿尔法并且受到BC休息的影响,因此对我来说并不可行。
我目前的解决方法是将Hoa锁定到没有新类的特定版本:
"hoa/core": "2.15.04.*"
这不是一个糟糕的解决方案,但将图书馆锁定到旧版本并不完全令人满意。
在Hoa代码中,不加载新类的唯一方法是运行PHP 7,这也是不可行的。但是,当PhpMetrics运行时,Hoa只需要require
d。这是一个独立的代码分析工具,为方便起见,它只位于项目的根目录中;项目的其余部分不使用此库。
因此,如果我可以在Composer中调用某个东西来要求这个类没有(自动)加载,或者可能在composer.json
中做同样的事情,那就太好了。它目前正在被不必要地加载 - 我不知道它是否被错误地自动加载或者是否由Composer手动require
。
可能有助于了解Composer将Hoa类添加到自动生成的autoload_psr4.php
脚本中。据我所知understand the docs,这意味着它是自动加载的,我的项目中没有任何内容需要任何Hoa类。
答案 0 :(得分:3)
由https://github.com/hoaproject/Core/commit/8ed00fe9345c4f8b2679a256926d6d24994ea842修正。
PHP7 [1]中引入的新异常架构完全是 重新设计[2]。此修补程序更新了复古兼容性类 根据这个新架构。因此,
BaseException
已删除类,以及EngineException
和。{ParseException
。虽然这些后者可以实施(而不是 到目前为止,我们更喜欢只实现Throwable
接口。 让我们看看我们是否可以实现(仍为复古兼容性)Error
,TypeError
和ParseError
类。[1]:https://wiki.php.net/rfc/engine_exceptions_for_php7
[2]:rfc / throwable-interface
答案 1 :(得分:2)
我很好奇,所以我查了一下。 Hoa确实有一个破碎的方法,文件Core.php
总是包含在作曲家的"file" autoload中,而class_exists
又包括Consistency.php
。后者定义了你的班级。
您可以向Hoa的开发人员提出问题,使用this检查方法而不是他们正在使用的当前版本检查。这可能导致推进式自动装载机加载自己的。另一种方法是正确定义自动加载,但他们更喜欢手动加载。