はじめに
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コードの読みやすさもぐんと上がりますよ!



コメント