我可以在文件中写这个:
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());
但是这给了我错误:“致命错误:没有找到'碳'类”
那么我如何'包含'一个包含所有预定义别名的文件?
答案 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();
请记住,您需要在类名前加上 \ ,这样它总是从全局命名空间中获取,除非您正在执行的代码已经在全局命名空间中。