배경
PHP 는 cgi 를 대체하기 위한 html 템플릿 + db 를 다루는 툴로 시작함.


그래서 프로세스 풀을 두고 요청 수행후 모든 변수, 리소스를 날리는 무상태성임
HTTP 도 무상태임.


PHP 코드는 위의 특성으로 인해 리소스 닫기랑 메모리 관리를 신경안씀

그냥 해당 스크립트실행이 모두완료되면 vm 이 종료하면서 db 연결도 끊어버림.


일단 여기까지 알면 됐고.

모던 PHP 는


php 에 컴포저로 패키지 관리 , 객체지향, include 안쓰고 네임스페이스 기반으로 파일 오토로딩을 하는거였음.

대략 2010년 전후로 이렇게 시작됨. PHP 5.3 

컴포저는 중복된 패키지를 설치하지 않아서 npm 처럼 용량 블랙홀에 빠지지않음.

타입들 다 넣고 에러랑 예외정리된건 PHP 8.0 임.
그래서 PHP 8 쓰라는것.


PSR 은 PHP 프레임워크들 지맘대로 만드니까 코딩표준이랑 인터페이스 지정함


로그, 캐시, http 핸들러, 미들웨어 규격, 시간라이브러리등등 표준 지정해놔서 서로 상호운용됨

근데 한 때 쓰던 코드이그나이터라는 녀석은 psr 생깐다고 지네 레포에 박아놓음


심포니, yii, 라라벨 정도가 되고 그외 마이크로 프레임워크들은 거의다 psr 준수함

psr 구현체로만 이루어진 laminas 라는 프레임워크도 있음.


해당 글에는 

https://gall.dcinside.com/mgallery/board/view/?id=github&no=84795

모던 PHP는 딱 이거임천재 지적 장애인함수가 전부 절car지향에 맞춰져있고 인자값 순서도 개판에 함수명도 아작나있고 Reflection도 반쪽짜리에 Enum도 Backed Enum이라는 개병신에 전역변수에다가 다 집어넣는 병신같은 설계도에gall.dcinside.com



enum 다른키에 값을 중복할수없는게 단점이라는데
아니 키가 다른데 왜 값이 같냐고...
<?php

enum UserRole: string
{
    case Admin = 'admin';
    case SuperUser = 'admin'; // PHP는 이 경우 Fatal Error를 발생시켜 중복을 막습니다.
}


enum LegacyStatus: int
   case
Finished = 100
   case Success = 100; // ❌ PHP Fatal Error 발생 
}

뭐 팀장겸 안전관리자 인거냐 그러면 enum 을 분리해야되는거 아님??
enum 을 스위치키로 쓰고있는건가 어캐 쓰길래... 저게 단점이 될까


enum 을 배열키로 못쓰는게 단점이긴한데

모던 php 는 클래스 쓰라고하지 배열가지고 지랄하는거 신경안씀.



2. php 는 기본은 비동기 없다고 봐야되.

프로세스 포크 뜨는거랑 fiber 가 있는데 i/o 함수들이 동기식이야.

그래서 별 소용없음. 그저 큐를 사용해서 쓰고있음.


swoole, 로드러너는 i/o 함수들을 다 재구현해놨는데 octane 설정하고 static 변수들있는 코드만 수정하면 씀.

리소스 안닫는 기존관행들을 알고있어서 전역에서 닫게끔 다해놓음.


csv 천줄짜리 안된다는데 10억줄 파싱도 그냥했는데 뭔...

phpmyadmin 에도 csv 로 데이터 내보내는모드있는데



심포니는 컴포넌트들 중심으로 만든 프레임워크고
처음에 스프링이랑 하이버네이트 따라한다고 만들어짐

2005년 출시 올해로 20주년임



라라벨은 php 프레임워크중에서는 느리지만 array_ 함수들 일관성있고 객체지향으로 만든다고

자체 컬렉션 만들었는데 이거 때문에 인기많음.

ORM 에서 데이터 다루기도 편함


심포니 하는 사람들은 라라벨 ORM 이 엑티브레코드라고 싫어함 얘네는 루비도 싫어함. 왜냐 루비는 개느리고

엑티브레코드는 실패한 디자인이라고 생각함.

그냥 PHP 판 nestjs 이고  벤치마크 지표에서 nestJS 랑 속도거의 같음.

처음에 스프링의 설정 xml 따라하다가 나중에 yaml 넣음 yaml 은 선택임





끝.




비동기는 이제 넣으려고함

https://externals.io/message/129004


1년동안 계속 논의중임


함수색깔 문제없어야한다는 사람들이랑 고랭모델, 스위프트의 구조적 동시성 이야기 하는중

PHP True Async RFC Stage 5 - Externals#externals - Opening PHP's #internals to the outsideexternals.io

그래서 모던 php 목적이 뭐냐?

PHP 코드 개선 운동임


프레임워크 표준화/ 배열을 해시맵으로 장난치는거 하지말자하고 (자바 si 에서 map 쓰는거 극혐하잖아? 그런거임)

클래스기반 객체쓰기, 패키지관리, MVC  등 아키텍처 잡고 개발



다른 언어대비 우위가 있냐?

딱히 없음 그게 문제임 메일링리스트 애들도 알고있음

근데 PHP 쓸거면 이렇게 쓰자 하는거임.