そういえばPHPの「クラス名::class」って何?

1 min read読了の目安(約900字

こんにちは。

私は結構Laravelを使用してシステム開発をすることが多いのですが、例えば「UserController::class」とか「Item::class」のように、クラス名の後にclass がつくことがあります。

何となく使っているけど、これは結局なんだろう?ということで調べてみました。

前提

  • App\Http\Controllers\UserControllerというクラスを定義している。

UserController::classの正体は?

# UserControllerをインポートして
use App\Http\Controllers\UserController

# UserControllerのインスタンスを作って
$controller = new UserConrroller()

# ::classを出してみる
echo $controller::class

出力結果はこうです。

App\Http\Controllers\UserController

PHPの公式ドキュメントを見てみる

The class keyword is also used for class name resolution. To obtain the fully qualified name of a class ClassName use ClassName::class. This is particularly useful with namespaced classes.

GOogle翻訳さんに翻訳してもらうと、、、

このclassキーワードは、クラス名解決にも使用されます。クラスの完全修飾名を取得するには、をClassName 使用しますClassName::class。これは、名前空間付きクラスで特に役立ち ます。

というわけで、クラスの完全修飾名(クラスの住所みたいな)を取得できるものでした!

終わりに

意味もわからずになんとなく使っていたので調べてみました。
認識が違うところや、もっと別の使い方があったりする場合はぜひコメントでご指摘ください。

ではまた!