PHP (r20220720판)

문서 조회수 확인중...

파일:다른 뜻 아이콘.svg
은(는) 여기로 연결됩니다.
ISO 4217 코드가 PHP인 필리핀의 화폐에 대한 내용은 필리핀 페소 문서
필리핀 페소번 문단을
필리핀 페소# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
번 문단을
번 문단을
# 부분을
# 부분을
참고하십시오.





프로그래밍 사이트 선정 상위 점유율 프로그래밍 언어 목록
⠀[ IEEE Spectrum 2021 ]⠀
IEEE Spectrum에서 집계한 2021년 기준, 웹 분야 상위 10개 프로그래밍 언어
1
Python
2
Java
3
Javascript
4
C#
5
Go
6
HTML
7
PHP
8
Dart
9
Ruby
10
Rust
IEEE Spectrum에서 집계한 2021년 기준, 모바일 분야 상위 10개 프로그래밍 언어
1
Java
2
C
3
C++
4
C#
5
Swift
6
Dart
7
Kotlin
8
Scala
9
Objective-C
10
Delphi
}}}
{{{#!wiki style="display:inline-block; margin:0 0 -5px; min-width:25%"
⠀[ Stack Overflow 2021 ]⠀
{{{#!wiki style="display:inline-block; margin:0 0 -5px; min-width:25%"
⠀[ TIOBE 2022 ]⠀
TIOBE에서 선정한 2022년 2월 기준 검색어 점유율 상위 20개 프로그래밍 언어
1
Python
2
C
3
Java
4
C++
5
C#
6
Visual Basic .NET
7
JavaScript
8
PHP
9
어셈블리어
10
SQL
11
Classic
Visual Basic

12
R
13
Go
14
Fortran
15
Groovy
16
Swift
17
Ruby
18
Perl
19
MATLAB
20
Delphi /
Object Pascal

[ 21위 ~ 50위 펼치기 · 접기 ]
21
Objective-C
22
Prolog
23
Scratch
24
SAS
25
LISP
26
COBOL
27
Rust
28
Ada
29
Dart
30
Transact-SQL
31
PL/SQL
32
ABAP
33
VBScript
34
LabVIEW
35
Julia
36
Scala
37
TypeScript
38
Kotlin
39
Haskell
40
Lua
41
Apex
42
Visual FoxPro
43
Bash
44
Scheme
45
D
46
PL/I
47
Elixir
48
Logo
49
PostScript
50
Ladder Logic
}}}
{{{#!wiki style="display:inline-block; margin:0 0 -5px; min-width:25%">
⠀[ PYPL 2022 ]⠀
PYPL에서 선정한 2022년 3월 기준 검색어 점유율 상위 20개 프로그래밍 언어
1
Python
2
Java
3
JavaScript
4
C#
5
C/C++
6
PHP
7
R
8
Objective-C
9
TypeScript
10
Swift
11
MATLAB
12
Kotlin
13
Go
14
Rust
15
Ruby
16
VBA
17
Ada
18
Abap
19
Dart
20
Visual Basic
프로그래밍 언어 목록 · 분류 · 문법


TIOBE 선정 올해의 프로그래밍 언어 / PHP
[펼치기 / 접기]
2003년
C++

2004년
PHP

2005년
Java


[각주]



php
PHP: Hypertext Preprocessor
파일:PHP 로고.svg
최초 개발자
Rasmus Lerdorf
운영 및 개발
The PHP Group
(Zend by Perforce[1])
PHP 재단 (2021년 설립)

라이선스
PHP License
처음 버전
1.0 (1995.06.08)
최신 버전
7.4.30 (2022.06.09.)
역대 버전
7.4.0 alpha1
2019.06.13.
7.4.0 alpha2
2019.06.26.
7.4.0 alpha3
2019.07.11.
7.4.0 beta1
2019.07.25.
7.4.0 beta2
2019.08.08.
7.4.0 beta4
2019.08.22.
7.4.0 RC1
2019.09.05.
7.4.0 RC2
2019.09.19.
7.4.0 RC3
2019.10.03.
7.4.0 RC4
2019.10.18.
7.4.0 RC5
2019.10.31.
7.4.0 RC6
2019.11.14.
7.4.0
2019.11.28.
7.4.1
2019.12.18.
7.4.2
2020.01.23.
7.4.3
2020.02.20.
7.4.4
2020.03.19.
7.4.5
2020.03.16.
7.4.6
2020.05.14.
7.4.7
2020.06.11.
7.4.8
2020.07.09.
7.4.9
2020.08.06.
7.4.10
2020.09.03.
7.4.11
2020.10.01.
7.4.12
2020.10.29.
7.4.13
2020.11.26.
7.4.13
2020.11.26.
7.4.14
2021.01.07.
7.4.15
2021.02.04.
7.4.16
2021.03.04.
7.4.17
[skip]
7.4.18
2021.04.29.
7.4.19
2021.05.06.
7.4.20
2021.06.03.
7.4.21
2021.07.01.
7.4.22
2021.07.29.
7.4.23
2021.08.26.
7.4.24
2021.09.23.
7.4.25
2021.10.22.
7.4.26
2021.11.18.
7.4.27
2021.12.16.
7.4.28
2022.02.17.
7.4.29
2022.04.14.
8.0.20 (2022.06.09.)
역대 버전
8.0.0 RC 5
2020.11.19.
8.0.0
2020.11.26.
8.0.1
2021.01.07.
8.0.2
2021.02.04.
8.0.3
2021.03.04.
8.0.4
[skip]
8.0.5
2021.04.29.
8.0.6
2021.05.06.
8.0.7
2021.06.03.
8.0.8
2021.07.01.
8.0.9
2021.07.29.
8.0.10
2021.08.26.
8.0.11
2021.09.23.
8.0.12
2021.10.21.
8.0.13
2021.11.18.
8.0.14
2021.12.16.
8.0.15
2022.01.20.
8.0.16
2022.02.17.
8.0.17
2022.03.17.
8.0.18
2022.04.15.
8.0.19
2022.05.12.
8.1.7 (2022.06.09.)
역대 버전
8.1.0 Alpha 1
2021.06.10.
8.1.0 Alpha 2
2021.06.24.
8.1.0 Alpha 3
2021.07.08.
8.1.0 Beta 1
2021.07.22.
8.1.0 Beta 2
2021.08.05.
8.1.0 Beta 3
2021.08.19.
8.1.0 RC 1
2021.09.02.
8.1.0 RC 2
2021.09.16.
8.1.0 RC 3
2021.09.30.
8.1.0 RC 4
2021.10.14.
8.1.0 RC 5
2021.10.28.
8.1.0 RC 6
2021.11.11.
8.1.0
2021.11.25.
8.1.1
2021.12.16.
8.1.2
2022.01.21.
8.1.3
2022.02.17.
8.1.4
2022.03.17.
8.1.5
2022.04.14.
8.1.6
2022.05.12.
8.2.0 Alpha 1 (2022.06.09.)
역대 버전
-
-

링크
파일:홈페이지 아이콘.svg 파일:트위터 아이콘.svg
1. 개요
2. 특징
2.1. 장점
2.2. 단점
2.3. 다른 웹 서비스 개발 기술과의 비교
3. 레거시와 현대화
3.1. 모던 PHP
4. 구동방식
5. 개발
5.1. PHP 개발 프레임워크
5.2. 각종 ORM
7. PHP 코딩 표준안
8. 업데이트
8.1. PHP 5
8.2. PHP 7
8.3. PHP 8
8.3.1. 8.0
8.3.2. 8.1
8.3.3. 8.2
8.4. PHP 9
9. 기타
10. PHP로 작성된 프로그램 목록




1. 개요[편집]


대표적인 서버 사이드 스크립트 언어로 전 세계 수많은 웹 시스템의 기반이 되는 언어. 비슷한 언어로는 ASP, JSP 등이 있다. C-like 문법[2]으로 되어 있고, CGI 보다 나으며, Perl 처럼 배열이 연관배열이라 자료구조가 간편하고, 웹 페이지 제작시 기본적으로 웹관련 함수들이 많아 생산성이 높다는 점에서 사용자 및 사용처가 많다. 1995년 라스무스 러돌프가 처음 공개했고, 지금은 The PHP Group 이라는 단체에서 개발 및 관리를 맡고 있다.

PHP라는 이름은 원래 Personal Home Page Tools였는데, 지금은 PHP: Hypertext Preprocessor의 재귀 약자를 사용하고 있다.

워드프레스, 미디어위키 등의 많은 애플리케이션이 PHP로 작성되어있다. 웹서핑을 하다보면 쓰는 곳이 많다. 한국에서 점유율이 높은 CMS인 라이믹스, 그누보드(영카트), XpressEngine가 PHP로 제작되었으며, 중소 개인 쇼핑몰과 인터넷 커뮤니티, 언론사 등 대다수 웹사이트들이 PHP 로 되어있다.


2. 특징[편집]


PHP는 Perl 언어의 영향을 많이 받았는데, 변수 이름 앞에 $를 붙이는 점 (예: $abc), 펄처럼 배열을 다룰 때 연관배열로 작동하며, 변수에 []를 붙여서 새롭게 배열에 추가하거나 배열을 생성할 수 있다는 것, 문자열끼리 결합할 때 점(.) 연산자로 결합하는 것이 펄에서 영향을 받은 것이다. (예: "Hello, " . "world!" = "Hello, world!" 이다). 다른 프로그래밍 언어에서 하던 대로 덧셈 기호(+)로 문자열을 결합하려하면 잘못된 결과가 나온다. PHP에서는 덧셈 기호 앞뒤에 있는 두 문자열을 숫자로 변환해서 계산하기 때문이다. (예: "Hello, " + "world!" = 0)[3]

PHP의 큰 특징 중 하나는 HTTP 프로토콜과 마찬가지로 상태를 유지하지 않는다는 점 무상태성(Stateless)이다. PHP 웹 서버에 요청을 하면, 해당 스크립트를 실행한 뒤 완전히 종료하고, 그 다음 새 요청이 들어오면 처음부터 다시 시작하는 방식이다. 이 때문에 PHP에서 싱글톤 패턴을 구현하면, 객체는 1회 요청에 의한 작업이 끝날 때까지만 유지된다. 이러한 특성으로 인해 메모리 관리가 쉽고, 사용자(브라우저 요청)의 잘못된 입력으로 오류가 났을때 개별적으로 처리하게 되므로 안전하지만, 상태를 유지할 수 없기에 PHP로는 DB 커넥션 풀을 만들 수가 없다.[4]

PHP 파일은 <?php ... ?>로 이루어진 스크립트 실행 영역이 있다. <? ... ?>는 권장하지 않는다. 이렇게 줄여 쓰는 방식은 기본적으로 비활성화라서 쓰려면 php.ini에서 short_open_tags의 설정을 on으로 바꿔줘야 한다. 줄여 쓰는 방식이 비활성화인 이유는 XML의 <? xml version="1.0" ?>과 같은 구문과 충돌하기 때문이다. PHP가 처음 나왔을 때는 HTML만 있어서 줄여 쓰는 방식이 문제가 없었지만, HTML에 XML의 문법을 도입한 XHTML 1.0이 나오면서 충돌이 일어났고, 결국 저 옵션이 기본적으로 꺼져 있도록 변경된 것. 다행히 HTML5에서는 XML 문법이 빠졌다. 변수 하나만 쓴다면 <?=$var?> 형태로 줄여 쓸 수 있다. 원래 short_open_tags 설정값이 off라면 이것도 같이 꺼졌지만, PHP 5.4부터는 short_open_tags 설정값에 상관없이 항상 <?=$var?> 형태로 쓸 수 있게 되었다.

아주 옛날에는 WYSIWYG 기반 에디터를 사용할 때 <?php ... ?>로 이루어진 스크립트 실행 영역을 올바르지 않은 태그로 잘못 인식하는 문제를 회피하기 위해 <script language="php"> ... </script>[5] 태그를 사용하기도 했다. 그렇지만 이 태그는 JavaScript에서 쓰는 것과 혼동될 수 있어서 레거시 요소로 분류되었다가 PHP 7부터 삭제 되었다.

PHP 위원회는 새 버전의 기능을 RFC 문서로 제안받고, RFC에 올라온 사항들을 찬반 투표에 부쳐 찬성이 과반을 넘길 경우 기능을 추가한다. 레딧, PHP 메일링 리스트 등에서 토론이 이루어진다. 새 기능 RFC 제안 사항 찬반 투표 진행과 결과를 공개하는 사이트.

PHP는 오픈 소스이며 포팅된 곳이 많아 거의 모든 웹 서버에서 실행할 수 있다. 유닉스(리눅스), 윈도우, macOS 모두 지원한다. PHP 공식 사이트에서는 소스 코드를 공개하고 있고, 리눅스 등의 유닉스 계열 OS에서 컴파일하는 방법을 알려주고 있다. 대부분의 경우 직접 컴파일을 할 필요는 없는데, 유명 리눅스 배포본의 공식 저장소에는 PHP 설치 패키지를 기본으로 제공하기 때문이다. 만약 없다면 Packagist 같은 패키지 저장소(repository)에서 각 OS의 환경에 맞는 PHP 설치 패키지를 찾을 수 있다. 별도의 저장소를 추가하면 버전도 입맛대로 설치할 수 있다. PHP 5.5 버전부터 64비트 버전이 나왔다. 윈도우용은 PHP 공식 사이트에서 직접 실행 파일로 만들어서 제공한다. 윈도우용의 경우 동작 방식의 차이 때문에 IISNGINX에서 돌리는 PHP는 Non-Thread Safe 버전으로, 아파치에서 돌리는 PHP는 Thread-Safe 버전으로 따로 나온다. 맥OS는 이미 설치가 되어 나오는데, 더 높은 버전을 설치하고 싶으면 맥OS의 패키지 관리자인 Homebrew(홈브루)를 통해서 설치할 수 있다.


2.1. 장점[편집]



  • PHP는 간편하게 서버에 올릴 수 있다. PHP 인터프리터에서 PHP 파일을 실행할 때마다 파일 내용을 확인 후, 바뀐 부분이 없으면 캐시[6]를 실행하고, 바뀐 부분은 다시 해석한 뒤 캐시 하는 방식으로 작동해서 업로드만 하면 되므로 간편하다.

  • 위의 특징으로 인해 프로젝트가 커지면 빌드시간이 늘어나는 다른 언어들과 달리 PHP는 개발이나 배포할 때 빌드가 필요 없다.

  • PHP는 요청할 때마다 새로 시작하기 때문에 오류에 대해 덜 민감하다. 예를 들어 다른 언어로 작성한 서버는 어떤 사용자가 잘못된 요청을 보내서 프로그램이 실패하면 해당 서버가 멈추게 되어 재부팅이 필요할 상황이 올 수도 있는데, PHP는 새 요청이 왔을 때 프로그램을 처음부터 시작하므로(Stateless) 사용자가 올바른 요청을 보내면 정상 작동한다. 오류를 개별적으로 처리하는 것이다.

  • PHP는 등장 당시 C언어로 웹서버를 작성하는 CGI에 비해 배우기 쉬웠고, 사용자에게 보여지는 HTML 페이지의 템플릿도 지원해서 쉽게 웹서버를 만들 수 있었으며, 웹 개발에 필요한 관련 함수들이 내장되어 있어서 사용자가 급격하게 늘어났다.


2.2. 단점[편집]



  • 전체적으로 잘 설계된 언어는 결코 아니다. 예를 들어 내장함수나 인자 이름 규칙에 일관성이 부족하다. 라스무스가 처음 PHP를 만들 당시에는 템플릿 언어로 시작했다가 PHP 2.0 이후에 본격적인 프로그래밍 언어로 바뀌었기 때문이다. 기본적인 이름은 C언어 함수에서 가져오고, 그 이후 다른 함수들이 추가되었는데, 그러다보니 이름과 분류가 제대로 되어있지 않았다. 이것 때문에 많이 까였다. 7.0 이후에는 계속 버전업하면서 바뀐 이름 규칙에 맞게 수정한 함수를 지원하는 등[7] 점차 나아지는 추세다.

  • 정의되지 않은 변수(undefined)를 쓸 수 있었다. 다만 이 단점은 최근 버전에서 해결되었는데, PHP 8.0부터는 인터프리터 알림에서 경고로 상향했다. PHP 9.0부터는 정의되지 않은 변수를 쓸 수 없다(즉, 에러 처리). 정의되지 않은 변수를 쓰는 것이 단점인 이유는, 없는 변수를 써도 무시하기 때문에 개발자가 실수를 하게되기 때문이다.

옛날 버전들은(PHP 7.4까지) 정의되지 않은 변수는 null로 형변환하고, 정의되지 않은 변수를 사용했다는 알림만 보여줬다. 알림은 에러 설정을 E_ALL로 해놔야 표시된다[8]. 느슨한 ==가 아닌 ===를 쓰더라도 같다는 결과가 나온다. 이를 확인하려면 get_defined_vars 함수(지역 변수) 또는 $GLOBALS 변수(전역 변수) 등을 통해 선언된 변수의 목록 배열을 얻어온 다음, 그 배열에 변수가 포함되어 있는지를 확인해야 한다. 그러나 null과 구분되지 않는 특성을 이용해 보통은 isset 함수로 체크한다.

  • 스크립트 언어라는 특성상 인터프리터 방식을 사용하는 만큼 성능에 한계가 있었으나, PHP 8.0 버전부터는 인터프리터에 JIT이 지원되어 기존 7.4 대비 2배 가량의 성능 향상이 있다.


2.3. 다른 웹 서비스 개발 기술과의 비교[편집]


종종 Java 진영의 JSP와 비교되기도 했었다.

한국의 SI 업계에서는 PHP 개발자에서 JSP 개발자로 넘어가는 일이 상당히 많았는데, 공공기관 프로젝트를 따내려면 정부에서 만든 자바 기반의 전자정부프레임워크를 써야 가산점을 받아 유리해지기 때문이다. 민간의 대규모 서비스는 성능과 유지 보수성 등을 이유로 Java 기반을 요구하는 경우가 많다.

일본이나 유럽 특히 프랑스에서는 PHP를 많이 쓰고 있다.

2021년 현재에는 다음과 같은 기술들이 전 세계 웹 서비스 개발에 주로 사용되고 있다.


3. 레거시와 현대화[편집]


2000년대 초반 국내에서는 네이버도 PHP를 사용했다. 그 당시 PHP는 구동 속도도 느린데다 객체지향을 지원하지 않았기 때문에 협업이 힘들다는 이유로, 2000년대 중반 Java 계열의 JSPC\# 계열의 ASP.NET으로 옮겨갔다. (PHP에서 제대로 된 객체지향이 등장한 것은 2009년 발표된 PHP 5.3부터이다). 페이스북은 이전에는 PHP를 주 언어로 사용하다가 2014년 자사에서 PHP 기반으로 개발한 hack이라는 언어를 사용한다.[9]

과거 PHP에서는 MVC 패턴[10] 적용이 어려웠지만, PHP 5.3부터 객체지향 프로그래밍 요소가 들어가기 시작해서 나아졌고, 각종 프레임워크가 개발되었다. 그러나 오래된 CMS들은 이미 절차지향형으로 작성되어 있었고, 그 밖에도 소규모 프로젝트에서는 관리가 힘든 경우가 많았다. 예를 들어 제로보드는 SQL 쿼리에 들어갈 변수들에 "준비된 실행문"(Prepared Statement)이라는 안전한 방식을 사용하지 않았는데, 그 결과 SQL 인젝션 공격을 받아 뽐뿌 개인정보 해킹 사건 등이 발생했다.


3.1. 모던 PHP[편집]


2000년에 나온 PHP 4까지는 클래스가 있어도 없는 것이나 다름없었고 순수하게 스크립트 형태로 작성된 코드들이 많았는데, PHP 5.3 이후로는 점점 객체 지향 프로그래밍이 사용되기 시작했다. 그래서 PHP 최초 개발 당시[11] 주요 사용층이었던 사람들 입장에서는 PHP의 장점인 낮은 진입장벽이 높아지고 있다고 우려하는 사람들도 있었을 정도[12]. 그래서 5.3 버전까지를 고전 PHP, 5.4~5.6는 과도기, 7.0 이후 버전은 현대 PHP로 분리해서 보는 시각이 있다.

PHP 프레임워크들이 등장하면서 MVC 패턴 및 HMVC 등이 적용되면서 협업관련 문제는 대부분 해소되었고, PHP 7부터는 좀 더 확실한 OOP 언어에 가까워졌다. 현존하는 문제들의 대다수는 아직도 5.x 대에서 벗어나지 못하는 절차지향적으로 작성된 고전 CMS들과 여기에 익숙해져 새로운 것을 배우지 않는 사용자, 즉 개발자들이 원인이다. PHP Framework Interop Group에서 제안한 PSR 규칙[13]으로 인해 많은 프레임워크가 정형화되었다. 요즘 PHP 개발에서는 PSR을 지키는 것이 권장된다.

웹호스팅 쪽에서는 PHP가 강세이다. 대부분의 웹호스팅이 PHP를 기본적으로 지원하고 있다. 다만 최신 버전 지원이 늦고 PHP 설정을 바꾸기 어려운 경우가 많다. 가상 서버 호스팅이나 전용 서버 호스팅을 사용하면 이런 문제에서 자유로울 수 있다.

PHP는 느슨한 타입 검사와 $GLOBALS, extract() 같은 전역변수 접근 등으로 보안 취약점이 많이 지적되었다. 타입 강화는 PHP 7부터 개선된 부분이 있지만, 초창기부터 이어져 온 특유의 함수 이름 비일관성은 여전히 고쳐나가는 중이다. PHP 8.1부터는 일부 문제가 되었던 $GLOBALS 변수 사용을 인터프리터 차원에서 제한하기로 바뀌었다.

모던 PHP라고 하는 PHP 7.0 이 나오기 이전까지는 제대로 된 디자인 패턴이나 프레임워크가 확립되지 않았고, 이로 인해 보안 따위는 가볍게 날려버린 코드를 짜는 방법들이 있어서 그걸 쓰는 개발자들이 많았는데, "PHP는 안전하지 않다"라는 이미지를 심는 데 일조하였다. 결론을 말하자면, PHP 개발자는 언어나 IDE 도움을 못받고 '스스로' 코드의 보안성에 대해 신경을 써야 한다는 이야기다. 요즘에는 CMS나 프레임워크 사용으로 보안 문제가 상당히 줄었다.

웹에 올라와 있는 PHP 비판 문서는 유심히 봐야 한다. 잘못된 내용을 적을 때도 있고, 현시점에서 해결된 문제도 떡하니 올려놓는 경우도 많다. 2015년 7.0이 나오기 이전 당시 버전인 5.x 시절에 작성된 글이 많다. 특히 PHP: 잘못된 디자인의 프랙탈의 번역본이 퍼져 있는데, 이 글은 2012년에 작성되었고 PHP 7.0 에서 많은 결함이 수정되었기 때문에 맞지 않는다. 2017년에 슬랙에서 작성한 PHP의 장점과 단점 PHP에 대해 진지하게를 참고하는 편이 낫다. 물론 이것 마저도 PHP 8에서 몇가지 개선되었다.

다른 언어 플랫폼처럼 모듈화 생태계를 지원하기 위해 Composer라는 의존성 관리 도구가 나와 패키지 구성과정을 간소화 할 수 있게 되었다. PHP 패키지는 주로 패키지스트에서 찾을 수 있다. https://packagist.org/


4. 구동방식[편집]



  1. PHP 는 사용자가 웹을 통해 요청하면 (터미널에서 입력시 3번으로)
  2. 웹 서버는 프로세스 풀에서 기존 프로세스를 찾거나 새로 생성해서 SAPI 인터페이스를 통해 요청을 전달한다.
  3. PHP 엔진에서 해당 파일의 opcode(실행 코드)가 있는지 확인한다.
  4. PHP 8.0부터 JIT 기능을 켰을때는 opcode를 JIT에서 바이너리로 바꾼다. PHP 인터프리터를 건너띄고 실행한다.
  5. opcode가 없으면 PHP 소스 파일을 opcode로 변환한다. 파일이 있으면 opcode 를 실행하고 PHP VM을 거쳐서 실행된다.
  6. 사용자의 요청을 수행
  7. 사용자 프로그램이 종료된다. 종료되면서 gc가 수행되고, 모든 객체와 변수등이 메모리에서 삭제된다.[14]

이하반복
  1. PHP 엔진은 리눅스에서 1프로세스당 1엔진이며, 1 ~ N번의 사용자 요청을 수행하고 웹서버의 프로세스 관리에 따라 프로세스가 종료된다. [15]

윈도우 서버의 IIS NTS 모드와 리눅스에서 TS 방식은(위에 기술한 것) 조금 다른데 자세한 내용은 PHP intenals Books 에 나와있다.https://www.phpinternalsbook.com/php7/extensions_design/php_lifecycle.html [16].

PHP 문법에는 각종 타입들이 있는데, 실행중에 체크한다 (런타임 체크).[17][18]

페이스북은 자사 서비스를 개발하다가 당시 PHP의 성능 문제를 해소하기 위해 오픈 소스HipHop for PHPHipHop Virtual Machine(HHVM)을 개발했다. 전자는 PHP 코드를 C++ 코드로 변환한 뒤 컴파일하는 방식이고, 후자는 Java와 비슷하게 JIT 컴파일링을 하는 방식이다. 현재 HipHop for PHP는 개발을 중단하고 HHVM만 개발하여 내놓고 있다. 참고로 페이스북은 HHVM을 개발하면서 hack이라는 프로그래밍 언어도 만들었는데, hack 언어로 작성한 코드는 HHVM으로 실행한다.

PHP 7.0에서 인터프리터 문법 파서를 재작성 했는데, AST 파서를 도입해서 HHVM의 강점인 속도를 따라잡았다. 2020년 말에 출시된 PHP 8부터는 인터프리터에 JIT 을 도입하여 JIT 구동 여부에 따라 7.4 대비 2배의 성능 향상이 있다 (벤치마크 ). JIT은 위에 실행과정 설명 중 4번의 opcode 를 기계어로 컴파일을 하기 때문에 php 엔진에서 opcode를 인터프리트 할 때보다 보다 빨라지는 것이다.

PHP-FPM이라는 것도 있는데, 웹 서버 프로그램[19]과 통신하는 모듈 형태이다. PHP로 HTTP/2를 지원하기 위해서는 PHP-FPM으로 구동해야 한다.


5. 개발[편집]


통합 개발 환경(IDE)을 안 쓰는 경우가 많은데, 배포 전에 오류를 잡고 개발 생산성을 높이기 위해서는 IDE를 쓰는 것이 좋다. VS Code 같은 텍스트 에디터에 디버깅을 위한 Xdebug를 설치해서 사용하는 방법도 있다. 특히 VS Code는 MS가 전폭적으로 밀어주고 있어 각종 플러그인의 숫자도 늘어나는 중이다.

IDE 중에는 NetBeans 와 JetBrains 사에서 개발한 유료 IDE PhpStorm이 편리한 코드 에디터, 각종 프레임워크 지원, DB 연결 통합, 신속한 서포트에 힘입어 점유율을 늘려가고 있다. PhpStorm은 PHP뿐만 아니라 JavaScript CSS등 웹 관련 기능들까지 전부 포함하고 있다.


5.1. PHP 개발 프레임워크[편집]


프레임워크란 개발의 방향성을 잡을 수있게 도와 주는 틀이 되는 소프트웨어다. 웹에서는 주로 MVC 아키텍처를 많이 쓴다.

  • 라라벨: 첫 등장 이후 PHP 프레임워크 중에서 인기 많고 점유율이 높은 프레임워크이다. 심포니 프레임워크의 모듈도 포함되어 있다.
  • CakePHP: 일본의 루비온레일즈에 영향을 받아서인지 일본에서 가끔쓰인다 2018년쯤 들어서 쓰지않는 추세다.
  • CodeIgniter(코드이그나이터) : MVC 패턴이 있으나 3버전까지는 REST API지원이 되지않고, PHP 5.2를 지원하기위한 하위호환성 때문에 클래스설계, 로딩방식에 제약이 심하다. 4 버전 이후로는 PHP 7 문법으로 다시 작성되었고 PSR 규칙이 몇 가지 적용되어 약간이나마 나아진 모양. 그러나 코드이그나이터터 제작자 측에서 PSR 규칙을 모두 따르지 않겠다고 해서 라이브러리 사용에 제약이 있긴하다.
  • Symfony: 2005년 프랑스 개발자가 만든 심포니는 자바 진영의 스프링프레임워크의 설계에 영향받아 모듈화가 잘 되어있는 프레임워크이다. 공식 validation 스펙마저 자바의 JSR 명세를 따를 정도이다. 유럽, 특히 프랑스에서는 점유율이 아주 높다.
  • Slim Framework : REST API에 특화된 프레임워크로 주로 API 라우팅용으로 쓰인다.
  • Reasonable
  • phalcon: C 익스텐션으로 개발된 풀스택 PHP 프레임워크
  • zend
  • FuelPHP
  • Yii
  • PHPixe


5.2. 각종 ORM[편집]


ORM 이란 SQL 쿼리를 사용하지 않고 DB 작업을 객체지향적으로 할 수 있게 도와주는 개념이다. 물론 만능은 아니라서 복잡한 DB작업은 SQL을 써야 할 경우도 있고 기본적으로 DB를 잘 알아야 한다.

ORM 구현 라이브러리
  • Eloquent 엘로퀀트 ORM - 라라벨의 기본 ORM 이며 라라벨 없이 분리해서 사용하는것도 가능하다. 루비온레일즈의 ORM처럼 엑티브레코드 패턴이다.
  • 독트린 ORM - 자바의 JPA처럼 데이터 맵퍼패턴으로 설계되었다.
  • 그밖에 RedBean ORM 등이 있다.


6. 문법[편집]


파일:나무위키상세내용.png   자세한 내용은 PHP/문법 문서를 참고하십시오.



7. PHP 코딩 표준안[편집]


PHP 5.3 이후 PHP 진영에도 프레임워크들이 나오면서 코딩표준과 프레임워크들 호환에관해 PHP 프레임워크 그룹에서 규칙을 정했다.

PSR 0 ~ 17가 있는데 PSR 4와 12가 주요 규칙이고 PSR 4는 PHP 클래스를 자동으로 불러오는 '오토로드' 기능이며 Node.js의 NPM과 같은 패키지 의존성 관리자인 컴포저의 기능중 하나이다.

그리고 PHP The Right Way라는 문서가 인정받고 있다.


8. 업데이트[편집]


PHP의 공식 업데이트는 7.0이 나온 이후로 최신 버전 및 하위 2개 버전까지만 업데이트를 유지한다. 예를 들어 8.1이 나오면 8.0과 7.4는 업데이트를 지속하고, 7.3은 업데이트를 종료하는 형식이다. 그러나 많이 쓰이는 몇몇 리눅스의 배포판(대표적으로 레드햇 리눅스우분투)은 PHP의 업데이트가 종료된 이후에도 자체적으로 계속 보안 업데이트를 지원한다. 이런 유명 배포판들은 보통 서버용으로 써서 지원 기간이 길고(특히 LTS로 부르는 장기지원 버전), 호환성을 위해 해당 메이저 버전 내의 공식 저장소 PHP 버전을 바꾸지 않기 때문에 자체적으로 보안 업데이트를 지원하는 것이다. 그렇더라도, 보안이 강화된 최신 버전을 쓰는 것이 좋다.


8.1. PHP 5[편집]


  • 2005년 11월 5.1 PHP 에서 다양한 DB를 연결할수있는 PDO(PHP Data Object)가 도입되었다.
  • 2007년 11월 5.2 JSON을 처리할 수 있는 함수가 내장되었다.
  • 2009년 6월 5.3 객체지향에서 클래스파일 위치를 구분하기위한 네임스페이스, 익명함수 문법이 추가되고 메모리 회수를 위한 가비지컬렉터에서 순환 참조 문제가 일부 해결되었다.[20]
  • 2012년 3월 5.4 업데이트된 기능[21]이 다른 언어에선 이미 지원되는 것들이지만, 제작진들의 모르쇠로 인해서 환호성과 탄식이 교차하고 있다. 새 기능 소개 그리고 상속 없이 클래스들을 모듈화할 수 있는 트레이트 문법을 지원하게 되었다.

  • 2013년 6월에 5.5가 배포되었다. yield 및 finally 키워드 지원, 보안성 강화, 배열 지원 강화 등을 골자로 하고 있다. 보안상의 문제 때문에 mysqli 및 PDO를 제외한 오래된 MySQL 함수는 비권장(deprecated) 요소였다가 PHP 7에서는 완전히 제거되었다.

  • 2014년 8월에 5.6이 배포되었다. $HTTP_RAW_POST_DATA가 비권장 요소가 되었고, 2GB 이상의 파일 업로드가 가능해졌다. 또한 지수 표현을 위해 별도의 함수를 사용했었으나 **라는 연산자로 추가되었다.

PHP 5가 2004년에 나온 후 거의 10년을 5에서 머물렀다. 사실 2005년부터 PHP 6를 개발하기 시작했지만 취소되는 바람에 10년간 우려먹게 된 것이다. PHP 6은 처음부터 유니코드를 기반으로 작동되도록 설계 되었고, 이 때문에 대단히 많은 변경 점이 예고된 버전이었다. 그러나 하필 인코딩으로 UTF-16을 선택한 것이 발목을 잡았다. 개발하는 사이 웹에서 유니코드 인코딩은 UTF-8이 대세가 되었기 때문이다. 이 실책으로 개발자들의 참여가 줄어들었고, 개발에 난항을 겪다가 2010년 5월에 PHP 6 프로젝트는 취소되었다. 그리고 PHP 6에서 논의되던 상당수의 기능은 PHP 5.4로 흡수되었다. UTF-8이 기본 인코딩이 된 것도 5.4 버전부터이다.

하지만 보안 문제가 드러나고 있는 PHP 5로 장기간 버티는 것은 아무래도 무리가 많았다. 엔진이 10년간 바뀌지 않은 채 유지되다 보니 다른 스크립트 언어가 발전하는 사이에 속도나 기능의 차이가 벌어지게 된 것이다. 작은 개선들은 있었지만, 근본적인 개선은 무리였다. 결국, 2014년 PHP 6는 건너뛰고 차기 버전으로 PHP 7을 개발하겠다고 발표한다. PHP 7은 PHP NG(Next Generation)라는 새로운 구현체였는데, 덕분에 2015년 6월 배포된 PHP 7 알파 1 버전은 PHP 5.6에 비해 약 70%, PHP 5.5보다 거의 2배의 성능 향상을 보여, HHVM 못지않은 성능을 보여줬다. 새로운 기능을 추가하면서도 기존 PHP 5와의 호환성을 최대한 유지한 상태로 넘어갔기 때문에 혼란은 많지 않았다.

  • 2018년 12월 31일, 2018년 12월 6일에 업데이트가 된 PHP 5.6.39를 끝으로 PHP 5.6 지원이 완전히 종료되었다. 다만 마지막 업데이트는 2019년 1월 10일에 업데이트가 된 PHP 5.6.40이다. 이로써 PHP 5.x 버전은 15년간의 길고 긴 역사를 마감하게 되었다.


8.2. PHP 7[편집]


PHP 7의 발표 행보는 상당히 빠르다. 2015년 6월 11일에 알파 1이 나온 이후 한 달 만인 7월 10일에 베타 1이 나왔고, 8월 18일 릴리즈 후보안 1(RC1)이 나왔다. 12월 3일에 일반 이용자용(GA)이 나왔다. PHP 7은 PHP 5.6보다도 2배 빠른 성능이고, 함수 인자와 반환 값에 타입을 지정할 수 있게 되었다.

  • 2015년 12월 3일, 드디어 PHP 7 정식 버전이 발표되었다. #
    • AST 파서가 적용되었고 메모리 사용량이 1/5로 감소했다.
    • 실제로 여러 사용자와 벤치마크에 의하면 PHP 7은 이전보다 2배에서 10배까지도 빠르다고 한다.
    • 객체를 다른 곳에 전달할 때 값 복사였는데 7.0부터는 참조전달을 하도록 바뀌어서 객체에는 &를 쓰지 않아도 된다. [22]
    • 함수의 매개변수에 타입을 지정할 수 있게 되었다.
    • PHP 4 스타일의 생성자 문법이 삭제되고 5.0부터 바뀐 문법을 써야 한다.
    • 물음표 두 개를 표기하는 null 병합 연산자가 지원되어 편리해졌다.[23]


  • 2016년 6월 9일, PHP 7.1 알파 버전을 내놓았다. 이후 두 차례 더 알파 버전을 내놓은 뒤 7월 21일에 베타 버전으로 넘어갔다. 이후 릴리즈 후보안 1(RC1)은 9월 1일에 나왔다.
  • 2016년 12월 1일, PHP 7.1 정식 버전이 발표되었다.
  • 2017년 11월 30일, PHP 7.2 정식 버전이 발표되었다. 다른 언어처럼 count() 함수에 배열에 해당하지 않는 값이 매개변수에 들어갈 때 경고를 낸다. 드디어 정신 차렸구나
  • 2018년 12월 3일, 2018년 9월 13일에 업데이트가 된 PHP 7.0.32를 끝으로 PHP 7.0 지원이 완전히 종료되었다. 다만 마지막 업데이트는 2018년 12월 6일에 업데이트가 된 PHP 7.0.33이다.
  • 2018년 12월 6일, PHP 7.3 정식 버전을 발표하였다. Heredoc, Newdoc 문법이 유연해졌고, 함수 호출 시 마지막 파라미터 뒤에 콤마를 붙이는 것이 가능해졌다.
  • 2019년 11월 26일, PHP 7.4 정식 버전이 발표되었다. 프리로딩이 도입되어 성능이 최대 8%의 향상 되었다. FFI 기능이 생겼는데 외부 함수 인터페이스이며 다른 언어로 컴파일된 dll, so파일의 기능을 php컴파일 없이 바로 사용 가능하다.

  • 2019년 12월 1일, 2019년 10월 24일에 업데이트가 된 PHP 7.1.33를 끝으로 PHP 7.1의 지원이 완전히 종료되었다.
  • AWS용 PHP7.4부터는 ARM 환경에서의 가속 기능을 추가했다.
  • 2020년 11월 30일, 2020년 10월 1일에 업데이트가 된 PHP 7.2.34를 끝으로 PHP 7.2의 지원이 완전히 종료되었다.
  • 2021년 12월 6일, 2021년 11월 18일에 업데이트가 된 PHP 7.3.33를 끝으로 PHP 7.3의 지원이 완전히 종료되었다.
  • PHP 7.4는 2022년 11월 28일에 지원 중단될 예정이다. 그리고 PHP 7.4 끝으로 PHP 7.x의 역사가 종료된다.


8.3. PHP 8[편집]



8.3.1. 8.0[편집]


  • 2020년 PHP 8.0 부터 성능향상을 위한 JIT 도입, 정의되지 않은 변수 검사 등 예외처리 강화가 되었다.
    • 특히 에러를 일시적으로 감추는데 사용되던 @연산자를 삭제했다.[24]
    • 다른언어에서 옵셔널이라고도 부르는 null safe 연산자가 지원되어 프로그램의 안정성이 높아졌다.
  • 다른언어에서 어노테이션이라고도 부르는 애트리뷰트기능이 지원된다.
주석은 사람이 해석하지만 애트리뷰트는 프로그램에게 해당 코드 역할을 지정하는 메타 데이터이다.
문법은
#[]

">
  • 함수의 매개변수에 이름을 붙일수 있게되었다.
  • 2020년 11월 26일 정식 출시 되었다.
    • JIT 도입으로 서버프로그램들의 성능이 최대 2배까지 향상되었다.
    • 특히 객체지향적으로 작성된 클래스, 객체관리와 cpu를 많이 쓰는 코드들의 성능이 올라갔다.
  • PHP 8.0은 2023년 11월 26일에 지원이 완전히 종료될 예정이다.

PHP 8.0 에서는 7.4까지의 느슨한 비교연산자에 대해 수정하였다. PHP 7.4 까지는 문자열과 숫자가 섞여있을 때 "123Foo" == "123" 이걸 참(true)으로 봤기때문에 === 을 사용하지않으면 오류가 발생할 여지가 있었으나 8.0에서는 false 라고 평가함으로써 상식적이게 되었다.

예외와 오류처리 강화: PHP 대표적인 문제는 어떤 숫자를 0으로 나눌때 그냥 무시하고 작동했다는 것이다. 8.0부터는 Divide Zero 라는 에러를 내고 예외처리를 할 수 있게 바뀌었다.


8.3.2. 8.1[편집]


드디어 경량 스레드 기능인 Fiber 가 RFC 찬반투표를 통과하여 도입되었다. 코틀린의 코루틴이나 자바스크립트의 async - await 과 같은 기능이다. 다만 유저가 바로 사용하는것보다 PHP의 동작을 좀 더 세밀하게 제어하는 API이기 때문에 비동기 라이브러리 제작에 맞춰져 있다고 한다. 이로써 PHP로도 비동기 프로그래밍이 쉬워지게 되었다.

그 밖에 타입 정리가 이루어졌는데 Enum 타입이 추가되었고, Resource 타입 삭제, PHP 내장 함수들 타입들이 모두 부여되었고, 내장 함수들 null 허용여부가 타입으로 엄격하게 적용되어 개발자가 실수할 여지가 줄어, 보안이 더욱 향상되었다.
출시는 2021년 11월 25일이다. 지원 중단일은 2024년 11월 25일로 잡혀있다.


8.3.3. 8.2[편집]


2022년 11월 셋째 주 출시예정이다.
현재까지 RFC 제안들 중 찬반 투표를 통해 확정된 추가 기능은 다음과 같다.
  • 에러났을때 민감변수[25]는 숨기고 나머지만 표시할수있게 민감변수 지정 애트리뷰트 추가.
  • 상수 중복선언시 치명적 에러로 분류하여 실행 중단
  • 객체 속성 동적생성을 경고로 분류


8.4. PHP 9[편집]


2023년~2024년 사이에 출시할 예정인 버전이다. 2018 부터 조금씩 바꾼 PHP 엔진 개선점을 반영하는 버전이라고한다.

예외처리 강화, 객체 속성의 동적 생성 비활성화, 정의되지 않은 변수 에러로 처리 등등 PHP 내부 메일링 리스트와 PHP RFC 문서등지에서 예고, 논의했던 것들이다. PHP 메일링 리스트를 표시하는 사이트


9. 기타[편집]


  • FastCGI로 프록시 하게 되면 HTTP헤더에 X-Powered-By 이름의 버전 정보가 추가된다. : X-Powered-By: PHP/7.4.2[26]
  • 현재 웹상에 공개된 많은 웹 관련 애플리케이션들이 PHP로 작성되었기 때문에, 필요한 부분을 고칠 수 있을 정도로 배워두면 도움이 된다. 특히 간단한 서버용 자동화 스크립트 파일을 짜기에도 편리하고, 웹서버를 '경험'해보기 괜찮은 언어이다.
  • 라이선스를 보면, 일단 프리프로세서는 3.x(PHP License/GPL 듀얼 라이선스)를 제외한 모든 버전이 PHP License라 불리는 독자적 라이선스를 따른다. MIT 허가서 비슷하지만 프리프로세서를 재배포할 때 (내용 수정 여부와 관계없이) 패키지명에 PHP라는 단어를 넣지 못하게 하고, 'This product includes PHP software, freely available from http://www.php.net/software'라는 문구를 코드에 삽입할 것을 강제하는 내용이 있어 GPL과는 호환이 되지 않는다.
  • 페이스북에서 PHP에 지대한 공헌을 하고 있었다. 이유는 위에서 언급했듯이 페이스북이 PHP(or hack 언어) 기반으로 만들어졌기 때문.[27] 대표적으로 페이스북에서 PHP의 표준에 대해 공식화한 문서가 있다. 심지어 공식 PHP에서도 이 문서를 이용한다. 이전까지 PHP는 제대로 된 언어 사양서(php.net의 문서와는 성격이 조금 다르다)가 없었다. GitHub 페이지
  • 피가로,워드프레스, 미디어위키, 일본라쿠텐 그 밖에 Magento와 WooCommerce라는 이커머스 플랫폼에도 PHP가 사용되고 있다. Magento와 WooCommerce는 세계 1, 2위를 다투는 오픈 소스 이커머스 플랫폼이다.
  • 파생 프로젝트로 PEAR, PECL 등이 있다. 이름 때문인지 깨알같이 오이 절임이 각각 그려져 있다.
  • Laravel, Codeigniter 등의 프레임워크가 있고 컴포저라는 의존성 관리 도구도 존재한다. 디버깅 도구로는 Xdebug가 쓰인다.
  • 예전 버전에서는 가끔씩 이런 해석불가능한 에러 메시지로 개발자들을 충격과 공포에 빠뜨리곤 했다.
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
"PAAMAYIM NEKUDOTAYIM"은 히브리어인데 영어로 "double colon"이라는 뜻이다.[28] 이건 PHP 8.0에서야 삭제되었고 double colon으로 바뀌었다.
  • 이렇듯 다른언어에 비하면 상당히 난해한 편이라 관련 밈들도 많고 2020년에 개발자들을 대상으로한 설문조사에서 기피 언어 6위에 오르기도 했다, 최신 웹 사이트들은 PHP를 잘 쓰지 않을 것으로 보이지만 지금도 대다수의 웹사이트가 PHP로 구동되고 있고 매년 언어 점유율 순위에서 항상 상위권을 차지하고 있다. 기피 언어 순위와 점유율 순위 둘다 상위권을 놓치지 않는점이 아이러니


10. PHP로 작성된 프로그램 목록[편집]


나무위키에 단독 문서가 있는 것만 추가한다. (가나다 순)



파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2022-07-02 20:45:50에 나무위키 PHP 문서에서 가져왔습니다.

[1] 구, Zend Technologies Ltd.[2] 사실 PHP는 Perl과 좀 더 유사하다. 다만 C언어에서 파생된 문법을 사용하므로 C-like로 기술하였다.[3] PHP에서는 변수를 사전에 선언할 필요가 없고, $var = 9; 이면 숫자, $var = "String"; 이면 문자열 $var = true; 이면 참거짓 변수로 적용되며, 이미 선언된 문자열에 + 기호를 사용하면 숫자로 인식하기 때문에 주의 해야 한다.[4] 그런데 swoole, 로드러너와 같이 프로세스가 종료되지 않게 실행하는 프로그램을 쓰면 상태가 유지(stateful)되기 때문에 DB 커넥션 풀도 만들 수 있다. 이렇게 할 경우, 기존 PHP 코드를 수정해야하는 단점이 있다. 앞서 말한 장점도 사라지게 된다.[5] 스크립트의 언어 속성으로 language를 쓰는 것 또한 사실은 비표준이다. 표준대로라면 type으로 쓰는 것이 옳다. HTML4 시절부터 두 가지 형태가 혼용되고 있었는데, HTML5에서 후자가 살아남은 것.[6] 메모리나 cpu등에 앞서 저장된것을 말한다. 여기서는 php opcache[7] 기존 함수는 지원하지만, 서서히 없애고 있다.[8] Notice 수준의 로그로 보여주는데 php.ini에서 설정을 껐으면 모르고 지나치기 쉽다.[9] Facebook이 새로운 프로그래밍 언어 Hack 공개, 2014-03-21, 클리앙[10] (Model)-출력(View)-입력 및 제어(Controller)에 해당하는 부분을 분리해서 작성하는 프로그래밍 방식.[11] 95~2002년[12] 그런데 루비 온 레일즈 등의 영향을 받은 다양한 MVC 패턴을 지원하는 웹 개발 프레임워크들이 개발되었기 때문에 어떻게 보면 오히려 난이도가 비슷하거나 낮아졌다고 할 수 있다. Laravel 웹 프레임워크 같은 경우에는 GitHub에서 Python의 대표적인 웹 개발 프레임워크인 Django의 star 수를 뛰어넘었다.[13] PHP 프로그램 작성 권장 규칙[14] PHP 특징이다. 종료되면서 해당프로그램의의 변수,객체, DB커넥션 등등이 모두 사라진다.[15] 사람들의 오해가 있는데 웹서버에서 구동하는 PHP는 1요청당 프로세스가 생성되고 종료되는 것이 아니다.[16] PHP 특성상 TS모드로 리눅스에서 수행하는것이 더 좋다는걸 알 수있다[17] PHP에는 제네릭이없는데 라스무스는 매년 열리는 PHP컨퍼런스인 phpCE 2018에서 제네릭 구현은 가능하지만 도입시 PHP가 실행 중 타입 체크를 하게되어 큰 성능저하가 있기 때문에 반대한다고 밝혔다.[18] 같은 약타입 인터프리터언어인 파이썬은 제네릭이 있는데 파이썬은 실행중에는 타입체크를 전혀 안하기 떄문에 제네릭은 코드작성할때만 있는것이라 성능저하가 없다. 여담으로 자바는 컴파일 되면서 제네릭이 삭제되기에 성능에 지장이없다.[19] 아파치 HTTP 서버, NGINX[20] 훗날 PHP 7.0에서 재설계 되어 순환 참조 문제가 해결되었다.[21] 배열을 []로 선언하기, 배열을 리턴하는 함수를 곧바로 접근하기 등. 이것은 이미 오래전부터 JavaScript에서 구현된 것들이다. 이 외에도 JavaScript에서 유래한 일부 기능이 추가되었다.[22] call by reference[23] null coalescing operator [24] 즉 PHP 7에서 버그를 잡지않고 작성한 코드들은 PHP 8에서 실행하려면 버그를 잡아야한다.[25] DB 비밀번호, 계정정보 등등[26] 여담으로 header_remove로 지울 수 있는데 지우지 않아서 프로그램 정보가 노출되면 서버 보안에 취약할 거라는 지적이 있다. #StackOverflow[27] 외국에서는 기업이 오픈소스 프로젝트를 이용하여 자사의 서비스를 구축한 경우 그 프로젝트에 기여(contribute)를 하는 일이 흔하다.[28] https://en.wikipedia.org/wiki/Scope_resolution_operator#PHP[29] Taking PHP Seriously

분류