我已逐步开始在我的PHP项目中使用Composer,但是我总是质疑这些。
例如,我们说这是我的composer.json
文件:
{
"require": {
"ramsey/uuid": "~2.8"
}
}
我告诉作曲家我想要包ramsey/uuid
并按预期下载并包含该包。
当我想访问包裹上的类时,我被迫做了类似的事情:
$uuid = \Rhumsaa\Uuid\Uuid::uuid4();
有没有办法我可以要求包并强制更简单的命名空间,例如。 \Uuid::uuid4();
,避免编写完整的NS,包括包作者?
我应该在composer.json
上更改哪些内容才能执行此操作?谢谢。
注意:我了解PHP的use
。我可以use Rhumsaa\Uuid\Uuid;
...但是我需要在每个文件中执行此操作,但这不实用。如果我将一个小的自我使用框架放在一起,那就更少了。我希望instante将\Util\UUID
映射到\Rhumsaa\Uuid\Uuid
。
我还认为可以更改文件autoload_psr4.php
以完成此操作,但是在update
所有更改都被丢弃之后。
答案 0 :(得分:3)
不,你无法做任何事情来缩短这些命名空间。
Composer不必对PHP命名空间做任何事情。用于标识软件包的名称与PHP名称空间无关。他们不必以任何方式匹配。 Composer仅提供一个自动加载器,其中包含您在代码中使用的类的源代码。可能的替代方法是使用include_once()
或require_once()
手动加载源代码,或者自行创建自动加载器来执行此操作。
现在Composer已经不在了,我们可以讨论命名空间和类名。在PHP 5.3之前,没有名称空间。类要么没有在多个项目中普遍使用,因为它们用的是可能会与其他类轴承相同的名称冲突短名称创建的,或者他们被扩展为包含一个识别组件在他们的名字,如Zend_Controller_Abstract
或{{ 1}}(来自Symfony 1)。
这些类名也往往会变得很长,尤其是PSR-0自动加载的发明(很长一段时间以来,这是唯一定义的PSR标准)。
使用命名空间,您至少可以获得一种方法来缩短代码中的类名引用。
您必须在您使用的每个地方使用原始的长格式,或者您必须使用较短的别名导入它。是的,你必须在每个文件中重复import子句 - 但是你不能将每个类导入到每个文件中,你只能导入你实际使用的类。
使用IDE对这些任务非常有帮助。它们为您提供了一种在所有可用课程中搜索您想要使用但无法记住的课程的方法。它们还处理将命名空间类导入到您的文件中。您很少需要手动"在任何地方添加导入"。