Что означает этот код …?

Я хочу поставить этот вопрос для меня. Чтобы лучше понять PHP а также Laravel.

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

Это на самом деле метод со статической функцией внутри? А внутри этой статической функции еще одна …? Я должен сказать, что я новичок в Каркасы.

Я впервые играю с одним из них.

0

Решение

Если ваше заблуждение больше связано с тем, как работает код, а не с тем, что он делает, то на самом деле это довольно сложная тема. Во-первых, это не совсем статический метод.

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, так далее.

4

Другие решения

Создает таблицу tasks с id как auto increment колонка, name как varchar столбец и created_at а также updated_at как timestamp колонны.

Больше информации Вот.

1

По вопросам рекламы [email protected]