Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21081

public static とは?

$
0
0

Laravelのバリデーションのルール

Laravelでバリデーションのルールは様々な書き方があると思うが、もしModelに書くとこのようになるだろう。

namespaceApp;useIlluminate\Database\Eloquent\Model;classTestextendsModel{publicstatic$rules=array('title'=>'required','body'=>'required',);}

そして、Modelに書いたルールをControllerではこのように利用できる。

namespaceApp\Http\Controllers;useIlluminate\Http\Request;useApp\Http\Controllers\Controller;useApp\Test;classTestControllerextendsController{publicfunctioncreate(Request$request){$this->validate($request,Test::$rules);$test=newTest;$input=$request->all();$test->fill($input);$test->save();}

ほとんどの場合、バリデーションのルールは public static 変数名...と書き出すことが多い。

public staticとはなにか?

PHPの公式サイトにはこのように記されている。https://www.php.net/manual/ja/language.oop5.static.php

クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 static なプロパティは、インスタンス化されたクラスオブジェクトから アクセスすることはできません (static なメソッドにはアクセスできます)。

「クラスのインスタンス化」というのは、上のコードのControllerでは $news = new Test;にあたる。
これがクラスのインスタンス化である。

クラスはインスタンス化、つまり変数を初期化して利用することが多い。
そうすることでクラスに定義されたメソッドなどをそのまま流用できるからである。

しかし public staticという宣言をしたものは、クラスのインスタンス化は意味がない。
クラス::プロパティと書くことでクラスの中のプロパティを参照することができる。

$this->validate($request, Test::$rules);と書くことで、Testというクラスの中の $rulesを参照していることになる。

public staticの使いどころ

public staticについて説明をしたがこれは何のためにあるのか?という疑問が出てくる人がいると思う。
ほとんどのプログラムはクラスをインスタンス化して、そのクラスのプロパティが変化していくことが多い。
上のコードではリクエストを受け取ってデータベースに保存するが、リクエストは毎回内容が違う。

しかし、バリデーションのルールはリクエストに応じて変わらない。
リクエストに応じて変わらないとは、インスタンス化の有無に関わらずプロパティが変化しないことになる。
このときに public staticを利用すると良い。


Viewing all articles
Browse latest Browse all 21081

Trending Articles