0
0

More than 1 year has passed since last update.

【PHP】「::class」ってなにしてるの?

Last updated at Posted at 2021-08-21

phpで開発中になんとなく::classを使っていたけど、ちゃんと挙動を理解していなかったのでまとめる。

公式を見る

::class
class キーワードでもクラス名の解決を行うことが出来ます。 クラスの名前が ClassName になっているクラスの完全修飾名を取得するにはClassName::class を使います。 これは、名前空間付きのクラスに使うと特に便利です。

例14 クラス名の解決

<?php
namespace NS {
    class ClassName {
    }

    echo ClassName::class;
}
?>

上の例の出力は以下となります。

NS\ClassName

引用元: https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.class.class

クラスを指定する時にいちいち長ったらしい、名前空間とかを入力しなくても、「::classを使えば全部取得するよ」って感じ。

やってみる

<?php

namespace Sample\Test;

use Hello\Test\B;

class A
{
    //
}

echo A::class . PHP_EOL;
echo B::class . PHP_EOL;

出力結果↓

Sample\Test\A
Hello\Test\B

それぞれ、クラス名::classで完全修飾名が取得できている。

未定義のクラスでもエラーにならない

実は↑のBクラスはどこにも定義されていない。存在しなくてもuse文に書いてあるとおりに出力されてしまう。
namespaceのuse句では

実際に対象が使用されるまでエラーは検査されない

らしい。
引用元: https://qiita.com/mpyw/items/525231de63bbece2b3b5#namespace-%E3%81%8B%E3%82%89%E4%BD%95%E3%81%8B%E3%82%92-use-%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0