理解laravel模型中的静态方法

时间:2016-12-14 13:16:19

标签: php laravel laravel-5

我刚刚在网上经历了一个laravel tutrorial,我看到以下模式编码如下:

<?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);

但我仍然不太明白它的用法。有人可以解释一下。

2 个答案:

答案 0 :(得分:8)

静态方法可以在不实例化类::

的情况下使用

return new static($attributes);从该类中创建一个新的模型对象

基本相同
$notice = new Notice;
$notice->provider_id = $provider_id;
...

您只需要调用$notice->save()

即可

答案 1 :(得分:2)

在这种情况下,它只是一种语法糖。有人似乎不喜欢new关键字,并且更喜欢以更加语义的方式来实例化新的通知类,因此它更好。

它还为您提供了关于实例化新通知的未来逻辑的大门。

顺便说一下。它是mod e l,而不是mod a l。