首页后端开发PHPlaravel依赖注入是什么意思

laravel依赖注入是什么意思

时间2024-03-25 08:12:03发布访客分类PHP浏览1532
导读:关于“laravel依赖注入是什么意思”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“laravel依赖注入是什么意...
关于“laravel依赖注入是什么意思”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“laravel依赖注入是什么意思”吧。

概述

任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责:

1.自动地在构造函数中检测依赖关系

2.如果需要构建这个依赖关系

3.通过构造函数创建对象形成依赖关系

来看一个非常简单的例子。

?php
namespace App\Http\Controllers;
    
use App\User;
    
use App\Repositories\UserRepository;
    
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    
    protected $userRepository;

    public function __construct(UserRepository $userRepository)
    {
    
        $this->
    userRepository = $userRepository;

    }

    public function show($id)
    {
    
        $user = $this->
    userRepository->
    find($id);
    
        return view('user.profile', ['user' =>
     $user]);

    }

}
    

假如,你有一个UserController类需要UserRepository作为一个构造函数依赖。

1.服务容器使用PHP的反射类来检测,事实UserRepository需要被优先解析。

2.然后,它构造UserRepository实例。

3.然后,它构造UserController类实例。

依赖关系是如何被解析和注入的,我被很多Laravel开发人员不知道这个简单而强大的技术感到迷惑。 这是一个非常强大的技术,它可以被用来解决复杂对象的依赖关系。

如果由于某种原因,您不希望Laravel自动构建一个对象,您还可以通过传递一个可用于创建依赖关系的回调来告诉Laravel Service Container如何构造该对象。

?php
$container->
bind('My\Service', function($container) {
    
return new My\Service($container->
    make('My\AnotherService'));

}
    );
    

您需要创建一个服务提供商来注册上述服务。

?php
namespace App\Providers;
    
use Illuminate\Support\ServiceProvider;

class MyServiceProvider extends ServiceProvider
{

    public function register()
    {
    
        $this->
    app->
singleton(\My\Service::class, function ($app) {
    
            return new \My\Service($app->
    make('My\AnotherService'));

        }
    );

    }

}
    

当My\Service需要被解析的时候,负责返回一个对象的回调函数就会被调用。

?php
namespace App\Http\Controllers;
    
use App\User;
    
use App\Http\Controllers\Controller;

class MyController extends Controller
{
    
    protected $myService;

    public function __construct(\My\Service $myService)
    {
    
        $this->
    myService = $myService;

    }

    // .. 方法
}
    

真实的例子

假设你的应用需要Facebook的PHP SDK来访问Facebook的API,你的控制器就是这样的:

?php
namespace App\Http\Controllers;
    
use App\User;
    
use App\Http\Controllers\Controller;
    
use Facebook\Facebook;

class FacebookApiAccessController extends Controller
{
    
    protected $facebook;

    public function __construct(Facebook\Facebook $facebook)
    {
    
        $this->
    facebook = $facebook;

    }

    //.. action methods here
}
    

现在,您需要告诉Service Container如何构建Facebook\Facebook的实例.

?php
$container->
singleton('Facebook\Facebook', function() {
    
  return new \Facebook\Facebook([
    'app_id' =>
     config('services.facebook.app_id'),
    'app_secret' =>
     config('services.facebook.app_secret'),
    'default_graph_version' =>
     'v2.10',
  ]);

}
    );
    

注意,我已经调用了方法singleton而不是bind。 唯一的区别是用singleton注册的服务被缓存,随后的解析服务调用返回缓存的服务。

结论

依赖注入是一种强大的技术,你可以在Laravel中用来简化对象的创建. 默认情况下,Laravel的服务容器会自动的用反射去检测和解决依赖关系. 但是, 你可以指定回调来解析服务.


感谢各位的阅读,以上就是“laravel依赖注入是什么意思”的内容了,通过以上内容的阐述,相信大家对laravel依赖注入是什么意思已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

laravel依赖注入

若转载请注明出处: laravel依赖注入是什么意思
本文地址: https://pptw.com/jishu/652651.html
vue里面computed表示的是什么意思呢? 组件的特性是什么?是vue吗?

游客 回复需填写必要信息