[php] PHP에서 :: class는 무엇입니까?

::classPHP 의 표기법 은 무엇입니까 ?

빠른 Google 검색은 구문의 특성 때문에 아무것도 반환하지 않습니다.

콜론 콜론 클래스

이 표기법을 사용하면 어떤 이점이 있습니까?

protected $commands = [
    \App\Console\Commands\Inspire::class,
];



답변

이 기능은 PHP 5.5에서 구현되었습니다.

문서 : http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name

두 가지 이유로 매우 유용합니다.

  • 더 이상 문자열에 클래스 이름을 저장할 필요가 없습니다. 따라서 코드를 리팩터링 할 때 많은 IDE에서 이러한 클래스 이름을 검색 할 수 있습니다.
  • use키워드를 사용 하여 클래스를 확인할 수 있으며 전체 클래스 이름을 작성할 필요가 없습니다.

예를 들어 :

use \App\Console\Commands\Inspire;

//...

protected $commands = [
    Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];

업데이트 :

이 기능은 Late Static Binding 에도 유용합니다 .

__CLASS__매직 상수 를 사용하는 대신 static::class기능을 사용 하여 부모 클래스 내의 파생 클래스 이름을 가져올 수 있습니다 . 예를 들면 :

class A {

    public function getClassName(){
        return __CLASS__;
    }

    public function getRealClassName() {
        return static::class;
    }
}

class B extends A {}

$a = new A;
$b = new B;

echo $a->getClassName();      // A
echo $a->getRealClassName();  // A
echo $b->getClassName();      // A
echo $b->getRealClassName();  // B


답변

class 정규화 된 클래스 이름을 얻기 위해 php에서 제공하는 특별합니다.

http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name을 참조 하십시오 .

<?php

class foo {
    const test = 'foobar!';
}

echo foo::test; // print foobar!


답변

어떤 범주 ::class에 속하는지 궁금하다면 (언어 구조 등) 매우 간단합니다. 그것은 A의 일정 . PHP는 이것을 “특수 상수”라고 부릅니다. PHP에서 제공하기 때문에 특별합니다.

https://www.php.net/manual/en/language.oop5.constants.php


답변

다음을 사용하십시오.

if ($whatever instanceof static::class) {...}

구문 오류가 발생합니다.

unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'

그러나 대신 다음을 수행 할 수 있습니다.

if ($whatever instanceof static) {...}

또는

$class = static::class;
if ($whatever instanceof $class) {...}


답변