【PHP/ Laravel】ClassName::classって何?ネームスペースを含んだクラス名を取得する

Laravel

Laravelだとよく見る Model::classってなんなんでしょう?

リレーションだったり、サービスプロバイダーのあたりでよく見かけますよね。

// user.php

public function posts()
{
  return $this->hasMany(Post::class);
}

めちゃくちゃ単純です。

たとえば次のようなUserクラスがあるとします。

namespace App\Model;

class User
{
  ...
}

 

それを別のファイルから呼び出していたとします。

namespace App\Controller;

use App\Model\User;

class UserController
{
   echo User::class; // App\Model\User
}

ネームスペースを含んだクラス名を文字列として返すだけです。

だから上記は以下とまったく同じです。

namespace App\Controller;

use App\Model\User;

class UserController
{
   echo "App\Model\User"
}

知ってしまえば単純ですよね。

これで疑問は解決したでしょうか。

get_classという関数がPHP標準にありますが、こちらはネームスペースは返さずにクラス名だけなのが違いですね

https://www.php.net/manual/ja/function.get-class.php

Laravelなどフレームワークではnamespaceを設定するのが一般的です。

そのためClassName::classという記述が多くなるはずです。