::class
PHP 의 표기법 은 무엇입니까 ?
빠른 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에서 제공하기 때문에 특별합니다.
답변
다음을 사용하십시오.
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) {...}