Php 编写器:需要具有自定义命名空间的包

Php 编写器:需要具有自定义命名空间的包,php,composer-php,alias,Php,Composer Php,Alias,我已经逐渐开始在我的PHP项目中使用Composer,但是有一些东西我总是质疑 例如,假设这是我的composer.json文件: { "require": { "ramsey/uuid": "~2.8" } } 我告诉composer我想要这个包ramsey/uuid,并按预期下载它并包含这个包 当我想访问包中的类时,我必须执行以下操作: $uuid = \Rhumsaa\Uuid\Uuid::uuid4(); 是否有一种方法可以要求该包并强制使用一个更简单

我已经逐渐开始在我的PHP项目中使用Composer,但是有一些东西我总是质疑

例如,假设这是我的
composer.json
文件:

{
    "require": {
        "ramsey/uuid": "~2.8"
    }
}
我告诉composer我想要这个包
ramsey/uuid
,并按预期下载它并包含这个包

当我想访问包中的类时,我必须执行以下操作:

$uuid = \Rhumsaa\Uuid\Uuid::uuid4();
是否有一种方法可以要求该包并强制使用一个更简单的名称空间,例如,
\Uuid::uuid4(),避免编写包括包作者在内的完整NS

要做到这一点,我应该在我的
composer.json
上更改什么?多谢各位

注意:我知道PHP的
使用
。我可以
使用Rhumsaa\Uuid\Uuid。。。但是我需要在每个文件中都这样做,这是不实际的。如果我正在构建一个小型的自我使用框架,就更不用说了。我希望Instance将
\Util\UUID
映射到
\Rhumsaa\UUID\UUID


我还认为可以通过更改文件
autoload_psr4.php
来实现这一点,但是在
更新之后
所有更改都被丢弃。

不,您无法缩短这些名称空间

Composer不必对PHP名称空间做任何事情。用于标识软件包的名称与PHP命名空间无关。他们不必以任何方式匹配。Composer仅提供一个自动加载程序,该自动加载程序将包含您正在代码中使用的类的源代码。可能的替代方法是使用
include_once()
require_once()
手动加载源代码,或者自己创建一个自动加载程序来完成此操作

既然Composer已经退出了讨论,我们就可以讨论名称空间和类名了。在PHP5.3之前,没有名称空间。类通常不用于多个项目,因为它们创建时使用的短名称可能与具有相同名称的其他类冲突,或者它们被扩展为在名称中包含区别组件,例如
Zend\u Controller\u Abstract
sfController
(来自Symfony 1)

这些类名也会变得很长,特别是随着PSR-0自动加载的发明(这在很长一段时间内是唯一定义的PSR标准)

使用名称空间,您至少可以获得一个方法来缩短代码中的类名引用

您必须在使用的每个地方使用原始的长表单,或者必须使用较短的别名导入它。是的,您必须在每个文件中重复import子句,但是您不会将每个类导入到每个文件中,您只会导入实际使用的类

使用IDE对这些任务非常有帮助。它们为您提供了一种在所有可用类中搜索想要使用但记不住的类的方法。它们还处理将命名空间类导入到文件中的问题。您很少需要手动“到处添加导入”