2015-11-23 175 views
0

我想把這個問題給我。爲了更好地理解PHPLaravel這段代碼是什麼意思...?

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

這實際上是一個帶有靜態函數的方法嗎?而在這個靜態函數裏面另外一個......?我不得不說我是一個初學者,框架

這是我第一次玩一個。

+0

'up()'觸發一個「新的模式」 - 我認爲模式是Laraval中的組件或模型(從未使用過)。該調用中的函數是[回調函數](http://php.net/manual/en/language.types.callable.php) - 用於告訴'Schema :: create'它應該如何處理其處理。 –

+0

另請注意,'create'是'Schema'類的[靜態方法](http://php.net/manual/en/language.oop5.static.php)。 –

回答

4

如果您的困惑更多地是關於代碼如何工作而不是它的作用,那實際上是一個非常複雜的主題。首先,這不是一個真正的靜態方法。

Laravel使用一些叫做Facades的東西,它允許你「靜態地」調用方法,這可能會讓新來的人感到困惑。簡而言之,外牆是非常方便的,因爲當您使用Laravel的外觀調用方法時,它爲您「遮罩」大量實例對象,然後調用該方法。

在這個例子中我們以Schema爲例。這個Schema班在哪裏?如果你看看你的config/app.php文件中,你會看到這行代碼下別名:因此

'Schema' => Illuminate\Support\Facades\Schema::class, 

SchemaIlluminate\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等的自動遞增列。

+0

非常感謝您的解釋。我想知道如何工作。因爲我對工作人員的工作方式總是有點好奇。你100%覆蓋我的問題。 –

1

它創建一個表tasksid作爲auto increment柱,namevarchar柱和created_atupdated_at作爲timestamp列。

更多信息here