如何在文件中包含php别名

时间:2015-08-02 09:03:39

标签: php namespaces aliases

我可以在文件中写这个:

use Carbon\Carbon as Carbon;

我试图创建一个'aliases.php'文件:

use Carbon\Carbon as Carbon;

然后我这样引用:

require __DIR__.'/../bootstrap/aliases.php';

printf("Right now is %s", Carbon::now()->toDateTimeString());

但是这给了我错误:“致命错误:没有找到'碳'类”

那么我如何'包含'一个包含所有预定义别名的文件?

1 个答案:

答案 0 :(得分:3)

首先, aliases.php 文件不起作用的原因是使用语句仅在声明它们的文件中可见。换句话说,它们可以在 aliases.php 文件中使用,但不能在 include / require aliases.php的文件中使用。

来自PHP文档Using namespaces: Aliasing/Importing

  

注意:

     

导入规则是基于每个文件的,这意味着包含的文件不会继承父文件的导入规则。

其次,由于命名空间如何在PHP中运行,无法完成您正在尝试的操作。当PHP看到类名时,始终会尝试在当前命名空间中查找该类,并且无法更改该类。因此,如果您在任何命名空间代码中调用 Carbon ,它将被解释为 Current \ Namespace \ Carbon ,如果您从全局命名空间调用它,它将被解释为的 \碳

我能想到的唯一可以做类似的事情是在全局命名空间中声明一个类,它会扩展你尝试使用的类,然后使用这些类。对于碳,它将是:

<?php
use Carbon\Carbon as BaseCarbon;

class Carbon extends BaseCarbon {}

然后在您的代码中,您可以通过以下方式访问它:

\Carbon::now();

请记住,您需要在类名前加上 \ ,这样它总是从全局命名空间中获取,除非您正在执行的代码已经在全局命名空间中。