如果您的困惑更多地是關於代碼如何工作而不是它的作用,那實際上是一個非常複雜的主題。首先,這不是一個真正的靜態方法。
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
。這是Laravel的門面之一。這個目錄有很多Laravel的外牆。無論如何,在這個類的頂部,你還會看到一個小便利的評論,說:
@see \Illuminate\Database\Schema\Builder
打開該文件,這是你的Schema
類。在幕後,Laravel爲你實例化這個對象。爲什麼這麼重要?看看構造函數。這個班的其中一個依賴是Illuminate\Database\Connection
。打開這個類,它有更多的依賴關係。門面不是一直手動實例化所有這些類,而是爲你做這項工作。因此,當您執行Schema::create(...
時,Laravel正在實例化所有這些依賴關係,並調用Illuminate\Database\Schema\Builder
類中的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正在幕後創建一個新實例,然後調用該方法。
第一個參數接受一個字符串,它將是您正在創建的表的名稱。然後它接受封閉。在這種情況下,正如@ Kostas Mitsarakis所說,您正在創建一個名爲tasks
的表格。該表具有一個名爲id
等的自動遞增列。
'up()'觸發一個「新的模式」 - 我認爲模式是Laraval中的組件或模型(從未使用過)。該調用中的函數是[回調函數](http://php.net/manual/en/language.types.callable.php) - 用於告訴'Schema :: create'它應該如何處理其處理。 –
另請注意,'create'是'Schema'類的[靜態方法](http://php.net/manual/en/language.oop5.static.php)。 –