Laravel中创建数据表命令中第一个参数为数据表的名称,第二个参数为一个闭包,此闭包会接受一个用于定义新数据表的 Blueprint
对象:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
});
什么是闭包呢?
百度、google、知乎后,自己理解闭包就是一个代码+数据的块(匿名函数),闭包执行后是一堆数据,但是这堆数据自带了执行的方法。
上文的 function(Blueprint $table) {$table->increments('id');}
是一个闭包,PHP中叫匿名函数(Anonymous functions),也叫闭包函数(closures),Blueprint是一个类,类中有很多方法如increments,可以用来把定义不同的数据类型,使之成为能够注入的语句。
首先Blueprint 声明 $table 是 Blueprint 这个类的,然后利用 Blueprint 类中的方法将想要注入的数据按照类型转变成Mysql可以识别的语句,然后用 create 方法就可以将表插入数据库了。
所以说闭包看上去是代码,其实是数据,或者说是数据和代码的结合,但其实代码就是一种数据
参考的链接
闭包(计算机科学)是什么?
Javascript闭包——懂不懂由你,反正我是懂了
设计闭包(Closure)的初衷是为了解决什么问题?