::class は、'::' が付いても分かるように静的クラス、newでインスタンスを作成しないクラスの専売特許でした。
それが、バージョンアップしたPHP8からクラスオブジェクトでも使えるようになりました。
get_class()と同じで、ただクラス名の文字列を返すだけのなんの見栄えもないですが。
::classは、静的なpublicプロパティで、クラス名の文字列が入ってます。
実行結果
これが、PHP8.0からnew演算子で作成したインスタンスでも使えるようになりました。
実行結果
インスタンスなのに '::' を使ってるところがポイント。'->' を使うと警告が発生します。
実行結果
当然、クラス名取得も失敗してNull。
内部では、public static $class とかで定義されてるんでしょうね?
または、::classのことをclassキーワードと呼ぶので、プロパティではなく特殊なものなのかもしれない。
これは、get_class()でも同じ結果になります。
実行結果
get_class() はインスタンスをパラメータに指定するので、静的クラス(static)では使えません。
::classがstaticとインスタンスの両方で使えるようになったので、この関数の存在意義がなくなりました。
PHP公式ドキュメント
最後に、PHP7で使うと致命的なエラーになります。
PHP7.4での実行結果
あまりにもかんたんすぎて、PHP7でも使えるんじゃないか? と思ってしまうほどなので念のため。
PHP公式ドキュメント