Ale*_* P. 3 php namespaces laravel laravel-5 laravel-5.3
导入外墙命名空间的正确方法是什么(例如Hash::make)?
我需要使用导入use Illuminate\Support\Facades\Hash吗?
我看到有些人使用它们\Hash::make(来自命名空间文件,例如默认创建的控制器)或Hash::make(来自非命名空间的文件,例如路由).
此外IDE辅助生成的根命名空间外墙:
namespace {
exit("This file should not be included, only analyzed by your IDE");
class Hash extends \Illuminate\Support\Facades\Hash{
/** ... */
public static function make($value, $options = array()){
return \Illuminate\Hashing\BcryptHasher::make($value, $options);
}
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么它的工作原理如果这个类在Illuminate\Support\Facades\命名空间中,而不是在根命名空间中.
您正在将Facades与Aliases进行比较.
这Illuminate\Support\Facades\Hash是一个Facade类,但是\Hash是该外观的别名类.看看你的情况config/app.php,看看它们是如何映射的:
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
// ...
Run Code Online (Sandbox Code Playgroud)
您可以使用\Hash别名或Illuminate\Support\Facades\Hash外观类; 两者都是正确的.
在自举阶段,Laravel使用名为的服务AliasLoader.它从中获取别名数组config/app.php,遍历所有元素,并__autoload使用PHP 创建函数队列spl_autoload_register.
每个__autoload函数都负责使用PHP的class_alias函数为各个Facade类创建别名.因此,在使用它们之前,我们不必导入和别名.
阅读更多:
Laravel Facades如何工作以及如何在其他地方使用它们
在您的config/app.php文件中,您可以看到aliases. Hash包含在那里,因此您可以Hash仅使用导入use Hash;
\Hash::make,这里\是从根命名空间引用。因此,您可以使用导入Hash顶部使用use Hash或直接使用使用\Hash::make
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |