laravel 理解laravel模型中的静态方法

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41143620/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 14:55:38  来源:igfitidea点击:

Understanding static method in laravel Model

phplaravellaravel-5

提问by Alexander Solonik

I was just going through a laravel tutrorial online and i saw the following modal coded as below:

我刚刚在网上浏览了 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;
    }

}

What i am interested to know is what exactly is the use of the below method that is defined:

我有兴趣知道以下定义的方法的用途究竟是什么:

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

I realize its a static method , but this line return new static($attributes);particularly confuses me.

我意识到它是一个静态方法,但这一行return new static($attributes);让我特别困惑。

I see the method being used in the following way:

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

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

But i still don't quite understand its usage . can somebody explain .

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

回答by Sherif

static method can be used without instantiating the class thus the ::

可以在不实例化类的情况下使用静态方法,因此 ::

return new static($attributes);makes a new model object from that class

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

which is basically the same as

这基本上与

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

all you need to do with the object insatance is call $notice->save()

你需要对对象实例做的就是调用 $notice->save()

回答by Kamil Latosinski

In this case it is just a syntactic sugar. Someone doesn't seem to like the newkeyword and prefers a more semantic way to instantiate a new notice class, so it reads better.

在这种情况下,它只是一个语法糖。有人似乎不喜欢这个new关键字,而是更喜欢用更语义化的方式来实例化一个新的通知类,所以它读起来更好。

It also leaves you the doors open for some future logic around instantiating new notice.

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

Btw. it is model, not modal.

顺便提一句。它是模型el,而不是 mod al。