欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Laravel中类中的构造函数传参是可以自动new一个传递进去的吗?

程序员文章站 2022-05-15 11:15:26
...
这是LaravelAuth\Guard的构造函数:
    /**
     * Create a new authentication guard.
     *
     * @param  \Illuminate\Auth\UserProviderInterface  $provider
     * @param  \Illuminate\Session\Store  $session
     * @param  \Symfony\Component\HttpFoundation\Request  $request
     * @return void
     */
    public function __construct(UserProviderInterface $provider,
                                SessionStore $session,
                                Request $request = null)
    {
        $this->session = $session;
        $this->request = $request;
        $this->provider = $provider;
    }

其中传入了参数SessionStore $session
但是session的构造函数是这样的:

public function __construct($name, SessionHandlerInterface $handler, $id = null)
    {
        $this->setId($id);
        $this->name = $name;
        $this->handler = $handler;
        $this->metaBag = new MetadataBag;
    }

这里是有参数的,为什么Guard的构造函数可以自动生成session?
php原生提供的还是Laravel提供的?

回复内容:

这是LaravelAuth\Guard的构造函数:

    /**
     * Create a new authentication guard.
     *
     * @param  \Illuminate\Auth\UserProviderInterface  $provider
     * @param  \Illuminate\Session\Store  $session
     * @param  \Symfony\Component\HttpFoundation\Request  $request
     * @return void
     */
    public function __construct(UserProviderInterface $provider,
                                SessionStore $session,
                                Request $request = null)
    {
        $this->session = $session;
        $this->request = $request;
        $this->provider = $provider;
    }

其中传入了参数SessionStore $session
但是session的构造函数是这样的:

public function __construct($name, SessionHandlerInterface $handler, $id = null)
    {
        $this->setId($id);
        $this->name = $name;
        $this->handler = $handler;
        $this->metaBag = new MetadataBag;
    }

这里是有参数的,为什么Guard的构造函数可以自动生成session?
php原生提供的还是Laravel提供的?

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Auth/AuthManager.php#L51

/**
 * Create an instance of the Eloquent driver.
 *
 * @return \Illuminate\Auth\Guard
 */
public function createEloquentDriver()
{
    $provider = $this->createEloquentProvider();

    return new Guard($provider, $this->app['session.store']);
}
相关标签: php laravel