2016-12-14 30 views
4

我只是通過laravel tutrorial去網上,我看到下面的模態編碼如下:瞭解在laravel型號靜態方法

<?php 

namespace App; 
use Illuminate\Database\Eloquent\Model; 

class Notice extends Model { 

    protected $fillable = [ 
     'provider_id', 
     'infringing_title',  
     'infringing_link',  
     'original_link',  
     'original_description',  
     'template',  
     'content_removed' 
    ]; 


    public static function open(array $attributes) { 
     return new static($attributes); 
    } 

    public function useTemplate($template) { 
     $this->template = $template; 
    } 

} 

什麼,我想知道到底是什麼是利用以下被定義的方法:

public static function open(array $attributes) { 
      return new static($attributes); 
} 

我意識到它是一個靜態方法,但此行return new static($attributes);特別是混淆了我。

我看到下面的方式使用方法:

$notice = Notice::open($date); 

但我還是不太瞭解它的用法。有人可以解釋。

回答

5
可以在不實例化類使用

靜態方法從而::

return new static($attributes);使得從該類

一個新的模型對象,它是基本相同

$notice = new Notice; 
$notice->provider_id = $provider_id; 
... 

所有你需要與物體不相關的是呼叫$notice->save()

2

在這種情況下,它只是一個句法糖。有人似乎不喜歡new關鍵字,並且傾向於使用更多的語義方式來實例化新的通知類,所以它讀得更好。

這也爲您留下了一些未來邏輯的實例化新通知。

Btw。它是mod e l,不是mod a l。