Я хочу поставить этот вопрос для меня. Чтобы лучше понять PHP а также Laravel.
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
Это на самом деле метод со статической функцией внутри? А внутри этой статической функции еще одна …? Я должен сказать, что я новичок в Каркасы.
Я впервые играю с одним из них.
Если ваше заблуждение больше связано с тем, как работает код, а не с тем, что он делает, то на самом деле это довольно сложная тема. Во-первых, это не совсем статический метод.
Laravel использует что-то вызов Фасады это позволяет вам вызывать методы «статически», что может сбивать с толку тех, кто плохо знаком с фреймворком. В двух словах, фасады — это большое удобство, потому что когда вы вызываете метод с использованием фасада Laravel, он «маскирует» для вас массу экземпляров объектов и затем вызывает метод.
Давайте возьмем для примера Schema
в этом случае. Где это Schema
учебный класс? Если вы посмотрите в свой config/app.php
файл, вы увидите эту строку кода под псевдонимами:
'Schema' => Illuminate\Support\Facades\Schema::class,
Schema
поэтому псевдоним для Illuminate\Support\Facades\Schema
,
Так что если вы посмотрите на Illuminate\Support\Facades\Schema
вы увидите, что это extends Facade
, Это один из фасадов Ларавела. Этот каталог имеет тонну фасадов Laravel. В любом случае, в верхней части этого класса вы также увидите небольшой удобный комментарий, который гласит:
@see \Illuminate\Database\Schema\Builder
Откройте этот файл, и это ваш Schema
учебный класс. За кулисами Ларавел создает для вас этот объект. Почему это так важно? Посмотрите на конструктор. Одна из зависимостей этого класса Illuminate\Database\Connection
, Откройте этот класс, и у него будет еще больше зависимостей. Вместо того, чтобы вручную создавать все эти классы вручную, фасады делают всю работу за вас. Итак, когда вы делаете Schema::create(...
Laravel создает все эти зависимости и вызывает create
метод в Illuminate\Database\Schema\Builder
учебный класс. Довольно круто, верно? Если вы посмотрите в этот файл, вы увидите метод:
/**
* 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 создает новый экземпляр за кулисами, а затем вызывает метод.
Первый аргумент принимает строку, которая будет именем таблицы, которую вы создаете. Тогда он принимает закрытие. В этом случае, как сказал @Kostas Mitsarakis, вы создаете таблицу с именем tasks
, Эта таблица имеет автоинкрементный столбец с именем id
, так далее.
Создает таблицу tasks
с id
как auto increment
колонка, name
как varchar
столбец и created_at
а также updated_at
как timestamp
колонны.
Больше информации Вот.