4

I can write this in a file:

use Carbon\Carbon as Carbon;

I have tried to create a file 'aliases.php':

use Carbon\Carbon as Carbon;

which I then reference like so:

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

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

but that gives me the error: "Fatal error: Class 'Carbon' not found"

So how can I 'include' one file with all the pre-defined aliases?

4

1 回答 1

5

首先,您的aliases.php文件不起作用的原因是因为use语句仅在声明它们的文件中可见。换句话说,它们在您的aliases.php文件中起作用,但在包含的文件中不起作用/需要别名.php。

来自 PHP 文档Using namespaces: Aliasing/Importing

笔记:

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

其次,由于命名空间在 PHP 中的工作方式,不可能做你想做的事情。当 PHP 看到一个类名时,它总是试图在当前命名空间中找到该类,并且没有办法改变它。因此,如果您在任何命名空间代码中调用Carbon,它将被解释为Current\Namespace\Carbon,如果您从全局命名空间调用它,它将被解释为\Carbon

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

<?php
use Carbon\Carbon as BaseCarbon;

class Carbon extends BaseCarbon {}

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

\Carbon::now();

请记住,您需要在类名前加上\,以便它始终取自全局命名空间,除非您正在执行的代码已经在全局命名空间中。

于 2015-08-02T09:53:42.573 回答