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(필터링규칙함수이름);

  • Lv24
    3번은 딱 이런거 인가요?

    $member
    라는 부분을 위에 실행도 안하고

    $test = getMemberInfo($member);

    뭐 이런식으로라도 썼을때 $member가 위에서 선언된게 없었으니 (null이라도 선언하지 않았던 상황) 그때 에러를 뿜는다는 거죠?
  • Lv24 ? Lv3

    맞긴한데 적으신건 2번 내용이예요 솔직히 저거 허용한게 이상한거죠

    php5버전대에서도 notice 문구로 뜨고있었으니까요.

     

    3번은

    const KR_NUMBER = 82;

    const KR_NUMBER = 100; // <- 그동안은 똑같은 상수있으면 무시하고 앞에꺼(82) 만썼는데

    이제부터는 fatal 에러요.

     

    비정상의 정상화가 되어가는 PHP

  • ? Lv3 Lv24
    아 제가 2번을 잘못 오타 냈네요 ㅠㅠ 2번 부분 질문드린게 맞아요 ㅎㅎ
  • Lv9
    php 보고 놀랐던 것이 undefined 변수를 써도 잘 넘어가서 신기했었습니다. 그런데, php가 대단히 똑똑해서 넘어가는 줄 알았는데, 알고보니 구렁이 담넘어가 듯 대충 넘어가서 결과도 대충 나오는 것이더군요. 웹 프로그램이니 망정이지 우주선 발사프로그램에 썼으면 발사도중 폭발해버리겠죠. ㅎㅎ
  • Lv9 ? Lv3
    라이믹스는 거의다 정리되긴 했던데 그누보드는 정적분석툴 돌려보니까
    정의되지않은 변수만 450개 넘고 변수 여기저기 전역으로 쓰고 난리네요

    그누는 sql 처리도 아직 문자열이라서 제 때 업데이트 안하면 펑펑 뚫리는ㄷ
    구식 ㅎㄷㄷ

    라이믹스가 좋군요.
  • Lv37

    8.0 → 8.1 → 8.2 없이 9.0으로 바로 넘어가는 건가요 ㄷㄷㄷ

  • Lv37 ? Lv3
    8.2는 올해나옵니다
  • 최근 버전업이 너무 빠른거같네요
    숨찹니다

     

    PHP는 쉬운게 장점이기도 한데말이죠

    다른언어 잘나간다는거 보고 따라하다

    귀에 코걸이 달려는격이 아닌지

  • ? Lv3

    저건 2016년에도 문제있다고 그랬어요
    그때도 반대가있었는데 엔진단 정리하고 2018년 부터 단계적으로 올라온...


    4년정도면 할만큼 유예했다는 분위기네요

    PHP 8.0에 적용하려다가 vm쪽 코드 문제있어서 이제해결하고 적용하려는거라ㄷ

     

    전 이제알았지만 레딧 등에서는 활발했나봐요

     

     

     

    그리고 실수를 줄이고 일관된 동작을하는 방향으로 가는거라서 특정 언어를 따라간다는건 없었어요.

    그 방향으로 가다보니 다른언어는 처음부터 그랬을뿐.

  • ? Lv3
    쉽다가 실수할여지가 많다가 되면 안되니까요
  • Lv8
    저는 c언어부터 배워서 그런지, 변수 초기화 안하고 쓰는것 극혐합니다.
  • Lv8 ? Lv3

    네네 안그래도 다른 언어 하는분들 많은곳에 이 소식을 전하니까 이제서야 바뀌냐면서
    여태 정의되지않은 변수가 사용됐다는 것에 놀라시더라고요.