2017-05-09 1 views
0

php7에서 종속성 주입 컨테이너 또는 서비스 컨테이너에서 인스턴스를 검색 할 때 하드 코드 된 문자열 대신 ::class을 사용하는 것이 더 좋습니까? 그렇다면 왜? 예를 들어하드 코드 된 문자열 대신 :: 클래스를 사용하는 것이 더 좋습니까?

, 다음 바람직 라인은 다음과 같습니다

$diContainer->get(Namespace\SubNamespace\Class::class); 
$serviceContainer->get(Namespace\SubNamespace\Class::class); 

보다는 다음

$diContainer->get('Namespace\SubNamespace\Class'); 
$serviceContainer->get('Namespace\SubNamespace\Class'); 

내가 코드를 PHP 이후 빠른 컴파일 있다는 믿음으로 하드 코딩 된 문자열을 사용하고는 ::class 키워드를 해석 할 필요가 없습니다. 그러나, 나는 또한 ::class을 사용하는 많은 새로운 php7 코드를 보았습니다.

보다 광범위하게 정규화 된 클래스 이름이 필요할 때마다 일반적으로 하드 코드 된 문자열 대신 ::class을 사용하는 것이 더 낫습니까?

답변

3

::class을 사용하면 앨리어스 이름에서 정규화 된 이름으로 쉽게 이동할 수 있습니다. 예 :

use MyNamespace\SubNamespace\Foo\Bar\Baz; 

$container->get(Baz::class); 

약식 이름의 전체 클래스 이름을 반복하지 않아도되므로 편리합니다. 결과는 문자열입니다. 클래스 또는 네임 스페이스의 이름을 바꿀 경우 코드가 오류가 발생하기 쉽습니다. 위 예제에서는 여러 번이 아닌 한 번만 이름을 변경하면되기 때문입니다. 성능은 관심사 중 가장 작아야하며 실제 시나리오에서 성능 영향을 측정 할 수도 없습니다.

일반적으로 어림짐작 할 수있는 한, 하드 코딩 된 문자열은 가능한 의미가 없기 때문에 단순히 의미있는 불투명 한 얼룩임과 PHP 또는 IDE 또는 기타 도구를 사용하여 정적 유형 검사를 수행 할 수 없습니다. 다른 방법으로 당신을 도웁시다.

+1

감사합니다. 나는 특히 "의미없는 불투명 한 얼룩"추론을 좋아한다. –

관련 문제