Estaba pasando por un tutorial de laravel en línea y vi el siguiente modal codificado como se muestra a continuación:

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

}

Lo que me interesa saber es cuál es exactamente el uso del método a continuación que se define:

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

Me doy cuenta de que es un método estático, pero esta línea return new static($attributes); me confunde particularmente.

Veo que el método se usa de la siguiente manera:

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

Pero todavía no entiendo bien su uso. alguien puede explicar.

6
Alexander Solonik 14 dic. 2016 a las 16:16

2 respuestas

La mejor respuesta

El método estático se puede utilizar sin instanciar la clase, por lo que el ::

return new static($attributes); crea un nuevo objeto modelo a partir de esa clase

Que es básicamente lo mismo que

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

Todo lo que necesitas hacer con la instancia del objeto es llamar a $notice->save()

9
Sherif 14 dic. 2016 a las 13:21

En este caso es solo un azúcar sintáctico. A alguien no parece gustarle la palabra clave new y prefiere una forma más semántica de instanciar una nueva clase de aviso, para que se lea mejor.

También le deja las puertas abiertas para alguna lógica futura en torno a la creación de instancias de un nuevo aviso.

Por cierto. es mod e l, no mod a l.

2
Kamil Latosinski 14 dic. 2016 a las 13:23