mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-12-19 16:01:05

PHP

더미:php에서 넘어옴

파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
다른 의미에 대한 내용은 PHP(동음이의어) 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px 0"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++
}}}
}}}
}}}
[ Stack Overflow 2024 ]
[ TIOBE 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 C++ 12 Delphi / Object Pascal
3 C 13 PHP
4 Java 14 Rust
5 C# 15 Ruby
6 JavaScript 16 Swift
7 SQL 17 Assembly language
8 Visual Basic 18 Kotlin
9 Go 19 R
10 Fortran 20 Scratch
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 COBOL 36 Scala
22 Classic Visual Basic 37 Transact-SQL
23 LISP 38 PL/SQL
24 Prolog 39 ABAP
25 Perl 40 Solidity
26 (Visual) FoxPro 41 GAMS
27 SAS 42 PowerShell
28 Haskell 43 TypeScript
29 Dart 44 Logo
30 Ada 45 Wolfram
31 D 46 Awk
32 Julia 47 RPG
33 Objective-C 48 ML
34 VBScript 49 Bash
35 Lua 50 Elixir
}}}}}}}}} ||
[ PYPL 2024 ]

}}} ||
프로그래밍 언어 목록 · 분류 · 문법

TIOBE 선정 올해의 프로그래밍 언어 / PHP
{{{#!folding [펼치기 / 접기] 2003년
C++
2004년
PHP
2005년
Java
}}} ||


#!syntax php
<?php
echo "Hello, world!";
?>
php
PHP: Hypertext Preprocessor
파일:PHP 로고.svg
<colbgcolor=#787CB4><colcolor=#ffffff> 최초 개발자 Rasmus Lerdorf
운영 및 개발 The PHP Group
( Zend by Perforce[1])
The PHP Foundation
라이선스 PHP License
최초 버전 1.0 (1995. 6. 8.)
최신 버전 {{{#!folding 8.1.31 (2024. 11. 21.) 역대 버전
8.1.0 Alpha 1 2021. 6. 10.
8.1.0 Alpha 2 2021. 6. 24.
8.1.0 Alpha 3 2021. 7. 8.
8.1.0 Beta 1 2021. 7. 22.
8.1.0 Beta 2 2021. 8. 5.
8.1.0 Beta 3 2021. 8. 19.
8.1.0 RC 1 2021. 9. 2.
8.1.0 RC 2 2021. 9. 16.
8.1.0 RC 3 2021. 9. 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. 1. 21.
8.1.3 2022. 2. 17.
8.1.4 2022. 3. 17.
8.1.5 2022. 4. 14.
8.1.6 2022. 5. 12.
8.1.7 2022. 6. 9.
8.1.8 2022. 7. 7.
8.1.9 2022. 8. 4.
8.1.10 2022. 9. 1.
8.1.11 2022. 9. 29.
8.1.12 2022. 10. 28.
8.1.13 2022. 11. 24.
8.1.14 2023. 1. 5.
8.1.15 2023. 2. 2.
8.1.16 2023. 2. 14.
8.1.17 2023. 2. 14.
8.1.18 2023. 4. 13.
8.1.19 2023. 5. 11.
8.1.20 2023. 6. 8.
8.1.21 2023. 6. 6.
8.1.22 2023. 8. 3.
8.1.23 2023. 8. 31.
8.1.24 2023. 9. 28.
8.1.25 2023. 10. 26.
8.1.26 2023. 11. 23.
8.1.27 2023. 12. 21.
8.1.28 2024. 4. 11.
8.1.29 2024. 6. 6.
8.1.30 2024. 9. 26.
}}}
8.2.26 (2024. 11. 21.)
||<-2><tablebgcolor=#ffffff,#2D2F34><tablebordercolor=#ffffff,#2D2F34><tablealign=center> 역대 버전 ||
8.2.0 Alpha 1 2022. 6. 9.
8.2.0 Alpha 2 2022. 6. 23.
8.2.0 Alpha 3 2022. 7. 7.
8.2.0 Beta 1 2022. 7. 21.
8.2.0 Beta 2 2022. 8. 4.
8.2.0 Beta 3 2022. 8. 18.
8.2.0 RC1 2022. 9. 1.
8.2.0 RC2 2022. 9. 15.
8.2.0 RC3 2022. 9. 28.
8.2.0 RC4 2022. 10. 13.
8.2.0 RC5 2022. 10. 27.
8.2.0 RC6 2022. 11. 10.
8.2.0 RC7 2022. 11. 24.
8.2.0 2022. 12. 8.
8.2.1 2023. 1. 5.
8.2.2 2023. 2. 2.
8.2.3 2023. 2. 14.
8.2.4 2023. 3. 16.
8.2.5 2023. 4. 13.
8.2.6 2023. 5. 11.
8.2.7 2023. 6. 8.
8.2.8 2023. 7. 9.
8.2.9 2023. 8. 3.
8.2.10 2023. 8. 31.
8.2.11 2023. 9. 28.
8.2.12 2023. 10. 26.
8.2.13 2023. 11. 23.
8.2.14 2023. 12. 21.
8.2.15 2024. 1. 18.
8.2.16 2024. 2. 15.
8.2.17 2024. 3. 14.
8.2.18 2024. 4. 11.
8.2.19 2024. 5. 9.
8.2.20 2024. 6. 6.
8.2.21 2024. 7. 4.
8.2.22 2024. 8. 1.
8.2.23 2024. 8. 29.
8.2.24 2024. 9. 26.
8.2.25 2024. 10. 24.
8.3.14 (2024. 11. 21.)
||<-2><tablebgcolor=#ffffff,#2D2F34><tablebordercolor=#ffffff,#2D2F34><tablealign=center> 역대 버전 ||
8.3.0 Alpha 1 2023. 6. 8.
8.3.0 Alpha 2 2023. 6. 22.
8.3.0 Alpha 3 2023. 7. 6.
8.3.0 Beta 1 2023. 7. 20.
8.3.0 Beta 2 2023. 8. 3.
8.3.0 Beta 3 2023. 8. 17.
8.3.0 RC1 2023. 8. 29.
8.3.0 RC2 2023. 9. 14.
8.3.0 RC3 2023. 9. 28.
8.3.0 RC4 2023. 10. 12.
8.3.0 RC5 2023. 10. 26.
8.3.0 RC6 2023. 11. 9.
8.3.0 2023.11.23
8.3.1 2023.12.21
8.3.2 2024.1.18
8.3.3 2024.2.15
8.3.4 2024.3.14
8.3.6 2024.4.11
8.3.7 2024.5.9
8.3.8 2024.6.6
8.3.9 2024.7.4
8.3.10 2024.8.1
8.3.11 2024.8.29
8.3.12 2024.9.26
8.3.13 2024.10.24
8.4.1 (2024. 11. 21.)
||<-2><tablebgcolor=#ffffff,#2D2F34><tablebordercolor=#ffffff,#2D2F34><tablealign=center> 역대 버전 ||
8.4.0 Alpha 1 2024. 7. 2.
8.4.0 Alpha 2 2024. 7. 16.
8.4.0 Alpha 3 2024. 7. 30.
8.4.0 Alpha 4 2024. 8. 1.
8.4.0 Beta 1 2024. 8. 13.
8.4.0 Beta 2 2024. 8. 15.
8.4.0 Beta 3 2024. 8. 15.
8.4.0 Beta 4 2024. 8. 27.
8.4.0 Beta 5 2024. 9. 11.
8.4.0 RC1 2024. 9. 25.
8.4.0 RC2 2024. 10. 8.
8.4.0 RC3 2024. 10. 23.
8.4.0 RC4 2024. 11. 5.
8.4.0 2023.11.20
||
링크 파일:홈페이지 아이콘.svg 파일:X Corp 아이콘(블랙).svg
1. 개요2. 특징
2.1. 장점2.2. 단점2.3. PHP 7.4 이하 버전 단점2.4. 다른 웹 서비스 개발 기술과의 비교
3. 레거시와 현대화
3.1. 모던 PHP
4. 구동방식5. 개발 환경
5.1. 웹 프레임워크5.2. 각종 ORM5.3. 디버깅5.4. 패키지 관리자5.5. 익스텐션
6. 문법7. PHP 코딩 표준안8. 업데이트
8.1. PHP 58.2. PHP 78.3. PHP 8
8.3.1. 8.08.3.2. 8.18.3.3. 8.28.3.4. 8.38.3.5. 8.4
8.4. PHP 9
9. 기타10. PHP로 작성된 프로그램 목록

[clearfix]

1. 개요


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

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

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

2. 특징

PHP는 Perl 언어의 영향을 많이 받았는데, 변수 이름 앞에 $를 붙이는 것(예: $var), 펄처럼 배열이 연관 배열로 작동하는 것, 문자열끼리 결합할 때 점(.) 연산자로 결합하는 것이 그 예이다. (예: "Hello, " . "world!" = "Hello, world!"). 다른 프로그래밍 언어에서 하던 대로 더하기 기호(+)로 문자열을 결합하려 하면 엉뚱한 결과가 나온다. PHP에서는 +는 오직 숫자 덧셈만 하기 때문이다. 따라서 두 문자열에 +를 사용하면 두 값이 숫자 0 으로 형변환되어 잘못된 결과가 나온다. (예: "Hello, " + "world!" = 0)

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

PHP 는 다른 스크립트 언어와 달리 실행 중에 타입을 체크한다. 타입들이 점차 추가 되었으며 php 7 이후로 declare(strict_types=1)을 선언하면 강타입으로 작동한다.

PHP 파일은 <?php ... ?>로 이루어진 스크립트 실행 영역이 있다. <? ... ?>는 권장하지 않는다. 이렇게 줄여 쓰는 방식은 비활성화되어 있는데 사용하려면 php.ini에서 short_open_tags 설정을 on으로 바꾸어야 한다. 비활성화되어 있는 이유는 XML과 같은 문법과 충돌했기 때문이다. 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>[4] 태그를 사용하기도 했다. 그렇지만 이 태그는 JavaScript에서 쓰는 것과 혼동될 수 있어서 PHP 7부터 삭제되었다.

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

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

2.1. 장점

2.2. 단점

2.3. PHP 7.4 이하 버전 단점

2.4. 다른 웹 서비스 개발 기술과의 비교

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

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

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

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

3. 레거시와 현대화

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

과거 PHP에서는 MVC 패턴[13] 적용이 어려웠지만, PHP 5.0부터 객체지향 프로그래밍 요소가 들어가기 시작했고, 5.3 에 네임스페이스가 도입 되면서 객체지향과 MVC 패턴으로 설계된 프레임워크들이 더 많이 개발되었다. 그러나 오래된 CMS들[14] 은 보안에 취약하게 작성되어 있었고, 그 밖에도 소규모 프로젝트에서는 관리가 힘든 경우가 많았다. 예를 들어 제로보드는 SQL 쿼리에 들어갈 변수들에 "준비된 실행문"(Prepared Statement)이라는 안전한 방식을 사용하지 않았는데, 그 결과 SQL 인젝션 공격을 받아 뽐뿌 개인정보 해킹 사건 등이 발생했다. 반면 2013년 출시된 XE의 경우 시작부터 MVC 아키텍쳐 구조였으며 SQL 인젝션 문제를 설계변경으로 근본적으로 해결하였고, 드루팔의 경우는 2015년 드루팔 8 부터 컴포저를 지원하고 개발이 쉬운 패키지 모듈로 개선되었다.

3.1. 모던 PHP

2000년에 나온 PHP 4까지는 클래스가 있어도 없는 것이나 다름없었고 순수하게 스크립트 형태로 작성된 코드들이 많았는데, PHP 5.3 이후로는 점점 객체 지향 프로그래밍이 사용되기 시작했다.[15]. 그래서 5.2 버전까지를 고전 PHP, 5.3 ~ 5.6 5년간을 과도기, 7.0 이후 버전은 현대 PHP로 분리해서 보는 시각이 있다.
2023년 워드프레스 통계에서도 PHP 5.6 이하는 점유율이 5% 이하로 떨어지는 등[16] 이제는 모던과 모던아닌것을 구분해야되는지 의문이다.

PHP 프레임워크들이 등장하면서 MVC 아키텍쳐 등이 적용되어 협업관련 문제는 대부분 해소되었고, PHP 7부터는 좀 더 확실한 OOP 언어에 가까워졌다. PHP 의 좋지않은 인식에 영향끼친 대다수는 5.2 버전 대에서 벗어나지 못하는 절차지향적으로 작성된 일부 CMS들과 [17] 여기에 익숙해져 새로운 것을 배우지 않는 cms 만 다루는 사용자들이 원인이다. PHP Framework Interop Group에서 제안한 PSR 규칙[18]으로 인해 많은 프레임워크가 정형화되었다. 요즘 PHP 개발에서는 PSR을 지키는 것이 권장된다.

PHP는 느슨한 타입 검사와 extract() 로 변수 생성하기등 보안 취약점이 지적되었다. 타입 강화는 PHP 7부터 개선된 부분이 있지만, 초창기부터 이어져 온 특유의 함수 이름 비일관성은 여전히 고쳐나가는 중이다. PHP 8.1부터는 보안문제로 지적받던 $GLOBALS 배열에 쓰기 작업하는것이 금지되었다.

흔히들 모던PHP 라고하는건 네임스페이스가 도입된 PHP 5.3 버전인데 이전까지는 제대로 된 디자인 패턴이나 프레임워크가 확립되지 않았고,[19] 이로 인해 보안 따위는 가볍게 날려버린 코드를 짜는 방법들이 있어서 그걸 쓰는 개발자들이 많았는데, "PHP는 안전하지 않다"라는 이미지를 심는 데 일조하였다. 결론을 말하자면, 개발자가 보안에 대해 인지하고 방어하는 코드를 쓰자는것 . 요즘에는 CMS도 프레임워크 사용으로 보안 문제가 상당히 줄었다.

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

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

4. 구동방식

5. 개발 환경

옛날에는 에디트 플러스나 노트패드++, 심지어는 메모장같은 단순 편집기를 쓰고 통합 개발 환경(IDE)을 안 쓰는 사람도 있었지만, 배포 전에 오류를 잡고 개발 생산성을 높이기 위해서는 IDE를 쓰는 것이 좋다.

영어로는 IDE(Integrated Development Environment)라고 한다. 터미널, 디버거, 확장(Extension), 코드 편집기 등 개발에 도움울 주는 각종 기능들이 담겨 있는 앱을 가리킨다. IDE는 작업 중인 코드 상의 문제를 추적해 주거나 스타일 수정을 해 주는 패키지와의 연동을 통해 GUI 상에서 코드 퀄리티 관리를 자동으로 해 주는 편리한 기능도 제공한다.

VS Code 같은 텍스트 에디터에 디버깅을 위한 Xdebug를 설치해서 사용하는 방법도 있다. 특히 VS Code는 MS가 전폭적으로 밀어주고 있어 각종 플러그인의 숫자도 늘어나는 중이다.

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

5.1. 웹 프레임워크

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

5.2. 각종 ORM

ORM(Object-Relation Mapper)이란 SQL 쿼리를 사용하지 않고 객체지향적으로 데이터베이스에 상호작용할 수 있게 도와주는 도구이다. 물론 만능은 아니라서 복잡한 DB작업은 SQL을 써야 할 경우도 있고 기본적으로 DB를 잘 알아야 한다.

ORM 구현 라이브러리

5.3. 디버깅

5.4. 패키지 관리자

PHP 의 패키지관리자는 3가지가 있는데 PECL , Phar , 컴포저(Composer)이다. PECL, Phar 은 PHP 익스텐션 관리자이다. c 나 c++ 등으로 만든 익스텐션들이 있다. 이 중에 PHP만 다루는 것은 컴포저다. 컴포저는 php프로그램을 배포하는 패키지스트 사이트에 다운/배포를 하며 해당 php 프로그램에 필요한 라이브러리들을 관리한다 이를 의존성 관리라고 한다.

5.5. 익스텐션

6. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 PHP/문법 문서
번 문단을
부분을
참고하십시오.

7. PHP 코딩 표준안

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

8. 업데이트

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

8.1. PHP 5

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배 빠른 성능이고, 함수 인자와 반환 값에 타입을 지정할 수 있게 되었다.
// 이전 방식
// 삼항연산자로 처리 ? 앞에 값이 있으면 대입하고 없으면 뒤에 것을 쓴다.
$user = (!empty($_GET['user'])) ? $_GET['user'] : '';

// PHP7.0 부터는 같은 표현식이 간단해진다.
// ??(null 병합연산자) 앞에 변수가 없으면 뒤에것을 쓴다.
$user = $_GET['user'] ?? '';
}}}

8.3. PHP 8

8.3.1. 8.0

//아래는 8.0
$country = $session?->user?->getAddress()?->country;
}}} class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}
}}} htmlspecialchars($string, double_encode: false);
//두번째 인자에 double_encode 이라는 이름이 있어 함수를 내부를 보지 않고도 false가 어떤역할인지 보는데 도움된다.
}}}

8.3.2. 8.1

8.3.3. 8.2

2022년 11월 셋째 주 출시예정이었으나, 중간에 버그가 발견되어 12월 8일에 발표되었다. 추가 기능은 다음과 같다.

8.3.4. 8.3

2023년 11월 23일 정식 배포 되었다.
유효하지 않은 직렬화 문자열을 역직렬화 시도할 때, 기존의 E_NOTICE에서 E_WARNING로 에러 수준이 향상되는 등의 변경점이있다.

8.3.5. 8.4

2024년 11월 배포 예정으로 개발중이다.

8.4. PHP 9

2025년~2026년 사이에 출시할 예정인 버전이다. 2018부터 조금씩 바꾼 PHP 엔진 개선점을 반영하는 버전이라고 한다. 모두 PHP 내부 메일링 리스트와 PHP RFC 문서등지에서 예고, 논의했던 것들이다.[35] 특히 정의되지 않은 변수에 관해서는 기존 코드를 변경할 시간이 필요하므로 지금부터 준비하라고 하고 유명한 라이브러리들은 이미 준비 중이다.

9. 기타

}}}"PAAMAYIM NEKUDOTAYIM"[38] 히브리어로 2개의 쌍점(::)이라는 뜻이다. 히브리어를 모르는 대부분의 전세계 개발자들에게는 매우 생소한 표현이었기 때문에 PHP 8부터는 제거되었다.

10. PHP로 작성된 프로그램 목록

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


[1] 구, Zend Technologies Ltd. [2] 사실 PHP는 Perl과 좀 더 유사하다. 다만 C언어에서 파생된 문법을 사용하므로 C-like로 기술하였다. [3] 그런데 swoole, 로드러너와 같이 프로세스가 종료되지 않게 실행하는 프로그램을 쓰면 상태가 유지(stateful)되기 때문에 DB 커넥션 풀도 만들 수 있다. 이렇게 할 경우, 기존 PHP 코드를 수정해야 하는 단점이 있으며 앞서 말한 무상태성으로서 가졌던 장점도 사라지게 된다. [4] 스크립트의 언어 속성으로 language를 쓰는 것 또한 사실은 비표준이다. 표준대로라면 type으로 쓰는 것이 옳다. HTML4 시절부터 두 가지 형태가 혼용되고 있었는데, HTML5에서 후자가 살아남은 것. [5] 메모리나 cpu등에 앞서 저장된것을 말한다. 여기서는 php opcache 코드 [6] 기존 함수는 지원하지만, 서서히 없애고 있다. [7] 대다수의 웹은 PHP 코드 처리보다 DB 가 더 느리기 때문에 DB 튜닝, 쿼리 개선이 성능향상에 더 영향이 크고 PHP 성능도 향상되어 유저가 체감할 정도는 아니다. [8] 이 옵션은 PHP 5.1부터 존재했지만 기본값이 꺼져 있어서 많은 개발자들이 그 존재를 몰랐고, 문제 해결의 어려움에 PHP를 떠나는 경우도 있었다. [9] Notice 수준의 로그로 보여주는데 php.ini에서 설정을 껐으면 모르고 지나치기 쉽다. [10] 전역변수를 덮어 쓰기하는 문제 [11] 통계 [12] Facebook이 새로운 프로그래밍 언어 Hack 공개, 2014-03-21, 클리앙 [13] (Model)-출력(View)-입력 및 제어(Controller)에 해당하는 부분을 분리해서 작성하는 프로그래밍 방식. [14] PHP 5.3 이전에 개발된 프로그램 [15] 루비 온 레일즈 등의 영향을 받은 다양한 MVC 패턴을 지원하는 웹 개발 프레임워크들이 개발되었기 때문에 어떻게 보면 오히려 난이도가 비슷하거나 낮아졌다고 할 수 있다. Laravel 웹 프레임워크 같은 경우에는 GitHub에서 Python의 대표적인 웹 개발 프레임워크인 Django의 star 수를 뛰어넘었다. [16] https://wordpress.org/about/stats/ [17] 그누보드 [18] PHP 프로그램 작성 권장 규칙 [19] 예) 코드이그나이터 2 버전 [20] PHP 특징인 무상태성이다. 종료되면서 해당프로그램의의 변수,객체, DB커넥션 등등이 모두 사라진다. [21] 사람들의 오해가 있는데 웹서버에서 구동하는 PHP는 1요청당 프로세스가 생성되고 종료되는 것이 아니다. php-fpm 에서 max_request 값으로 지정. [22] https://www.phpinternalsbook.com/php7/extensions_design/php_lifecycle.html [23] PHP 특성상 TS모드로 리눅스에서 수행하는것이 더 좋다는걸 알 수 있다. [24] PHP에는 제네릭이없는데 라스무스는 매년 열리는 PHP컨퍼런스인 phpCE 2018에서 제네릭 구현은 가능하지만 도입시 PHP가 실행 중 타입 체크를 하게되어 큰 성능저하가 있기 때문에 반대한다고 밝혔다. [25] 같은 약타입 인터프리터언어인 파이썬은 제네릭이 있는데 파이썬은 실행중에는 타입체크를 전혀 안하기 때문에 제네릭은 코드작성할때만 있는것이라 성능저하가 없다. 여담으로 자바는 컴파일 되면서 제네릭이 삭제되기에 성능에 지장이없다. [26] 아파치 HTTP 서버, NGINX [27] 이미 설치된 PHP 확인법은 phpinfo 함수로 확인하거나 윈도우cmd나 리눅스터미널에서 php -v를 입력하면 정보가 뜬다. [28] 훗날 PHP 7.0에서 재설계 되어 순환 참조 문제가 해결되었다. [29] 배열을 []로 선언하기, 배열을 리턴하는 함수를 곧바로 접근하기 등. 이것은 이미 오래전부터 JavaScript에서 구현된 것들이다. 이 외에도 JavaScript에서 유래한 일부 기능이 추가되었다. [30] 새 기능 소개 [31] call by reference [32] null coalescing operator [33] 즉 PHP 7에서 버그를 잡지않고 작성한 코드들은 PHP 8에서 실행하려면 버그를 잡아야한다. [34] DB 비밀번호, 계정정보 등등 [35] PHP 메일링 리스트를 표시하는 사이트 [36] 여담으로 header_remove로 지울 수 있는데 지우지 않아서 프로그램 정보가 노출되면 서버 보안에 취약할 거라는 지적이 있다. #StackOverflow [37] 외국에서는 기업이 오픈소스 프로젝트를 이용하여 자사의 서비스를 구축한 경우 그 프로젝트에 기여(contribute)를 하는 일이 흔하다. [38] 올바른 표현은 paamayim nekudatayim, פעמיים נקודותיים [39] Taking PHP Seriously

분류