Laravel手工初始化中代码的含义


Meaning of code in Laravel artisan initialization

我决定看看如何在Laravel 4.2中初始化artisan,并看到函数make($app)

public static function make($app)
    {
    $app->boot();
    $console = with($console = new static('Laravel Framework', $app::VERSION))
                            ->setLaravel($app)
                            ->setExceptionHandler($app['exception'])
                            ->setAutoExit(false);
    $app->instance('artisan', $console);
    return $console;
}

我不是真正的PHP新手,但也不是大师。。。我无法完全理解的含义(从PHP的角度来看)

$console = with($console = new static('Laravel Framework', $app::VERSION))
                        ->setLaravel($app)
                        ->setExceptionHandler($app['exception'])
                        ->setAutoExit(false);

这是指向源的链接https://github.com/laravel/framework/blob/4.2/src/Illuminate/Console/Application.php

with方法是一个辅助方法(Laravel-helper方法),它允许您进行方法链。特别是在PHP 5.3.X环境中

从文件

$value = with(new Foo)->doWork();

这将在类Foo之外创建一个新实例,并在Foo 上调用方法do

来自源

if ( ! function_exists('with'))
{
    /**
     * Return the given object. Useful for chaining.
     *
     * @param  mixed  $object
     * @return mixed
     */
    function with($object)
    {
        return $object;
    }
}

当您为它提供一个对象->的实例时,它将返回这个实例。现在您可以调用该对象的方法或属性了。

这将与执行以下操作相同:

 $foo = new Foo();
 $value = $foo->doWork();

从代码注释来看:

创建一个新的Console应用程序。

我想你会问更多关于如何。

  1. 它调用类构造函数来创建一个新实例。有关构造函数的更多详细信息,请查看symfony类
  2. 使用with()可以链接调用额外的方法setLaravel()setExceptionHandler()等,以完成Laravel应用程序实例的设置

要了解更多关于new static的信息,请复习这个问题:新自我与新静态。