PHP 9.0 소식입니다. 2023년 12월 출시예정
PHP에서 정의되지않은 변수처리에 대해 2018년 부터 php rfc 문서,메일링 리스등에서
논의 되고있었습니다.
1. 에러메시지 분류, 예외 타입 상세구분
2. 정의되지 않은 변수, 배열의 키값 사용시 엔진중단, 예외처리
3. 상수 중복선언시 에러 - 이건 2016년에 제안되었다가 거부먹고..ㄷ 이제하려고 한다네요
1번은 PHP 8.0부터 적용되었고
2번은 주의 -> 경고로 알림레벨을 올렸습니다. warning: Undefined variable 이거 가끔 보시죠?
3번은 새로 생성된것 무시였는데요.
9.0 부터는
정의되지 않은 변수사용시 치명적 에러를 내고 예외 던지게 변경됩니다.
정의되지 않은 변수는 잠재적 버그를 일으키니깐요.
3번항목도 에러로 처리.
좀더 개발자의 실수를 줄여서 버그를 예방하는것이 목적이네요.
PHP가 예전부터 지적받은게 동작이 일관성없다여서 고치려고 계속하고 있었다네요
PHP도 더 평범한 언어로 되어가는 중
https://wiki.php.net/rfc/engine_warnings <- 원래 8.0 때 도입하려고 했으나 미뤄졌다네요.
https://wiki.php.net/rfc/undefined_variable_error_promotion <- 올해 다시 정리한 RFC
https://php-rfc-watch.beberlei.de/
https://externals.io/message/117118 <- 관련 PHP 위원회 내부 메일링 리스트
---------------
그밖에 논의중인것은 PHP 표준 자료구조 재구현인데요
PHP 에는 array 라는 기본 연관배열말고
아준 오래전인 php 5.3버전 버전부터 Standard PHP Library(표준 PHP 라이브러리)에
객체기반인 표준 자료구조가 있습니다. 스택, 큐, 일반배열 등등
SPL 이게 구현이랑 설계가 잘못되서 성능,메모리 사용량에서도 안좋기로 악명높은데요ㅋㅋㅋㅋㅋ
아무도 안씁니다. 전문가들도 SPL 쓰지마라고 할 정도
그래서 콜렉션이라는 이름으로 Vector와 Deque 자료구조를 재대로 만들기로 했다네요.
Vector는 다른언어에 있는 배열과 같습니다. c++의 Vector, 자바의 ArrayList등등
https://wiki.php.net/rfc/deque 제안문서 - 2021년
https://wiki.php.net/rfc/vector 제안문서 - 2021년
Vector는 기존 php배열 대비 메모리 사용량 40% 감소, 객체라서 코드도 깔끔해지네요
예를들어 array_filter($items, 필터링규칙함수이름);
PHP 9.0부터는
$items->filter(필터링규칙함수이름);
$member
라는 부분을 위에 실행도 안하고
$test = getMemberInfo($member);
뭐 이런식으로라도 썼을때 $member가 위에서 선언된게 없었으니 (null이라도 선언하지 않았던 상황) 그때 에러를 뿜는다는 거죠?