2016-12-14 51 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。