PHP 5.5 부터 지원되는 기능으로 클래스 이름뒤에 ::class 키워드를 붙이면 완전한 클래스의 이름을 알아 낼 수 있으며 특히, 전체 네임스페이스까지 알려주므로 매우 유용합니다.


라라벨은 프레임워크 내부에서 의존성 주입 및 동적 클래스 생성하는 부분이 다양하게 사용되고 있으며 다음과 같이 문자열로 클래스의 이름을 지정하고 있습니다.

<?php
namespace App;
 
class MyModel extends Model
{
}
CODE

이 클래스를 동적으로 사용하는 코드는 5.0 까지는 다음과 같이 문자열로 전달하였습니다.

$factory = factory('App\MyModel')->make();
CODE

라라벨 5.1 부터는 PHP 5.5 이상만 지원하게 변경이 되었으며 ::class 기능을 사용하도록 수정되어서 다음과 같이 사용합니다.

$factory = factory(App\MyModel::class)->make();
CODE

문자열을 사용할 때와 비교한 ::class 키워드의 장점은 다음과 같습니다.

  • ::class 키워드를 사용하면 코드 작성 시점에 클래스 이름이나 네임스페이스등의 오타를 바로 확인(클래스 이름에 오타가 발생할 경우 IDE 등에서 바로 체크 가능합니다.)할 수 있으므로 실수 여지가 적어지며 더욱 더 견고한 코드를 작성할 수 있습니다.
  • use 키워드로 사용할 네임스페이스를 지정했을 경우 App\MyModel 같이 FQN(Fully qualified name) 을 사용하지 않아도 되므로 코드가 간결해 집니다.

    use App\MyModel;
     
    $factory = factory(MyModel::class)->make();
    CODE