1

我决定看看如何在 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

4

2 回答 2

2

withmethod 是一个辅助方法(Laravel 辅助方法),它允许您使用方法链。es 特别在 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();
于 2015-02-27T15:52:22.447 回答
1

从代码注释中:

创建一个新的控制台应用程序。

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

  1. 它调用类构造函数来创建一个新实例。查看symfony 类以获取有关构造函数的更多详细信息。
  2. 使用with()允许链接调用其他方法setLaravel()setExceptionHandler()等等,这些方法最终确定了 Laravel 应用程序实例的设置。

要了解有关new static查看此问题的更多信息:New self vs. new static

于 2015-02-27T15:57:10.373 回答