这个代码是什么意思...?

What is this code meaning...?

我想为我提出这个问题。为了更好地理解 PHPLaravel.

public function up()
{
    Schema::create('tasks', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

这实际上是一个方法,里面有一个静态函数吗?在这个静态函数内部还有另一个......?我不得不说我是 Frameworks 的初学者。

这是我第一次玩。

它创建一个 table tasksid 作为 auto increment 列,name 作为 varchar 列,created_at updated_at 作为 timestamp 列。

更多信息here

如果您对代码的工作原理而不是代码的作用感到困惑,那么这实际上是一个相当复杂的主题。首先,它并不是真正的静态方法。

Laravel 使用调用 Facades 的东西,允许您调用方法 "statically",这可能会让刚接触该框架的人感到困惑。简而言之,外观非常方便,因为当您使用 Laravel 的外观调用方法时,它 "masks" 为您提供大量实例对象,然后调用该方法。

让我们以 Schema 为例。这个Schemaclass在哪里?如果您查看 config/app.php 文件,您会在别名下看到这行代码:

'Schema'    => Illuminate\Support\Facades\Schema::class,

Schema 因此是 Illuminate\Support\Facades\Schema.

的别名

因此,如果您查看 Illuminate\Support\Facades\Schema,您会发现它 extends Facade。它是 Laravel 的门面之一。这个目录有大量 Laravel 的外观。无论如何,在这个 class 的顶部,您还会看到一个方便的注释,上面写着:

@see \Illuminate\Database\Schema\Builder

打开那个文件,这是你的 Schema class。在幕后,Laravel 为您实例化此对象。为什么这是一件大事?看一下构造函数。 class 的依赖项之一是 Illuminate\Database\Connection。打开 class,它有更多的依赖项。不必一直手动实例化所有这些 classes,facades 会为您完成这些工作。因此,当您执行 Schema::create(... 时,Laravel 正在实例化所有这些依赖项并调用 Illuminate\Database\Schema\Builder class 中的 create 方法。非常棒,对吧?如果您查看该文件,您会看到方法:

/**
 * Create a new table on the schema.
 *
 * @param  string    $table
 * @param  \Closure  $callback
 * @return \Illuminate\Database\Schema\Blueprint
 */
public function create($table, Closure $callback)
{
    $blueprint = $this->createBlueprint($table);

    $blueprint->create();

    $callback($blueprint);

    $this->build($blueprint);
}

您可以看到它不是静态方法。 Laravel 正在后台创建一个新实例,然后调用该方法。

第一个参数接受一个字符串,它是您正在创建的 table 的名称。然后它接受一个闭包。在这种情况下,正如@Kostas Mitsarakis 所说,您正在创建一个名为 tasks 的 table。此 table 有一个名为 id 的自动递增列,等等