- "PHP는 형편없어요(PHP Sucks)" 라는 대부분의 비판은 2012년 이후의 PHP를 보지 않았기 때문
- PHP 5.4 이후로 많은 변화가 있었고, 그 이후의 언어 변화를 살펴볼 필요가 있음
PHP 5.4 이후의 주요 변화
- Traits (PHP 5.4)
- 상속 대신 컴포지션을 사용할 수 있게 해줌
- 모든 클래스에 포함할 수 있는 traits를 가질 수 있음
- 단축 배열 구문
array()를 쓸 필요 없이 대괄호를 사용할 수 있음
- 배열 구조 분해
- 배열을 임시 변수에 할당할 필요 없이 직접 변수에 할당할 수 있음
- 일급 가변 인자 함수
...구문을 사용하여 원하는 만큼의 인자를 함수에 전달할 수 있음
- 제너레이터
- 메모리 집약적인 작업을 메모리 효율적으로 수행할 수 있음
- 익명 클래스
- 새 파일을 만들 필요 없이 새 클래스를 만들 수 있음
- 다른 클래스와 마찬가지로 인터페이스를 구현할 수 있음
PHP 7 이후의 주요 변화
- 후행 쉼표
- 함수 호출이나 메서드 호출에 후행 쉼표를 추가할 필요 없음
- 화살표 함수
- JavaScript와는 약간 다르지만 언어에 좋은 추가 기능임
- Null 병합 연산자
- 값을 할당하기 전에 null 체크를 할 필요 없음
- Null 병합 할당 연산자 (PHP 7.4)
- null 병합 연산자를 단축하는 할당 연산자도 있음
- Weak 맵 (PHP 7.4)
- 배열보다 메모리에 훨씬 더 좋음
- 객체를 키로 사용할 수 있음
PHP 8이후의 변화
- Null 연쇄 연산자
- 메서드를 호출하기 전에 null 체크를 할 필요 없음
- 명명된 인자
- 선택적 인자를 건너뛰기 위해 null을 사용할 필요 없음
- 속성 (어노테이션)
- 클래스, 메서드, 인자 또는 속성에 어노테이션을 추가하는 데 사용할 수 있음
- 개선된 오류 처리
- false를 반환하기 위해 예외 변수가 필요하지 않음
- Match 문
- 길이가 긴 switch 문 대신 더 간결하고 읽기 쉬운 방법
- Enums (PHP 8.1)
- 값과 메서드가 있는 enum 클래스를 만들 수 있음
- 타입 힌트로 사용할 수도 있음
- 타입 안전성
- 타입 지정된 인자, 반환 타입, 공용체 타입, 교차 타입 등을 가짐
- enum에 대한 타입 힌트도 사용할 수 있음
- 생성자 프로퍼티 승격 (PHP 8.0)
- 장황한 생성자는 이제 그만
- 보일러플레이트 코드를 줄이는 데 도움이 됨
- 읽기 전용 프로퍼티 (PHP 8.1)
- 프로퍼티를 읽기 전용으로 표시하는 키워드 선언 가능
성능
- PHP 5.6에서 7로 넘어가며 400%의 성능 향상
- PHP 7에서 8로 넘어가며 20%의 성능 향상
- 대부분의 웹 개발 용도에 충분한 성능을 제공하며, 이보다 더 특수한 용도라면 특화된 언어 사용 권장
결론
- PHP는 죽지 않았고, 더 이상 최악이 아님. 2012년 이후 언어가 상당히 변화했으며, 이에 대한 의견을 수정할 때가 되었음.
- traits, 단축 배열 구문, 배열 구조 분해 등 다양한 기능의 도입으로 PHP는 보다 효율적이고 읽기 쉽고 유지 관리하기 쉬운 언어가 되었음.
- 여기에 오류 처리 개선, 속성 도입, 오랫동안 기다려온 enums의 도착 등을 더하면 PHP가 웹 개발을 위한 견고하고 신뢰할 수 있는 선택으로 발전했음이 분명함.
- 따라서 누군가 PHP가 최악이라고 말한다면, 그들은 과거에 머물러 있을 뿐이라고 자신 있게 말할 수 있음.
GN⁺의 의견
- PHP의 언어적 변화를 보면 더 이상 과거의 PHP가 아님을 알 수 있음. 하지만 아직도 많은 개발자들이 과거의 인식에 머물러 있는 듯함.
- 트레이트, short array 문법, 비구조화 할당 등 코드를 더 간결하고 가독성 있게 만드는 기능들이 많이 추가되었음. 이는 유지보수성 향상에도 기여할 것으로 보임.
- 제너레이터나 weak map 등 메모리 효율성을 개선해주는 기능들도 눈에 띔. 대용량 데이터 처리 시 유용할 듯함.
- Enum이나 타입 안전성 개선 등 언어적 완성도를 높이는 변화도 있었음. 클린 코드 작성이 더 수월해질 것으로 기대됨.
- 무엇보다 PHP 8에서의 성능 개선이 인상적임. 실제 벤치마크 결과 NodeJS, Go에 버금가는 성능을 보여준다고 함.
- 하지만 레거시 PHP 프로젝트를 현대화 하는 것은 쉽지 않은 과제임. 코드 마이그레이션에 많은 리소스가 들 수 있음.
- PHP는 여전히 워드프레스 등 많은 오픈소스 생태계의 기반 언어임. 단순히 언어적 특성만 보고 PHP의 가치를 폄하하기는 어려울 듯함.