Если ваше замешательство больше о том, как работает код, а не о том, что он делает, на самом деле это довольно сложный вопрос. Во-первых, это не статический метод.
Laravel использует что-то для вызова Facades, что позволяет вам называть методы «статически», что может ввести в заблуждение для людей, новых для фреймворка. В двух словах, фасады являются большим удобством, потому что, когда вы вызываете метод с использованием фасада Laravel, он «маскирует» тон объектов экземпляров для вас, а затем вызывает метод.
Возьмем, к примеру, Schema
в этом случае. Где этот класс Schema
? Если вы посмотрите в файл config/app.php
, вы увидите эту строку кода под псевдонимами: поэтому
'Schema' => Illuminate\Support\Facades\Schema::class,
Schema
является псевдонимом для Illuminate\Support\Facades\Schema
.
Итак, если вы посмотрите на Illuminate\Support\Facades\Schema
, вы увидите, что это extends Facade
. Это один из фасадов Ларавеля. В этом каталоге есть тонна фасадов Ларавеля. Во всяком случае, в верхней части этого класса, вы также увидите небольшой удобный комментарий, который говорит:
@see \Illuminate\Database\Schema\Builder
Откройте этот файл, и это ваш Schema
класс. За кулисами Laravel создает этот объект для вас. Почему это так важно? Посмотрите на конструктор. Одна из зависимостей этого класса - 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
и т. Д.
'up()' запускает «новую схему», где я предполагаю, что схема является либо компонентом, либо моделью в Laraval (никогда не использовала ее). Функция внутри этого вызова - это [функция обратного вызова] (http://php.net/manual/en/language.types.callable.php) - используется для указания 'Schema :: create' того, что она должна делать с результатами его обработки. –
Также обратите внимание, что 'create' является [статическим методом] (http://php.net/manual/en/language.oop5.static.php) класса' Schema'. –