如何在文件中包含 php 别名
how to include php aliases across files
我可以把这个写在文件里:
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());
但这给了我错误:"Fatal error: Class 'Carbon' not found"
那么我如何 'include' 一个包含所有预定义别名的文件?
首先,你的aliases.php文件不工作的原因是因为use语句只可见在声明它们的文件中。换句话说,它们在您的 aliases.php 文件中工作,但在 include/require aliases.php.
来自 PHP 文档 Using namespaces: Aliasing/Importing:
Note:
Importing rules are per file basis, meaning included files will NOT inherit the parent file's importing rules.
其次,由于命名空间在 PHP 中的工作方式,不可能实现您想要做的事情。当 PHP 看到 class 名称时,它 总是 尝试在当前命名空间中找到 class 并且无法更改它。因此,如果您在任何命名空间代码中调用 Carbon,它将被解释为 Current\Namespace\Carbon,如果您从全局命名空间调用它, 它将被解释为 \Carbon.
我想到的唯一可以做类似事情的事情是在全局命名空间中声明一个 class 来扩展您尝试使用的 class 然后使用那些classes 代替。对于碳,它将是:
<?php
use Carbon\Carbon as BaseCarbon;
class Carbon extends BaseCarbon {}
然后在您的代码中,您可以通过以下方式访问它:
\Carbon::now();
请记住,您需要在 class 名称前加上 \ 前缀,以便它始终取自全局命名空间,除非您的代码执行已经在全局命名空间中。
我可以把这个写在文件里:
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());
但这给了我错误:"Fatal error: Class 'Carbon' not found"
那么我如何 'include' 一个包含所有预定义别名的文件?
首先,你的aliases.php文件不工作的原因是因为use语句只可见在声明它们的文件中。换句话说,它们在您的 aliases.php 文件中工作,但在 include/require aliases.php.
来自 PHP 文档 Using namespaces: Aliasing/Importing:
Note:
Importing rules are per file basis, meaning included files will NOT inherit the parent file's importing rules.
其次,由于命名空间在 PHP 中的工作方式,不可能实现您想要做的事情。当 PHP 看到 class 名称时,它 总是 尝试在当前命名空间中找到 class 并且无法更改它。因此,如果您在任何命名空间代码中调用 Carbon,它将被解释为 Current\Namespace\Carbon,如果您从全局命名空间调用它, 它将被解释为 \Carbon.
我想到的唯一可以做类似事情的事情是在全局命名空间中声明一个 class 来扩展您尝试使用的 class 然后使用那些classes 代替。对于碳,它将是:
<?php
use Carbon\Carbon as BaseCarbon;
class Carbon extends BaseCarbon {}
然后在您的代码中,您可以通过以下方式访问它:
\Carbon::now();
请记住,您需要在 class 名称前加上 \ 前缀,以便它始终取自全局命名空间,除非您的代码执行已经在全局命名空间中。