关于 `use Image;` 这行代码的疑问?

ImageUploadHandler 的最上方,引入了 Image, 即
use Image;

当我在编辑器中打下 Image 的时候,代码提示了 3 种匹配

  • Intervention\Image\Facades\Image
  • Faker\Provider\Image
  • Intervention\Image\Image

而我们想要的应该是第一个 Intervention\Image\Facades\Image, 而教程中直接是 use Image

所以想了解一下,use Image 是如何保证引用的是 Intervention\Image\Facades\Image 而不是其他两个呢?

本帖已被设为精华帖!
本帖由 hustnzj 于 5年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

这个我当初用的时候也疑惑,帮你解答一下。
Laravel的门面引入命名空间有两种方式,一种是全局命名空间例如,Illuminate\Support\Facades\Route,一种是注册过别名的例如Route; 所以你可以看一下 config/app.phpaliases

file
这些都是使用class_aliases注册过,方式值的类,都可以用键的方式使用

6年前 评论
讨论数量: 20
Summer

@Chinkiver 这里有点误解,Laravel 5.5 自带了 扩展包发现 ,所以不需要手动添加 Provider。

6年前 评论

这个我当初用的时候也疑惑,帮你解答一下。
Laravel的门面引入命名空间有两种方式,一种是全局命名空间例如,Illuminate\Support\Facades\Route,一种是注册过别名的例如Route; 所以你可以看一下 config/app.phpaliases

file
这些都是使用class_aliases注册过,方式值的类,都可以用键的方式使用

6年前 评论

@Everan 可以看目錄vendor/intervention/image/composer.json中搜尋extra裡面就有配置了

6年前 评论

这个我当初用的时候也疑惑,帮你解答一下。
Laravel的门面引入命名空间有两种方式,一种是全局命名空间例如,Illuminate\Support\Facades\Route,一种是注册过别名的例如Route; 所以你可以看一下 config/app.phpaliases

file
这些都是使用class_aliases注册过,方式值的类,都可以用键的方式使用

6年前 评论

@DavidNineRoc
谢谢你的回复

这个文件我看了,但是里面没有找到对 Intervention\Image\Facades\Image 起的别名,文件里面也没有搜到 Image 的关键字

我的 alias 内容

'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        'Auth' => Illuminate\Support\Facades\Auth::class,
        'Blade' => Illuminate\Support\Facades\Blade::class,
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
        'Bus' => Illuminate\Support\Facades\Bus::class,
        'Cache' => Illuminate\Support\Facades\Cache::class,
        'Config' => Illuminate\Support\Facades\Config::class,
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
        'DB' => Illuminate\Support\Facades\DB::class,
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
        'Event' => Illuminate\Support\Facades\Event::class,
        'File' => Illuminate\Support\Facades\File::class,
        'Gate' => Illuminate\Support\Facades\Gate::class,
        'Hash' => Illuminate\Support\Facades\Hash::class,
        'Lang' => Illuminate\Support\Facades\Lang::class,
        'Log' => Illuminate\Support\Facades\Log::class,
        'Mail' => Illuminate\Support\Facades\Mail::class,
        'Notification' => Illuminate\Support\Facades\Notification::class,
        'Password' => Illuminate\Support\Facades\Password::class,
        'Queue' => Illuminate\Support\Facades\Queue::class,
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
        'Redis' => Illuminate\Support\Facades\Redis::class,
        'Request' => Illuminate\Support\Facades\Request::class,
        'Response' => Illuminate\Support\Facades\Response::class,
        'Route' => Illuminate\Support\Facades\Route::class,
        'Schema' => Illuminate\Support\Facades\Schema::class,
        'Session' => Illuminate\Support\Facades\Session::class,
        'Storage' => Illuminate\Support\Facades\Storage::class,
        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,

    ],
6年前 评论

@bignose 全局搜索Intervention\Image\Facades\Image的引用

6年前 评论

@DavidNineRoc

为了代码清晰,我在 ImageUploadHandler 中是引入代码是 use Intervention\Image\Facades\Image;, 所以全局搜索也只能搜到了 ImageUploadHandler 的结果。

不过试了下,不管是 use Intervention\Image\Facades\Image; 还是 use Image, 运行结果都是正确的

6年前 评论

在 'app\config' 里的 'app.php' 的 providersaliases 数组中分别添加:

Intervention\Image\ImageServiceProvider::class,

'Image'        => Intervention\Image\Facades\Image::class,
6年前 评论

@Chinkiver 谢谢回复

不过我没有手动添加这个映射关系,但程序也是正常运行的。想了解一下这是什么原因?

6年前 评论

@bignose 这个怎么说呢,你的去补下课了,首先是补 namespace 的相关知识,再看 Laravel 文档里的 Laravel 的服务提供器。只能先扎扎实实的学习完,回头再来看这个问题,都不是问题。

6年前 评论

:sunflower: :8ball:

6年前 评论
Summer

@Chinkiver 这里有点误解,Laravel 5.5 自带了 扩展包发现 ,所以不需要手动添加 Provider。

6年前 评论
Jennie

@bignose 请问你理解了吗? 我也疑惑中,如果有答案了,麻烦告知一下,先歇歇了。:+1:

6年前 评论

@Everan 可以看目錄vendor/intervention/image/composer.json中搜尋extra裡面就有配置了

6年前 评论

@Everan 看看我刚刚发的图,应该就明白了

6年前 评论
Jennie

@雷 :ok_hand: ,thanks!

6年前 评论
luphp_安轮粉丝
学习到了,小伙伴们都好棒。。主要是composer.json里定义了 provider 和aliases 
5年前 评论
月光

好像这种扩展包自动发现的机制,导致了对 PHPStorm 支持不太友好。我敲这里的时候也有这个疑问,目前通过手动在服务别名里添加了那个扩展包的类,PHPStorm 可以智能提示了。

5年前 评论
月光

再补充一下,添加上服务别名以后,还需要 ide-helper 扩展包重新生成一下。

php artisan ide-helper:generate
5年前 评论

想问一下你用的什么编辑器,什么插件,我的 sublime text 3 安装了这些插件,image 一点提示都没有。
file

5年前 评论

这个问题提的很有水平

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!