왜 Underscore가 PSR-0 표준에서 디렉토리 구분 기호로 변환 된 이유는 무엇입니까?
문제
PSR-0 ( https ://github.com/php-fig/fig-tephards/blob/master/accepted/psr-0.md ) 표준 해당 파일의 디렉터리 별도로로 클래스 이름을 변환해야 함을 지정합니다.이름.
나 에게이 표준을 알지 못하는 사람이 클래스 이름에서 밑줄을 무시하게 사용하지 않는 사람이 그리고 갑자기 오토로더가 클래스와 모든 종류의 이상한 오류를 찾을 수 없을 때 많은 오류가 발생할 때 많은 오류가 발생하는 것처럼 보입니다.나타납니다 (예 : symmony2.1 매핑 오류 : class_parents () )
이 "기능"에 대해 어떤 종류의 이성도 (일부 도서관과의 역사적 호환성)가 있어야합니다.내 질문은 다음과 같습니다. 왜이 이유가 PSR-0 표준에서 소개 된 이유를 알고 있습니까?
해결책
밑줄은 PHP가 아직 네임 스페이스를 지원하지 않은 시간에 사용되었습니다."올바른"조직 된 프로젝트는 디렉토리 구조와 동일한 방식으로 파일의 네임 스페이스 규칙을 따릅니다.
프로젝트에서 파일을 구성하는 일반적인 "규칙"입니다.
디렉토리 구조가있는 경우 :
root
Name
Package
MyClass.php
.
used 님이 사용했습니다 :
class Name_Package_MyClass {}
.
그러나 이제는 네임 스페이스가 있으므로 다음이됩니다.
namespace Name\Package;
class MyClass { }
.
모든 사람들이 똑같은 것을 수행하는 것을 보장하는 스타일 가이드 라인을 코딩하는 것입니다.
그래서 PSR-0은 이전과 새 스타일의 새 스타일을 파일 이름으로 맵핑하는 것입니다.
다른 팁
PHP는 네임 스페이스를 지원합니다. 버전 5.3 이후 가장 먼저 가장 일반적인 규칙은 네임 스페이스 (디렉토리) 구분 기호로 밑줄을 사용하는 것이 었습니다. 예 : My_Project_ClassName
가 /path/to/my/My/Project/ClassName
로 매핑되었습니다.나는 거꾸로 호환성이 주된 이유라고 믿습니다.
PSR-0 표준은 몇 가지 특정 프로젝트를 위해 작성되었으며 반드시 자신의 프로젝트에 가장 적합한 옵션은 아닙니다.그들의 사이트에서 말했듯이 : "다른 사람들이 우리가하고있는 일을 채택하고 싶다면 그들은 그렇게하기를 환영합니다. 그러나 그것은 목표가 아닙니다."PSR-0은 매우 제한적이며 다른 사람들이 있기 때문에 사용하지 않을 것입니다.귀하의 프로젝트에서 실제로 원하는 것을 고려하고 그것이 당신에게 유익 할 것인지 여부를 고려하십시오.