네임 스페이스의 장단점은 PHP에서 포함 / 필요합니까?


20

최근에 PHP에서 네임 스페이스를 사용하기 시작했습니다. 내가 처음 보았을 때, 나는 그들의 구문이 못 생겼다고 생각했고 결코 사용하지 않았다. 그러나 자동 로더 (spl_autoload_register)를 작성하여 include / require 문을 다시 작성할 필요가 없도록했습니다.

나는 네임 스페이스를 좋아하지만 include / require 문에 비해 객관적인 이점이 있습니까, 아니면 동일한 목표를 달성하기위한 동일한 방법입니까?


1
네임 스페이스는 타사 라이브러리와의 충돌을 방지합니다.
Reactgular

1
현재 네임 스페이스와 관련하여 주요 이점은 자동 로딩입니다. 예를 들어, new \Vendor\Namespace\Class()메서드 나 클래스의 앞부분에 require 문없이 인라인 을 사용 합니다.
NobleUplift

3
많은 PHP 라이브러리는 네임 스페이스없이 자동로드를 사용합니다. PHP는 네임 스페이스를 필수로 만들어야합니다.
Reactgular

나로부터 논쟁이 없다. 이 모든 변경 사항을 여기 에 표시하고 싶습니다 .
NobleUplift

답변:


21

네임 스페이스는 자동로드 클래스만을위한 것이 아닙니다. 또한 이름 충돌을 방지합니다. 사실, 그것이 그들의 주된 목적입니다.

User응용 프로그램의 사용자에 대한 정보를 저장하기 위해 라는 클래스가 필요한 프로젝트가 있지만 플러그인이 User정보를 저장하기 위해 (다른) 클래스를 사용 한다고 가정 해보십시오 . 네임 스페이스를 사용하면 하나의 네임 스페이스 (예 :) 내에서 클래스를 만들고 MyApp플러그인에서 다른 네임 스페이스 ( CoolPlugin)를 사용할 수 있습니다. MyApp공간 내의 코드 는 단지 User(예를 들어 new User();)를 참조 할 수 있으며 , 따라서 CoolPlugin공간 에서의 코드는 가능하다; 각각 예상 결과를 얻습니다. 다른 네임 스페이스의 코드를 사용해야 할 경우 접두사 만 붙입니다. 예를 들어, CoolPlugin공간의 코드는 다음 UserMyApp통해 클래스에 액세스 할 수 있습니다.new \MyApp\User();

대안은 모든 클래스가 복잡한 이름을 필요로한다는 것이다 사방에 같은 class MyApp_Userclass CoolPlugin_User. 네임 스페이스를 사용하면 대부분의 시간을 단순화하고 항상 이름 충돌을 피할 수 있습니다.

편집 : "둘 사이에 성능 차이가 있습니까?"라는 질문에 대답하기 위해

의미있는 사람이 아닙니다. 벤치마킹하지는 않았지만 나노초 수준에는 차이가있을 수 있습니다. 즉, 초소형 성능 조정을 위해 코드 품질을 희생하는 것은 좋은 전략이 아니므로 네임 스페이스를 사용하지 않아야합니다. 비슷한 종류의 문제에 대한 벤치 마크는 PHPbench.com이 StackOverflow 답변을 참조하십시오 .

코드는 할 필요가 믿을 수 없을만큼매우는 시간에 민감한 당신은 상황의이 종류를 마이크로 최적화에 대해 걱정할 필요가 전에 (고주파 거래 또는 핵 반응을 관리하는 생각). 실제로 시간에 민감하다면 PHP와 같이 해석되는 언어가 아닌 또는 로 코딩해야합니다 .


1
+1 모든 프로젝트가 네임 스페이스를 필요로하지 않는 것처럼 보이기 시작한 다음, 프로젝트없이 작업하기 위해 해킹하는 것이 터무니해질 정도로 쉽게 커집니다. 네임 스페이스가없는 것은 기본적으로 클래스에 적용되는 모든 변수를 전역으로 선언하는 것과 같습니다. 더 큰 코드 기반이나 라이브러리를 자유롭게 사용하는 코드 기반에서는 완전히 혼란스러워집니다.
BrianH

1
위의 편집 내용을 참조하십시오.
elixenide

2
Large Hadron Collider 용 PHP 인터페이스를 만들고 있다고 언급 했습니까? 그렇지 않으면이 답변으로 충분하다고 생각합니다. 감사합니다.
NobleUplift

1
쿼크 스타 나 블랙홀을 만들지 마십시오! 기쁘다.
elixenide

1
걱정 마세요, 이상한 것만. 우리는 하드론 대포를 만들고 있습니다.
NobleUplift
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.