はじめに
Laravelのコードを見ているとよく出てくるこの記号 → ::
たとえばこんな書き方、見覚えありませんか?
Route::get('/', function () { return view('welcome'); });
$users = DB::table('users')->where('active', 1)->get();
この ::
の正体は「スコープ定義演算子(Scope Resolution Operator)」と呼ばれるものです。
他にもたくさん使われていますが、特にルーティング定義やデータベース操作など、Laravelを触りはじめたときにすぐ出てくる場面でよく見かける記号です。
今回はこの ::
記号の意味や、staticメソッドとの関係、Laravel独自の仕組み「Facade」について、初心者向けにわかりやすく解説します!
やりたいこと
-
PHPにおける
::
(スコープ定義演算子)の意味を理解する -
staticメソッドと通常メソッドの違いを知る
-
Laravelでなぜ
::
をよく見るのかを知る
スコープ定義演算子(::)とは?
::
は「スコープ定義演算子」と呼ばれ、クラスから static(静的)なメソッドやプロパティ にアクセスするときに使います。
例:
class Hello { public static function sayHi() { return 'こんにちは'; } } echo Hello::sayHi(); // OK!
クラス名のあとに ::メソッド名()
と書くことで、インスタンスを作らなくても呼び出せます。
staticメソッドと通常メソッドの違い
種類 | 呼び出し方 | インスタンス必要? | 特徴 |
---|---|---|---|
staticメソッド | ClassName::method() | 不要 | 状態を持たない処理向き |
通常メソッド | $instance->method() | 必要 | $this を使って状態管理可 |
比較してみよう
class Hello { public static function sayHi() { return 'こんにちは'; } public function sayHello() { return 'やあ!'; } } echo Hello::sayHi(); // OK(static) $h = new Hello(); echo $h->sayHello(); // OK(通常メソッド)
staticは状態を持たない「お手軽」なメソッドに便利。
通常メソッドは「インスタンスごとのデータ」を使いたいときに使います。
Laravelでの使い方:Facadeのしくみ
Laravelでは、Crypt::encrypt()
や User::find()
のように、::
を使った書き方がたくさん出てきます。
でも実はこれ、「全部staticなメソッド」というわけではありません。
Laravelでは Facade(ファサード) という仕組みで「staticっぽく見えるけど、裏ではインスタンスを使ってる」動作をしています。
たとえば…
Log::info('処理を開始します'); // 裏ではこんな感じで呼ばれている app('log')->info('処理を開始します');
つまり、Laravelは ::
を使ったシンプルな書き方で、裏でサービスクラスを呼び出してくれているのです。
※ただしこの記事では、Facadeの仕組みそのものについての深掘りはせず、あくまで ::
の基本的な使い方と意味にフォーカスします。
注意点:staticの使いすぎには注意
便利なstaticですが、以下のような場合には不向きです。
-
テストしにくい(依存性注入ができない)
-
状態(プロパティ)を持ちたいとき
Laravelではほとんどの処理が「サービスコンテナ経由」で管理されているので、staticのような使い方でも柔軟性がありますが、PHP全体としては使いどころを見極める必要があります。
まとめ
ポイント | 内容 |
---|---|
:: は何? |
クラスのstaticなものにアクセスする演算子 |
staticと通常メソッドの違い | インスタンス不要 vs 必要 |
Laravelでの利用 | Facade(裏でインスタンスを操作) |
Laravel初心者のうちは「なんか :: つけて書いてあるな〜」で終わりがちですが、実は便利な仕組みが裏にあります。少しずつ仕組みを理解していけば、Laravelコードの読みやすさもぐんと上がりますよ!
コメント