This is a good article. Click here for more information.
Listen to this article

PHP

PHP
PHP
패러다임다중 패러다임: 명령적, 기능적, 객체 지향적, 절차적, 성찰적
설계자Rasmus Lerdorf
개발자PHP 개발팀, Zend Technologies, PHP Foundation
첫 등장1995년 6월 8일; 28년 전 (1995-06-08)[1][2]
안정적인 방출
8.3.0

8.2.13 8.1.26

/ 2023년 11월 23일, 16일(2023-11-23)[3]
타이핑 규율동적, 약한, 점진적[4]
구현언어C(주로; 일부 성분 C++)
OS유닉스 계열, Windows, macOS, IBM i, OpenVMS
면허증.이중 라이선스 GNU General Public License 버전 2 또는 그 이후 버전과 PHP 버전 3.0 이전 버전의 PHP License.[5] 3.01x 이상 버전의 경우 PHP 라이센스(Zend Engine License의 대부분)만 제공됩니다.
파일 확장자.php,.phar,.phtml,.pht,.phps
웹사이트www.php.net Edit this at Wikidata
주요구현
Zend Engine, HHVM, PitchPie, Quercus, Parotle
영향을 받음
, C, C++, 자바,[6] Tcl,[2] 자바스크립트[7]
영향받은
, JSP, ASP, 반응 JS

PHP는 웹 개발에 적합한 범용 스크립트 언어입니다.[8] 원래 덴마크계 캐나다 프로그래머 라스무스 레르도르프(Rasmus Lerdorf)가 1993년에 만들어 1995년에 출시했습니다.[9][10] PHP 참조 구현은 이제 PHP 그룹에 의해 생성됩니다.[11] PHP는 원래 Personal Home Page의 약자였지만,[12][13] 현재는 재귀적 초기주의 PHP: Hypertext Preprocessor를 의미합니다.[14]

PHP 코드는 보통 모듈, 데몬 또는 CGI(Common Gateway Interface) 실행 파일로 구현된 PHP 인터프리터에 의해 웹 서버에서 처리됩니다. 서버에서는 해석되고 실행된 PHP 코드의 결과(예를 들어 생성된 HTML 또는 이진 이미지 데이터 등)가 HTTP 응답의 전체 또는 일부를 형성합니다. 다양한 웹 템플릿 시스템, 웹 콘텐츠 관리 시스템 및 웹 프레임워크를 사용하여 해당 응답을 조정하거나 생성하는 데 사용할 수 있습니다. 또한 PHP는 독립형 그래픽 애플리케이션 및[15] 로봇 드론 제어와 같은 웹 컨텍스트 외부의 많은 프로그래밍 작업에 사용할 수 있습니다.[16] PHP 코드는 명령줄에서 직접 실행할 수도 있습니다.

Zend Engine에 의해 구동되는 표준 PHP 인터프리터는 PHP 라이센스로 출시된 자유 소프트웨어입니다. PHP는 널리 포트화되어 있으며 다양한 운영 체제와 플랫폼의 대부분의 웹 서버에 배포할 수 있습니다.[17]

PHP 언어는 문서화된 공식 사양이나 표준 없이 발전해 왔으며, 원래의 구현은 다른 구현들이 따르고자 하는 사실상의 표준으로 작용했습니다.

PHP를 사용하는 웹사이트의 비율, 2023년[18][19] 12월

PHP 8.3, 2026년 11월 23일까지 적극 지원(0.02%)
PHP 8.2, 2025년 12월 8일까지 적극 지원(3.00%)
PHP 8.1, 2024년 11월 25일까지만 보안 지원(8.01%)
PHP 8.0, EOL (End Of Life) 2023년 11월 26일 (9.28%)
PHP 7.4, EOL 2022 (40.88%)
PHP 7.3, EOL 2021 (8.75%)
PHP 7.2, EOL 2020 (6.30%)
PHP 7.1, EOL 2019 (2.45%)
PHP 7.0, EOL 2019 (2.75%)
PHP 5, EOL 2018 (18.3%)
PHP 4, EOL 2008 (0.2%)

W3Techs는 2023년 12월 현재 "PHP는 서버측 프로그래밍 언어를 알고 있는 모든 웹사이트의 76.5%가 사용하고 있다"고 보고했습니다.[18] 또한 다음을 보고합니다.

  • PHP 사용자의 20.3%가 8.x 버전을 사용합니다.
    • 액티브 지원 버전[20] 8.3은 PHP 버전 8을 사용하는 모든 웹사이트의 0.1%에서 사용됩니다(전체 PHP 웹사이트의 0.02%).
    • 액티브 지원 버전 8.2는 PHP 버전 8을 사용하는 전체 웹사이트의 14.7%(전체 PHP 웹사이트의 3%)가 사용하고 있습니다.
    • 보안 수정 버전 8.1은 PHP 버전 8을 사용하는 전체 웹사이트의 39.5%(전체 PHP 웹사이트의 8.01%)를 사용합니다.
    • End of Life Version 8.0 (2023년[21] 11월 26일부터 지원되지 않음)은 PHP 버전 8을 사용하는 모든 웹사이트의 45.7% (전체 PHP 웹사이트의 9.28%)를 사용합니다.
  • 61.2% - 가장 많이 지원되지 않는 PHP 7, 더 구체적으로 PHP 7.4(2022년부터는 지원되지 않음);
  • 18.3%는 PHP 5(2018년부터 지원되지 않음)를, 0.2%는 PHP 4(2008년부터 지원되지 않음)를 사용하고 있으며, 이는 보안 수정 기능이 지원되지 않으며 심각한 보안 취약점을 가지고 있는 것으로 알려져 있습니다.

이는 브랜치 PHP 8.0 및 모든 이전 버전(PHP 7, PHP 5 및 PHP 4) 웹사이트를 포함한 대다수의 PHP 웹사이트가 해킹에 취약하다는 것을 의미합니다. UbuntuDebian과 같은 일부 Linux 배포판은 상업적 지원을 제공하며 PHP 7.4에 대한 유료 보안 패치를 제공할 수 있습니다.[22][23]

역사

PHP의 제작자인 Rasmus Lerdorf와 Zend Engine의 제작자인 Andi GutmansZeev Suraski.

초기역사

PHP 개발은 1993년[9] 라스무스 레르도르프(Rasmus Lerdorf)가 C로 여러 개의 CGI(Common Gateway Interface) 프로그램을 작성하면서 시작되었으며,[24][25] 이 프로그램은 그가 개인 홈페이지를 유지하는 데 사용되었습니다. 그는 웹 양식을 사용하고 데이터베이스와 통신할 수 있도록 확장했으며, 이 구현을 "개인 홈 페이지/폼 인터프리터" 또는 PHP/FI라고 불렀습니다.

PHP/FI는 단순하고 동적인 애플리케이션을 구축하는 데 사용될 수 있습니다. 버그 보고를 가속화하고 코드를 개선하기 위해, Lerdorf는 1995년 6월 8일에 유즈넷 토론 그룹 comp.inosystems.www.authorizing.cgi에서 PHP/FI 버전을 "PHP 툴(Personal Home Page Tools) 버전 1.0"으로 발표했습니다.[1][26] 이 릴리스는 이미 PHP가 오늘날 가지고 있는 기본 기능을 가지고 있었습니다. 여기에는 과 유사한 변수, 폼 핸들링, HTML 내장 기능이 포함되었습니다. 구문과 비슷했지만 더 단순하고 [citation needed]제한적이며[citation needed] 일관성이 떨어졌습니다.[citation needed][11]

초기 PHP 구문의 예:[27]

<!--포함하다 /본문/머리말.html-->  <!--getenv HTTP_USER_AGENT--> <!--한다면 기질의 $exec_ 모질라-->   이봐.,  이다 사용. 넷스케이프!<p> <!--끝이 나면-->  <!--sql 데이터베이스 선택한다. * 부터 테이블 어디에 사용자='$ username'--> <!--적으면 $numories 1-->   미안하다, 그거 기록. 한다 것은 아니다. 존재하다<p> <!--끝이 나면 출입구-->   환영해 <!--$사용자-->!<p>    갖고 있다 <!--$인덱스:0--> 크레디트 왼쪽 안에 당신의. 계좌.<p>  <!--포함하다 /본문/발 디딜 틈이 없는.html--> 

초기의 PHP는 새로운 프로그래밍 언어가 될 의도가 없었고, Lerdorf가 회고하면서 유기적으로 성장했습니다. "어떻게 막을 수 있을지 모르겠습니다. 프로그래밍 언어를 어떻게 써야 할지 전혀 모르겠습니다. 그 과정에서 다음 논리적 단계를 계속 추가했을 뿐입니다."[28] 개발팀이 구성되기 시작했고, 몇 달간의 작업과 베타 테스트를 거쳐 1997년 11월에 공식적으로 PHP/FI 2를 출시했습니다.[citation needed]

PHP가 원래 설계된 것이 아니라 유기적으로 개발되었다는 사실은 함수의 일관성 없는 명명과 매개 변수의 일관성 없는 순서를 초래했습니다.[29] 어떤 경우에는 함수 이름이 PHP가 "랩"하고 있는 하위 라이브러리와 일치하도록 선택된 반면,[30] 일부 매우 초기 버전의 PHP에서는 함수 이름의 길이가 해시 함수로 내부적으로 사용되었기 때문에 해시 값의 분포를 개선하기 위해 이름이 선택되었습니다.[31]

PHP 3 및 4

이것은 WordPress 콘텐츠 관리 시스템에 대한 PHP 코드의 예입니다.

Zeev SuraskiAndi Gutmans는 1997년에 파서를 다시 작성하고 PHP 3의 기본을 형성하여 언어의 이름을 재귀적인 두문자 PHP: Hypertext Preprocessor로 변경했습니다.[11][32] 이후 PHP 3의 공개 테스트가 시작되었고, 공식 출시는 1998년 6월에 이루어졌습니다. 그 후 수라스키와 구트만스는 1999년에 Zend Engine을 생산하면서 PHP의 핵심을 다시 쓰기 시작했습니다.[33] 그들은 또한 이스라엘 라마트 간Zend Technologies를 설립했습니다.[11]

2000년 5월 22일, Zend Engine 1.0으로 구동되는 PHP 4가 출시되었습니다.[11] 2008년 8월, 이 지점은 버전 4.4.9에 도달했습니다. PHP 4는 더 이상 개발 중이 아니며, 보안 업데이트도 출시할 계획이 없습니다.[34][35]

PHP 5

2004년 7월 1일, 새로운 Zend Engine II로 구동되는 PHP 5가 출시되었습니다.[11] PHP 5는 객체 지향 프로그래밍에 대한 향상된 지원, 가볍고 일관된 데이터베이스 접근을 위한 인터페이스를 정의하는 PHP 데이터 오브젝트(PDO) 확장, 수많은 성능 향상과 같은 새로운 기능을 포함했습니다.[36] 2008년, PHP 5는 개발 중인 유일한 안정적인 버전이 되었습니다. 후기 정적 바인딩은 이전 버전의 PHP에서 누락되었으며 버전 5.3에서 추가되었습니다.[37][38]

PHP 4에서 PHP 5로의 전환을 촉진하는 PHP 개발자 컨소시엄에 [39]의해 제공된 GoPHP 5 이니셔티브 때문에 2008년 2월 5일부터 많은 유명 오픈 소스 프로젝트들이 PHP 4를 새로운 코드로 지원하지 않게 되었습니다.[40][41]

시간이 흐르면서 PHP 인터프리터는 대부분의 기존 32비트64비트 운영 체제에서 PHP 소스 코드로 구축하거나 미리 구축된 바이너리를 사용하여 사용할 수 있게 되었습니다.[42] PHP 버전 5.3과 5.4의 경우 사용 가능한 마이크로소프트 윈도우 바이너리 배포판은 32비트 IA-32 빌드뿐이었고,[43][44] 64비트 윈도우 플랫폼에서 인터넷 정보 서비스(IIS)를 사용하는 동안 윈도우 32비트 호환 모드가 필요했습니다. PHP 버전 5.5는 64비트 x86-64 빌드를 마이크로소프트 윈도우에서 사용할 수 있게 만들었습니다.[45]

PHP 5.6에 대한 공식적인 보안 지원은 2018년 12월 31일에 종료되었습니다.[46]

PHP 6과 유니코드

PHP는 핵심 언어 수준에서 기본 유니코드 지원이 부족하여 엇갈린 평가를 받았습니다.[47][48] 2005년 안드레이 즈미에프스키(Andrei Zmievski)가 주도한 프로젝트는 유니코드를 위한 국제 구성 요소(ICU) 라이브러리를 내장하고 텍스트 문자열을 내부적으로 UTF-16으로 표현함으로써 PHP 전반에 걸쳐 네이티브 유니코드 지원을 제공하기 위해 시작되었습니다.[49] 이것은 언어 내부와 사용자 코드 모두에 큰 변화를 일으킬 것이기 때문에 개발 중인 다른 주요 기능과 함께 언어 버전 6.0으로 출시할 계획이었습니다.[50]

그러나 필요한 변경 사항을 이해한 개발자 부족과 웹 컨텍스트에서 거의 사용되지 않는 UTF-16으로의 변환에서 발생하는 성능 문제로 인해 프로젝트가 지연되었습니다.[51] 그 결과, 2009년 PHP 5.3 릴리스가 만들어졌으며, 많은 유니코드 기능들이 PHP 6, 특히 네임스페이스에서 백포트되었습니다. 2010년 3월, 현재 형태의 프로젝트는 공식적으로 중단되었고, PHP 5.4 릴리스는 특성 및 폐쇄 재결합과 같은 PHP 6의 대부분의 비 유니코드 기능을 포함하도록 준비되었습니다.[52] 처음에는 유니코드 통합을 위한 새로운 계획이 수립되기를 희망했지만, 2014년까지 채택된 것은 없었습니다.[citation needed]

PHP 7

2014년과 2015년에 새로운 주요 PHP 버전인 PHP 7이 개발되었으며 여전히 가장 많이 사용되는 PHP 버전으로 후속 버전보다 훨씬 더 인기가 있습니다. 이 버전의 번호 지정은 내부 개발자들 사이에 약간의 논쟁을 수반했습니다.[53] PHP 6 유니코드 실험은 한번도 공개된 적이 없었지만, 몇몇 기사와 책 제목들은 PHP 6 이름을 참조했는데, 만약 새로운 버전이 이름을 재사용한다면 혼란을 야기했을 수도 있습니다.[54] 투표 끝에 PHP 7이라는 이름이 선택되었습니다.[55]

PHP 7의 기반은 원래 PHP 차세대(phpng)로 명명된 PHP 브랜치입니다. Dmitry Stogov, Xinchen Hui, Nikita Popov 등이 저작했으며,[56] Zend Engine을 리팩터링하여 PHP 성능을 최적화하는 것을 목표로 하고 있습니다.[57] 2014년 7월 14일까지 pphng 프로젝트의 주요 벤치마크 제품군 역할을 했던 WordPress 기반 벤치마크는 거의 100% 성능이 향상되었습니다. pphng에서 변경하면 JIT(Just-in-Time) 컴파일러로의 성공적인 마이그레이션에 더 적합한 컴팩트한 데이터 구조 및 기타 변경 사항이 더 적합하기 때문에 향후 버전에서 성능을 더 쉽게 향상시킬 수 있습니다.[58] 상당한 변화 때문에, 재작업된 Zend Engine은 PHP 5에서 사용된 Zend Engine 2의 뒤를 이어 Zend Engine 3이라고 불렸습니다.[59]

PHP의 릴리스 프로세스에 따르면, PHP의 주요 내부 변경 사항 때문에, 그것은 작은 PHP 5 릴리스가 아닌 새로운 주요 버전 번호의 PHP를 받아야 합니다.[60] PHP의 주요 버전들은 코드의 역호환성을 깨도록 허용되어 있으므로 PHP 7은 역호환성을 깨야 하는 PHP를 넘어서는 다른 개선의 기회를 제공했습니다.[citation needed] 특히 다음과 같은 변경 사항이 포함되었습니다.

  • 많은 치명적이거나 복구 가능한 수준의 레거시 PHP 오류 메커니즘이 현대적인 객체 지향 예외로 대체되었습니다.[61]
  • 변수 참조 해제를 위한 구문은 내부적으로 더 일관되고 완전하게 재작업되어 연산자를 사용할 수 있게 되었습니다. ->, [], (),{},그리고. ::, 임의적 의미의 왼쪽 [62]표현으로
  • 기존 PHP 4-스타일 컨스트럭터 메소드에 대한 지원이 중단되었습니다.[63]
  • 진술의 행동은 좀 더 예측 가능하도록 변경되었습니다.[64]
  • 실패 시 null로 반환되는 소수의 클래스에 대한 생성자는 일관성을 위해 대신 예외를 적용하도록 변경되었습니다.[65]
  • PHP 코어에서 유지보수되지 않거나 사용되지 않은 여러 서버 응용 프로그램 프로그래밍 인터페이스(SAPI)와 확장이 제거되었습니다. mysql 연장의[66]
  • 그 행동은 list() 연산자가 문자열에 대한 지원을 제거하도록 변경되었습니다.[67]
  • 기존 ASP 스타일 구분자에 대한 지원이 제거되었습니다. <% 그리고. %> 그리고. <script language="php"> ... </script>.[68]
  • 스위치 문이 여러 개일 수 있도록 허용하는 감독 default 절이 고정되었습니다.[69]
  • 문자열에서 숫자 유형으로 일부 암시적 변환에서 16진수 지원이 제거되었습니다.[70]
  • 왼쪽 교대조와 오른쪽 교대조 운영자는 플랫폼 간에 보다 일관성 있게 행동하도록 변경되었습니다.[71]
  • 부동 소수점 숫자와 정수 간의 변환이 변경되었으며(예: 무한대가 0으로 변환되도록 변경됨) 플랫폼 간에 보다 일관성 있게 구현되었습니다.[71][72]

PHP 7에는 새로운 언어 기능도 포함되어 있습니다. 가장 주목할 만한 것은 기존의 매개변수[73] 유형 선언을 보완하는 함수에 대한 반환 유형 선언과 매개변수 및 반환 유형 선언에서 스칼라 유형(정수, 플로트, 문자열 및 부울)에 대한 지원을 도입했습니다.[74]

PHP 8

PHP 8은 2020년 11월 26일에 출시되었으며, 현재 두 번째로 많이 사용되는 PHP 메이저 버전입니다. PHP 8은 주요 버전이며 이전 버전에서 변경되었습니다.[75][76] 새로운 기능과 주목할 만한 변경 사항은 다음과 같습니다.

Just-In-Time 컴파일

PHP 8에서는 Just-in-Time 컴파일이 지원됩니다.[77]

PHP 8의 JIT 컴파일러는 일부 사용 사례에서 상당한 성능 향상을 제공할 수 있는 반면,[78][79] PHP 개발자 니키타 포포프는 대부분의 웹 사이트에서 PHP 5에서 PHP 7로 업그레이드하는 것보다 성능 향상이 덜할 것이라고 말했습니다.[80] 일반적인 웹 개발 사용 사례보다 수학적 유형의 운영에 대한 실질적인 개선이 더 많이 기대됩니다.[80] 또한 JIT 컴파일러는 일부 사용 사례에 대한 성능 향상으로 인해 일부 코드를 C에서 PHP로 이동할 수 있는 미래 잠재력을 제공합니다.[81]

일치식 추가

PHP 8은 다음을 소개했습니다. match 표정[82] 일치 표현은 개념적으로 다음과 유사합니다. switch 일부 사용 사례를 위해 더 컴팩트한 문입니다.[83] 왜냐면 match 식입니다. 식의 결과는 변수에 할당되거나 함수에서 반환될 수 있습니다.[84]

유형 변경 및 추가

PHP 8은 새로운 조합 유형을 도입했습니다. static 반환형, 그리고 새로운. mixed 활자의[75]

PHP 8은 메타데이터를 클래스에 추가할 수 있도록 해주는 PHP 8에 "Attributes"를 추가했습니다.[75]

throw 진술이 되는 것에서 표현이 되는 것으로 바뀌었습니다.[85] 이를 통해 이전에는 불가능했던 곳에 예외를 둘 수 있습니다.[75]

구문 변경 및 추가

PHP 8은 여러 시나리오에서 대체, 더 간결하거나 더 일관된 구문을 허용하는 변경 사항을 포함합니다. 예를 들어 nullsafe 연산자는 null 연합 연산자와 유사합니다. ??, 그러나 메서드를 호출할 때 사용됩니다.[86] 다음 코드 스니펫은 다음과 같은 경우 오류를 발생시키지 않습니다. getBirthday() null을 반환합니다.

$human_readable_데이트 = $사용자->get birthday()?->디프 포 휴먼(); 

컨스트럭터 속성 프로모션이 "syntactic sugar"로 추가되어 클래스 컨스트럭터에 매개 변수가 전달되면 클래스 속성이 자동으로 설정될 수 있습니다.[75] 이렇게 하면 작성해야 하는 보일러 플레이트 코드의 양이 줄어듭니다.[citation needed]

그 외의 사소한 변경 사항으로는 다음의 사용에 대한 지원이 있습니다. ::class 사용을 위한 대안으로 사용되는 물체에 대해. get_class();[75]트라이 capturing 블록에서 catch가 아닌 캐치, 불일치를 해결하기 위한 변수 구문 조정, 명명된 인수 지원, 파라미터 목록에서 쉼표 뒤로 이동 지원, 배열과 같은 다른 컨텍스트에서 쉼표 뒤로 이동 지원과 일관성을 추가합니다.

표준 라이브러리 변경 및 추가

  • 약한 지도가 PHP 8에 추가되었습니다. A WeakMap 는 개체에 대한 참조를 포함하지만 이러한 참조는 이러한 개체가 가비지 컬렉션이 되는 것을 방지하지 않습니다.[87] 이는 데이터가 캐시되는 시나리오에서 성능 향상을 제공할 수 있습니다. 이는 특히 ORM(객체-관계 매핑)과 관련이 있습니다.[75]
  • 작성을 위한 지원 추가 등 인터페이스에 대한 다양한 조정 DateTime 인터페이스의 개체 및 추가 Stringable 유형 암시에 사용할 수 있는 인터페이스입니다.[citation needed]
  • str_contains(), str_starts_with() 및 str_ends_with();[88] fdiv(); get_debug_type(); 및 get_resource_id()[citation needed]를 포함한 다양한 새로운 함수
  • token_get_all()[citation needed]의 객체 구현

추가 변경사항

  • 유형 주석은 또한 PHP의 C 소스 코드 자체에 추가되어 내부 기능과 방법이 "반성적으로 완전한 유형 정보"를 가질 수 있도록 했습니다.[89]
  • 개인 방법으로[citation needed] 상속
  • 특성 개선의[citation needed] 추상적인 방법

PHP 8.1

PHP 8.1은 2021년 12월 8일에 출시되었으며 이전 버전에 비해 여러 가지 새로운 기능과 개선된 기능을 포함하고 있습니다. 다음은 PHP 8.1의 몇 가지 주요 기능과 개선 사항에 대한 자세한 내용입니다.

  • 조합 유형: 이 기능을 사용하면 변수에 정수 또는 문자열과 같은 여러 유형이 있을 수 있음을 지정할 수 있습니다. 이는 더 넓은 범위의 입력 값을 처리할 수 있기 때문에 보다 유연하고 강력한 코드를 작성하는 데 유용할 수 있습니다.
  • Nullsafe 연산자: 이 연산자를 사용하면 널 참조 걱정 없이 메소드 호출을 연결할 수 있습니다. 예를 들어 null일 수 있는 개체에 메서드를 호출하려면 null safe 연산자를 사용하여 개체가 null이 아닌 경우에만 메서드가 호출되도록 할 수 있습니다.
  • 일치식: 이는 값에 대해 일치를 수행하는 보다 간결하고 유연한 방법입니다. 여러 사례와 관련 값을 지정한 다음 match 수식 값을 기준으로 적절한 대소문자를 선택하는 키워드입니다.
  • 향상된 성능: PHP 8.1은 빠른 어레이 작업 및 메모리 사용률 향상과 같은 다양한 성능 향상을 포함합니다. 이러한 개선은 코드를 더 빠르고 효율적으로 실행하는 데 도움이 될 수 있습니다.
  • 새로운 오류 처리 기능: PHP 8.1에서 새로운 기능 도입 throws 함수가 던질 수 있는 예외와 새 예외를 지정할 수 있는 키워드 assert() 런타임에 특정 조건을 확인하는 데 사용할 수 있는 함수입니다. 이러한 기능은 보다 안정적이고 강력한 코드를 작성하는 데 도움이 될 수 있습니다.
  • 다른 새로운 기능들: PHP 8.1은 명명된 인수에 대한 지원, 속성에 대한 지원(다른 언어의 주석과 유사), 유니코드에 대한 향상된 지원과 같은 다른 새로운 기능들도 포함하고 있습니다.[90]

match expression은 PHP 8.1의 새로운 기능으로 보다 간결하고 유연한 방법으로 가치 일치를 수행할 수 있습니다. 그것은 다음과 같습니다. switch 문, 일부 추가 기능 및 구문 개선 기능이 있습니다.

다음은 사용할 수 있는 방법의 예입니다. match PHP로 표현:

$value = 3;  $ = 경기 ($value) {   0 => '값이 0입니다.',   1, 2, 3 => '가치는 1, 2, 3입니다.',   체납 => '가치는 다른 것입니다.', };  메아리치다 $; // 출력: "값은 1, 2, 3" 

이 예에서는 match 표현식은 의 값을 비교합니다. $value 곱슬머리 교정기에 명시된 다양한 경우로 말입니다. 만약. $value 케이스 중 하나와 일치하며 해당 값이 반환됩니다. 만약 어떤 케이스도 일치하지 않는다면, default 케이스가 사용되었습니다.

다음의 주요 이점 중 하나입니다. match 위의 예제와 같이 단일 경우에 대해 여러 값을 지정할 수 있다는 식입니다. 이것은 코드를 더 간결하고 읽기 쉽게 만드는 데 도움이 될 수 있습니다.

Assert()오류처리

assert() 기능과 throws 키워드는 PHP 8.1의 새로운 오류 처리 기능으로 보다 안정적이고 강력한 코드를 작성하는 데 도움이 됩니다.

assert() 함수는 런타임에 특정 조건을 확인하는 데 사용됩니다. 조건이 충족되지 않으면 함수가 다음을 생성합니다. AssertionError 예외. 예:

주장하다($x > 0, '$x는 0보다 커야 합니다.'); 

이 예에서는 assert() 함수가 확인 여부 $x 0보다 큽니다. 그렇지 않다면, AssertionError "라는 메시지와 함께 예외가 표시됩니다.$x must be greater than zero".

throws 반면에 키워드는 함수나 메서드가 어떤 예외를 던질 수 있는지 지정하는 데 사용됩니다. 이는 코드를 문서화하고 다른 개발자가 기능 및 방법의 작동 방식을 쉽게 이해하는 데 도움이 될 수 있습니다. 예:

기능. 나누다(인트의 $a, 인트의 $b): 인트의 {     한다면 ($b === 0) {         던지다 신규 영(Zero) 오류별 나눗셈('0으로 나눌 수 없음');     }      돌아가다 $a / $b; } 

이 예에서는 divide() 함수는 다음을 사용합니다. throws 입력할 수 있음을 지정하는 키워드 DivisionByZeroError 두 번째 인수가 0인 경우 예외입니다.

전체적으로. assert() 기능과 throws 키워드는 PHP의 오류와 예외를 처리하는 데 유용한 도구이며, 보다 신뢰할 수 있고 강력한 코드를 작성하는 데 도움을 줄 수 있습니다.[91]

열거에 대한 지원

열거에 대한 지원은 PHP 8.1의 가장 중요한 기능 중 하나였습니다.[92] 에눔은 개발자들이 코드베이스에서 프로그램적으로 상태를 시행할 수 있게 해줍니다. 다음은 열거형의 예입니다.

<?  네임스페이스 앱\Enum;  열거한 인보이스 상태: 끈의 {     사례. 초안 = 'draft';     사례. 미결의 = 'pending';     사례. 유급의 = '유료';     사례. 기한이 지난 = 'expired'; } 

기타 PHP 8.1 기능

  • '읽기 전용' 속성에 대한 지원이 추가되었습니다.
  • PHP 7.4에서 연속적으로 번호가 매겨진 키로 배열 언패킹을 도입한 이후, PHP 8.1에서는 문자열 키로 배열 언패킹을 지원합니다.
  • PHP 8.1은 이니셜라이저에서 'new'를 사용할 수 있도록 지원을 추가했습니다.
  • 호출 가능 항목을 만들기 위해 새로운 구문이 추가되었습니다.
  • PHP 8.1은 PHP 8.0에서 조합형을 도입한 이후에 PHP 8.1을 지원하게 되었습니다.

PHP 8.2

PHP 8.2에는 여러 가지 새로운 기능과 향상된 기능이 포함되어 있습니다. 주요 내용은 다음과 같습니다.

  1. 개선된 유형 분산: PHP 8.2는 일반 유형에 대한 개선된 유형 분산을 도입하여 일반 유형이 공변인지, 반변인지 또는 불변인지 지정할 수 있습니다. 따라서 일반 유형을 사용할 때 유형 안전성과 유연성을 향상시키는 데 도움이 될 수 있습니다.
  2. 성능 향상: PHP 8.2에는 JIT 컴파일 속도 향상, 가비지 수집 속도 향상, 대용량 어레이 처리 성능 향상 등 다양한 성능 향상이 포함되어 있습니다. 이러한 개선은 PHP 응용 프로그램을 더 빠르고 효율적으로 만드는 데 도움이 될 수 있습니다.
  3. 감가상각: 일부 기능은 PHP 8.2에서 더 이상 사용되지 않습니다. 문자열 인수와 함께 사용될 때의 assert() 함수와 단일 배열 요소가 있는 list() 컨스트럭트를 포함합니다. 이전 버전의 PHP에서 업그레이드하는 경우 이러한 성능 저하에 유의하는 것이 중요합니다.

다음은 PHP 8.2에서 사용되지 않은 기능의 몇 가지 예입니다.

  1. string 인수를 사용하여 () 함수를 주장합니다. assert() 함수는 런타임 검사를 수행하는 데 사용할 수 있지만 문자열 인수와 함께 사용할 때는 더 이상 사용되지 않습니다. 대신 assert() 함수를 부울 인수 또는 수식과 함께 사용해야 합니다.
  2. 단일 배열 요소가 있는 () construct를 나열합니다. list() 작도를 사용하면 배열의 요소를 개별 변수로 풀 수 있습니다. 단일 배열 요소와 함께 사용할 때는 이 사용법이 혼동되고 오류가 발생하기 쉬운 것으로 간주되었기 때문에 권장되지 않습니다.
  3. create_function (): create_function() 함수는 더 유연하고 사용하기 쉬운 익명 함수로 대체되어 더 이상 사용되지 않습니다.
  4. mb_ereg_replace_callback (): mb_ereg_replace_callback() 함수가 preg_replace_callback() 함수로 대체되어 기능이 유사하고 더 널리 사용되고 있습니다.
  5. 다음에서 허용하지 않는 호출. $callable() 구문(그러나 call_user_func ()에서 허용됨)은 사용되지 않습니다.

새 "랜덤" 확장명

"Random" 확장은 PHP에서 랜덤 값을 생성하기 위한 새로운 객체 지향 API를 제공합니다. 여기에는 난수를 생성하고 상태를 객체 내에 저장하기 위한 다양한 알고리즘을 구현하는 여러 클래스("Engine")가 포함됩니다. 이를 통해 테스트 또는 시뮬레이션과 같은 특정 컨텍스트에서 유용할 수 있는 여러 독립적인 시드 가능 시퀀스를 사용할 수 있습니다.

\Random\Randomizer 클래스는 엔진의 랜덤성을 사용하여 랜덤 정수를 생성하고 배열 또는 문자열을 셔플하며 랜덤 배열 키를 선택하는 등의 고급 인터페이스를 제공합니다. 이는 하위 수준의 엔진 클래스를 직접 사용하지 않고도 이러한 일반적인 작업을 수행할 수 있는 편리한 방법이 될 수 있습니다.

PHP에서 "Random" 확장은 기본적으로 활성화되어 있지 않으며, 기능을 사용하려면 PHP 환경에 설치하고 활성화해야 합니다. 확장에 대한 자세한 내용은 공식 PHP 문서에서 확인하실 수 있습니다.[93]

출고이력

버전 출고일자 까지[94] 지원됨 메모들
이전 버전,이상 유지되지 않음: 1.0 1995년 6월 8일 공식적으로 "개인 홈 페이지 도구(PHP 도구)"라고 불립니다. 이것은 "PHP"라는 이름의 첫 번째 사용입니다.[11]
이전 버전,이상 유지되지 않음: 2.0 1997년 11월 1일 공식적으로 "PHP/FI 2.0"이라고 불립니다. 이것은 실제로 PHP로 특징지어질 수 있는 최초의 릴리스이며, 오늘날까지 지속되고 있는 많은 기능을 갖춘 독립형 언어입니다.
이전 버전,이상 유지되지 않음: 3.0 1998년 6월 6일 2000년10월20일[94] 개발은 한 사람에서 여러 개발자로 이동합니다. Zeev Suraski와 Andi Gutmans는 이 버전의 베이스를 다시 썼습니다.[11]
이전 버전,이상 유지되지 않음: 4.0 2000년[95] 5월 22일 2001년[94] 6월 23일 Zend 엔진이라는 고급 2단계 파싱/실행 태그 구문 분석 시스템을 추가했습니다.[96]
이전 버전,이상 유지되지 않음: 4.1 2001년[97] 12월 10일 2002년3월12일[94] "superglobal"을 소개했습니다.$_GET, $_POST, $_SESSION, 등)[96]
이전 버전,이상 유지되지 않음: 4.2 2002년4월22일[98] 2002년[94] 9월 6일 사용 불가능 register_globals 부차적으로 네트워크를 통해 수신된 데이터는 더 이상 글로벌 네임스페이스에 직접 삽입되지 않으므로 애플리케이션에서 발생할 수 있는 보안 구멍이 막힙니다.[96]
이전 버전,이상 유지되지 않음: 4.3 2002년12월27일[99] 2005년3월31일[94] CGI를 보완하기 위해 명령줄 인터페이스(CLI)를 도입했습니다.[96][100]
이전 버전,이상 유지되지 않음: 4.4 2005년7월11일[101] 2008년[94] 8월 7일 PHP 버전 4.3.x에 대해 컴파일된 확장과 이진 호환성을 깨야 하는 메모리 손상 버그를 수정했습니다.[102]
이전 버전,이상 유지되지 않음: 5.0 2004년[103] 7월 13일 2005년[94] 9월 5일 Zend Engine II에 새로운 객체 모델이 적용되었습니다.[104]
이전 버전,이상 유지되지 않음: 5.1 2005년11월24일[105] 2006년[94] 8월 24일 리엔지니어링된 PHP Engine에서 컴파일러 변수의 도입으로 성능이 향상되었습니다.[104] 데이터베이스에 액세스하기 위한 일관된 인터페이스로 PDO(PHP Data Objects)를 추가했습니다.[106]
이전 버전,이상 유지되지 않음: 5.2 2006년11월2일[107] 2011년[94] 1월 6일 필터 확장을 기본적으로 활성화했습니다. 네이티브 JSON 지원.[104]
이전 버전,이상 유지되지 않음: 5.3 2009년[108] 6월 30일 2014년[94] 8월 14일 네임스페이스 지원, 후기 정적 바인딩, 점프 레이블(제한된 goto), 익명 기능, 폐쇄, PHP 아카이브(par), 순환 참조를 위한 가비지 컬렉션, 향상된 윈도우 지원, sqlite3, mysQL과 함께 작동하는 확장의 기본 라이브러리로서의 libmysql을 대체하는 mysqlnd, fileinfo는 더 나은 MIME 지원, 국제화 확장, ereg 확장의 감가상각을 위한 mime_magic의 대체물입니다.
이전 버전,이상 유지되지 않음: 5.4 2012년[109] 3월 1일 2015년[94] 9월 3일 특성 지원, 짧은 배열 구문 지원. 제거된 항목: register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() 그리고. session_is_registered(). 내장 웹 서버.[110] 기존 기능, 성능 및 메모리 요구량 감소에 대한 몇 가지 개선 사항.
이전 버전,이상 유지되지 않음: 5.5 2013년[111] 6월 20일 2016년[112] 7월 10일 발전기 지원, finally OpCache(Zend Optimizer+ 기반)를 공식 배포에 포함하는 예외 처리 블록.[113]
이전 버전,이상 유지되지 않음: 5.6 2014년[114] 8월 28일 2018년[112] 12월 31일 상수 스칼라 식, 변분 함수, 인수 풀기, 새로운 지수 연산자, 의 확장 use 함수 및 상수에 대한 문, 새 phpdbg SAPI 모듈로서의 디버거 및 기타 작은 개선.[115]
6.x 미출시 네이티브 유니코드 지원을 포함할 계획이었던 PHP의 버림받은 버전입니다.[116][117]
이전 버전,이상 유지되지 않음: 7.0 2015년[118] 12월 3일 2019년[60] 1월 10일 Zend Engine 3(Windows의[119] 성능 향상[58] 및 64비트 정수 지원), 균일한 변수 구문,[62] AST 기반 컴파일 프로세스,[120] 추가 Closure::call(),[121]플랫폼 간 비트 단위[121] 쉬프트 일관성,[122] ?? (null coalese) 연산자,[123] 유니코드 포인트 이스케이프 구문,[124] 리턴 타입 선언,[73] 스칼라 타입(정수, 플로트, 문자열 및 부울) 선언,[74] <=> "스페이스십"[129] 3자 비교 연산자,[125] 생성자 위임,[126] 익명 클래스,[127] 더 단순하고 일관되게 사용 가능한 CSPRNG API,[128] 남아있는 많은 내부 PHP "오류"를 현대적인 예외로 대체하고 [61]네임스페이스에서 여러 항목을 가져오기 위한 속어 구문.
이전 버전,이상 유지되지 않음: 7.1 2016년 12월 1일 2019년[112] 12월 1일 허용 가능한 유형,[130] nullable 유형,[131] void return [132]유형, 클래스 일정한 가시성 수식자,[133] Short list 구문,[134] 다중-[135]
이전 버전,이상 유지되지 않음: 7.2 2017년11월30일 2020년[112] 11월 30일 개체 매개 변수 및 반환 유형 선언,[136] Libsodium 확장,[137] 추상 메서드 덮어쓰기,[138] 매개 변수 유형 확장[139]
이전 버전,이상 유지되지 않음: 7.3 2018년[140] 12월 6일 2021년 12월 6일 Flexible Heredoc 및 Nowdoc 구문,[141] list()[142]를 통한 참조 할당 및 배열 해체 지원, PCRE2 지원,[143] hrtime() 함수[144]
이전 버전,이상 유지되지 않음: 7.4 2019년[145] 11월 28일 2022년 11월 28일 Typed properties 2.0,[146] preloading,[147] null-coalescing assignment operator,[148] improve openssl_random_pseudo_bytes,[149] Weak References,[87] FFI – foreign function interface,[150] always available hash extension,[151] password hash registry,[152] multibyte string splitting,[153] reflection for references,[154] unbundle ext/wddx,[155] new custom object serialization mechanism[156]
이전 버전,이상 유지되지 않음: 8.0 2020년[157] 11월 26일 2023년11월26일 JIT(Just-In-Time) 컴파일,[77] 음의 인덱스로 시작하는 어레이,[158] 더 엄격한/더 깨끗한 언어 의미론(추상적 특성 방법에 대한 검증),[159] 더 깨끗한 문자열에서 숫자 비교,[160] 더 깨끗한 숫자 문자열,[161] 잘못된 산술/비트와이즈 연산자에 대한 유형 오류,[162] 다양한 엔진 오류의 재분류,[163] 내부 함수에 대한 일관된 유형 오류,[164] fatal error for incompatible method signatures[165]), locale-independent float to string conversion,[166] variable syntax tweaks,[167] attributes,[168][169][170][171] named arguments,[172] match expression,[173] constructor property promotion,[174] union types,[175] mixed type,[176] static return type,[177] nullsafe operator,[86] non-capturing catches,[178] throw expression,[85] JSON extension is always available.[179]
이전 버전, 그러나 여전히 유지: 8.1 2021년[180] 11월 25일 2024년 11월 25일 명시적인 8진수 정수 리터럴 표기법,[181][182] 열거형, 읽기 전용 속성,[183] 퍼스트 클래스 호출 가능 구문,[184] 새로운 이니셜라이저, 순수 교차 유형,[185][186] 반환 안 함 유형,[187] 최종 클래스 제약 조건,[188] 섬유[189]
이전 버전, 그러나 여전히 유지: 8.2 2022년[190] 12월 8일 2025년 12월 8일 읽기 전용 클래스,[191] null, false 및 true를 독립형 유형,[192][193] 로케일 독립형 대소문자 변환,[194] 쌍방향 정규 형식 유형,[195] 특성의[196] 상수로 지정
현재 안정 버전: 8.3 2023년11월23일[197] 2026년 11월 23일
범례:
구 버전
이전 버전, 여전히 유지 관리됨
최신버전
최신 미리보기 버전
향후출시

2011년 6월 28일부터 PHP 개발팀은 새로운 버전의 PHP 출시를 위한 타임라인을 구현했습니다.[60] 이 시스템에서는 매월 최소 1회 이상의 릴리스가 발생해야 합니다. 1년에 한 번, 새로운 기능이 포함될 수 있는 마이너 릴리스가 발생해야 합니다. 모든 마이너 릴리스는 최소 2년 동안 보안 및 버그 수정을 지원하고 최소 1년 동안 보안 수정만 수행해야 하며, 마이너 릴리스마다 총 3년 동안 릴리스 프로세스를 수행해야 합니다. 3년 동안의 릴리스 과정에서 작고 자체적인 기능이 없는 한 마이너 릴리스에는 새로운 기능이 도입되지 않습니다.

마스코트

엘레PHPANT, PHP 마스코트

PHP 프로젝트의 마스코트는 1998년 빈센트 폰티에가[198] 디자인한 옆구리에 PHP 로고가 있는 파란색 코끼리엘레PHant입니다.[199] "PHP 문자는 옆으로 보면 코끼리 모양을 이루고 있었습니다."[200] 플러시 장난감 형태일 때는 엘레PH 팬트의 색상이 다른 경우도 있습니다.[citation needed]

이 마스코트의 많은 변형이 수년에 걸쳐 만들어졌습니다. Vincent Pontier의 독창적인 디자인에 기반한 ElePH 바지만이 커뮤니티에 의해 공식적으로 간주됩니다.[201] 이것들은 수집할 수 있고 그 중 일부는 매우 희귀합니다.[202]

구문

내장된 개발 서버에서 실행되는 PHP 7.4의 "Hello World" 응용 프로그램

다음 "Hello, World!" 프로그램HTML 문서에 포함된 PHP 코드로 작성됩니다.

                         <!DOCYPE html><머리><제목>PHP "Hello, World!" 프로그램 </title>/head>< body>         <?             메아리치다 '<p>안녕, 월드!</p>';         ?>      </></html> 

그러나 HTML에 PHP 코드를 삽입하기 위한 요구사항이 없기 때문에, 가장 간단한 버전의 Hello, World!가 클로징 태그와 함께 이렇게 작성될 수 있습니다. ?> 순수한 PHP 코드를 포함하는 파일에서 기본적으로 생략됩니다.[203]

<? 메아리치다 '안녕, 월드!'; 

PHP 해석기는 구분 기호 내에서만 PHP 코드를 실행합니다. 구분 기호 이외의 것은 PHP에 의해 처리되지 않지만 PHP가 아닌 텍스트는 여전히 PHP 코드에 기술된 제어 구조에 따라 처리됩니다. 가장 일반적인 구분자는 <?php 열어서 ?> PHP 섹션을 닫습니다. 단축형 <? 존재하기도 합니다. 이렇게 짧은 구분자를 사용하면 스크립트 파일에 대한 지원이 로컬 PHP 구성에서 비활성화될 수 있으므로 스크립트 파일의 휴대성이 저하됩니다.[204][205] 반대로 에코 단축 태그에 대한 권장 사항은 없습니다. <?=.[206]PHP 5.4.0 이전[206] 버전의 이 짧은 구문은 echo 와만 함께 작동합니다. short_open_tag PHP 5.4.0 이상의 경우 항상 사용 가능한 구성 설정입니다.[207][208][204] 이 모든 구분자의 목적은 자바스크립트 코드 또는 HTML 마크업과 같은 PHP가 아닌 콘텐츠로부터 PHP 코드를 분리하는 것입니다.[209] 그래서 PHP로 작성된 가장 짧은 "Hello, World!" 프로그램은 다음과 같습니다.

<?='안녕, 월드!'; 

구분자의 첫 번째 형태는 <?php 그리고. ?>, XHTML 및 기타 XML 문서에서는 올바르게 형성된 XML 처리 명령을 만듭니다.[210] 즉, 서버측 파일에 있는 PHP 코드와 다른 마크업의 혼합물은 그 자체로 잘 형성된 XML이라는 것을 의미합니다.

변수는 달러 기호접두사가 붙으며 유형을 미리 지정할 필요는 없습니다. PHP 5는 함수가 특정 클래스, 어레이, 인터페이스 또는 콜백 함수의 객체가 되도록 파라미터를 강제할 수 있는 유형 선언을 도입했습니다. 그러나 PHP 7 이전에는 정수나 문자열과 같은 스칼라 유형과 함께 유형 선언을 사용할 수 없었습니다.[74]

아래는 PHP 변수가 어떻게 선언되고 초기화되는지에 대한 예시입니다.

<?     $name = '존';  // 선언 및 초기화되는 문자열 유형 변수     $age = 18;       // 선언 및 초기화되는 정수 유형 변수     $높이 = 5.3;   // 선언되고 초기화되는 이중 유형 변수     메아리치다 $name . ' ' 입니다. . $높이 . 키가 큰\n"; // 연결 변수 및 문자열     메아리치다 "$name 아. $age 나이가 좀 있어요."; // 변수를 문자열에 보간 ?> 

함수 및 클래스 이름과 달리 변수 이름은 대소문자를 구분합니다. 이중 따옴표(")와 세레독 문자열은 변수의 값을 문자열에 보간하는 기능을 제공합니다.[211] PHP는 새로운 행을 자유 형식 언어의 방식으로 공백으로 처리하고, 문은 세미콜론으로 종결됩니다.[212] PHP에는 세 가지 유형의 코멘트 구문이 있습니다. /* */ 블록 및 인라인 코멘트를 표시합니다. // 아니면 # 한 줄 댓글에 사용됩니다.[213]echo 문은 PHP가 텍스트를 출력하기 위해 제공하는 여러 기능 중 하나입니다.[citation needed]

키워드 및 언어 구문 측면에서 PHP는 C 스타일 구문과 유사합니다. if 조건들, for 그리고. while 루프 및 함수 반환은 C, C++, C#, 자바 및 펄과 같은 언어와 구문이 비슷합니다.[citation needed]

데이터 종류

PHP가 느슨하게 입력되어 있습니다. 32, 64 또는 128비트 부호화C-language long type에 해당하는 정수를 플랫폼 종속 범위에 저장합니다. 부호화되지 않은 정수는 특정 상황에서 부호화된 값으로 변환되며, 이는 다른 많은 프로그래밍 언어와 다른 동작입니다.[214] 10진수(양수 및 음수), 8진수, 16진수 2진수 표기법을 사용하여 정수 변수를 할당할 수 있습니다.[citation needed]

부동 소수점 번호도 플랫폼별 범위로 저장됩니다. 부동 소수점 표기법 또는 두 가지 형태의 과학적 표기법을 사용하여 지정할 수 있습니다.[215] PHP에는 JavaC++의 네이티브 부울 유형과 유사한 네이티브 부울 유형이 있습니다. 부울 유형 변환 규칙을 사용하면 0이 아닌 값은 Perl 및 C++[215]에서와 같이 true로, 0이 false로 해석됩니다.

null 데이터 유형은 값이 없는 변수를 나타냅니다. NULL 이 데이터 유형에 허용되는 유일한 값입니다.[215]

"resource" 유형의 변수는 외부 소스의 리소스에 대한 참조를 나타냅니다. 이러한 기능은 일반적으로 특정 확장의 기능에 의해 생성되며, 동일한 확장의 기능에 의해서만 처리될 수 있습니다. 예를 들어 파일, 이미지 및 데이터베이스 리소스가 있습니다.[215]

어레이는 리소스, 오브젝트 및 기타 어레이를 포함하여 PHP가 처리할 수 있는 모든 유형의 요소를 포함할 수 있습니다. 순서는 키와 값이 모두 있는 값 목록과 해시에 보존되며, 두 개를 혼합할 수 있습니다.[215] PHP는 또한 문자열을 지원하며, 이 문자열은 단일 따옴표, 큰 따옴표, nowdoc 또는 redec 구문과 함께 사용할 수 있습니다.[216]

SPL(Standard PHP Library)은 표준 문제 해결을 시도하고 효율적인 데이터 액세스 인터페이스와 클래스를 구현합니다.[217]

기능들

PHP는 코어 언어로 다양한 기능을 정의하며, 다양한 확장 기능도 제공합니다. 이러한 기능은 온라인 PHP 문서에 잘 기록되어 있습니다.[218] 그러나 내장 라이브러리에는 위의 역사에서 설명한 바와 같이 다양한 이름 지정 규칙과 관련 불일치가 있습니다.

개발자는 사용자 지정 기능을 정의할 수 있습니다.

기능. 마이 에이지(인트의 $ birth year): 끈의 {     // 현재 년도에서 생년월일을 빼서 나이를 계산합니다.     $yearsold = 날짜.('Y') - $ birth year;      // 나이를 기술 문자열로 반환합니다.     돌아가다 $yearsold . ($yearsold == 1 ? ' 한 해의 : ' 다년간의); }  메아리치다 '저는 현재' . 마이 에이지(1995) . ' 옛날의.'; 

2023년 기준으로 위 샘플 프로그램의 출력물은 "현재 28살입니다"입니다.

함수 포인터 대신 PHP의 함수는 이름을 포함하는 문자열로 참조할 수 있습니다. 이러한 방식으로, 일반 PHP 함수는 예를 들어 콜백 또는 함수 테이블 내에서 사용될 수 있습니다.[219] 사용자 정의 기능은 프로토타입화하지 않고도 언제든지 생성할 수 있습니다.[218][219] 함수는 코드 블록 내부에 정의되어 함수를 정의해야 하는지 여부에 대한 런타임 결정을 허용할 수 있습니다. 가 있습니다. function_exists 이름이 지정된 함수가 이미 정의되었는지 여부를 결정하는 함수입니다. 함수 호출은 괄호를 사용해야 합니다. 단, PHP 연산자와 함께 호출된 0-인수 클래스 생성자 함수는 제외됩니다. new, 이 경우 괄호는 선택사항입니다.[citation needed]

PHP 4.0.1 이후 create_function(), 주위의 얇은 포장지 eval(), 프로그램 실행 중에 정상적인 PHP 함수를 만들 수 있도록 허용했습니다. PHP 7.2에서 삭제되었고 PHP 8.0에서[220] 제거되어 PHP 5.3에서 추가된 익명 함수나 주변 범위의 변수를 캡처할 수 있는 "closure"[221]를 선호했습니다. 속기 화살표 구문은 PHP 7.4에서 추가되었습니다.[222]

기능. 애더를 구함($x) {     돌아가다 fn($y) => $x + $y; }  $ 가산기 = 애더를 구함(8); 메아리치다 $ 가산기(2);  // "10"을 인쇄합니다. 

위의 예에서, getAdder() 함수가 전달된 인수를 사용하여 종결을 만듭니다. $x, 이것은 추가적인 주장을 필요로 합니다. $y, 그리고 생성된 폐쇄를 발신자에게 반환합니다. 그러한 함수는 변수에 저장될 수 있고, 다른 함수에 매개 변수로 전달될 수 있다는 것을 의미하는 1급 객체입니다.[223]

동적으로 입력된 언어의 경우 PHP는 런타임에 적용되는 함수 매개 변수에 대한 형식 선언을 지원합니다. 이것은 PHP 5.0부터 클래스와 인터페이스, PHP 5.1부터 어레이, PHP 5.4부터 "콜러블", PHP 7.0부터 스칼라(정수, 플로트, 문자열 및 부울) 유형에 대해 지원되고 있습니다.[74] PHP 7.0에는 함수 반환 유형에 대한 유형 선언이 있으며, 매개 변수 목록 뒤에 유형 이름을 붙여 콜론 앞에 표시됩니다.[73] 예를 들면. getAdder 이전 예제의 기능은 PHP 7과 같은 유형으로 주석을 달 수 있습니다.

기능. 애더를 구함(인트의 $x): 폐쇄 {     돌아가다 fn(인트의 $y): 인트의 => $x + $y; }  $ 가산기 = 애더를 구함(8); 메아리치다 $ 가산기(2); // "10"을 인쇄합니다. 메아리치다 $ 가산기(무효의); // 잘못된 유형을 통과했기 때문에 예외를 발생시킵니다. $ 가산기 = 애더를 구함([]); // 또한 예외를 둘 것입니다. 

기본적으로 스칼라 유형 선언은 약한 타이핑 원칙을 따릅니다. 따라서, 예를 들어 매개 변수의 유형이 int, PHP를 사용하면 정수뿐만 아니라 변환 가능한 숫자 문자열, 플로트 또는 부울란을 해당 함수로 전달하고 변환할 수 있습니다.[74] 그러나 PHP 7은 "엄격한 타이핑" 모드를 가지고 있으며, 이 모드를 사용하면 함수 호출에 대한 변환을 허용하지 않고 파일 내에서 반환됩니다.[74]

PHP 객체

기본적인 객체 지향 프로그래밍 기능은 PHP 3에서 추가되었고 PHP 4에서 개선되었습니다.[11] 이를 통해 PHP는 더 많은 추상화를 얻을 수 있어 언어를 사용하는 프로그래머가 창의적인 작업을 더 쉽게 할 수 있습니다. 오브젝트 핸들링은 PHP 5용으로 완전히 다시 작성되어 기능 세트를 확장하고 성능을 향상시켰습니다.[224] 이전 버전의 PHP에서는 객체가 값 유형처럼 처리되었습니다.[224] 이 방법의 단점은 코드가 PHP의 "참조" 변수를 많이 사용해야 한다는 것이었습니다. 객체를 수정하려면 코드의 복사본을 만드는 것이 아니라 PHP의 "참조" 변수를 많이 사용해야 한다는 것이었습니다. 새로운 접근 방식에서 객체는 값이 아닌 핸들로 참조됩니다.[citation needed]

PHP 5는 추상적 수업, 최종 수업, 추상적 방법, 최종 방법과 함께 비공개적이고 보호적인 구성원 변수와 방법을 소개했습니다. 또한 C++와 같은 다른 객체 지향 언어와 유사하게 생성자소멸자를 선언하는 표준 방식과 표준 예외 처리 모델을 도입했습니다. 또한 PHP 5는 인터페이스를 추가하고 여러 인터페이스를 구현할 수 있도록 했습니다. 객체가 런타임 시스템과 상호 작용할 수 있는 특수 인터페이스가 있습니다. Array Access를 구현하는 개체배열 구문과 함께 사용할 수 있고 Iterator 또는 Iterator Aggregate를 구현하는 개체는 foreach 언어 구조 엔진에 가상 테이블 기능이 없으므로 컴파일 시 정적 변수가 참조 대신 이름으로 바인딩됩니다.[225]

개발자가 예약된 단어를 사용하여 개체의 복사본을 만드는 경우 clone, Zend 엔진은 다음과 같이 작동하는지 확인할 것입니다. __clone() 메서드가 정의되었습니다. 그렇지 않으면 기본값으로 호출됩니다. __clone() 개체의 속성을 복사합니다. 만약에 __clone() 메서드가 정의되면 생성된 개체에 필요한 속성을 설정할 수 있습니다. 편의상 엔진은 소스 개체의 속성을 가져오는 기능을 제공하므로 프로그래머는 소스 개체의 값별 복제본으로 시작하여 변경해야 하는 속성만 재정의할 수 있습니다.[226]

키워드를 사용하여 PHP 속성 및 메서드의 가시성을 정의합니다. public, private,그리고. protected. var만 사용하는 경우 기본값은 public입니다. var 의 동의어입니다. public. 신고품목 public 어디서나 액세스할 수 있습니다. protected 상속된 클래스(및 항목을 정의하는 클래스)에 대한 액세스를 제한합니다. private 항목을 정의하는 클래스로만 가시성을 제한합니다.[227] 동일한 유형의 개체는 동일한 인스턴스가 아니더라도 서로의 개인 구성원과 보호된 구성원에 액세스할 수 있습니다.[citation needed]

다음은 PHP 8의 객체 지향 프로그래밍의 기본적인 예입니다.

<?  추상적인 학급 사용자 {     보호된 끈의 $name;      일반의 기능. __(끈의 $name)     {         // 첫 글자를 대문자로 만들고 나머지는 소문자로 만듭니다.         $이것->이름. = ucfirst(힘을 더하다($name));     }      일반의 기능. 환영하다(): 끈의     {         돌아가다 "안녕하세요, 제 이름은" . $이것->이름.;     }      추상적인 일반의 기능. (): 끈의; }  학급 학생입니다 확장된 사용자 {     일반의 기능. __(끈의 $name, 사적인 끈의 $course)     {         부모::__($name);     }      일반의 기능. (): 끈의     {         돌아가다 "나는 배웁니다" . $이것->코스;     } }  학급 선생님. 확장된 사용자 {     일반의 기능. __(끈의 $name, 사적인 배열한 $tachingCours)     {         부모::__($name);     }      일반의 기능. (): 끈의     {         돌아가다 '내가 가르칩니다' . 내막의(", ", $이것->교습과정);     } }  $ = [     신규 학생입니다("앨리스", 컴퓨터 사이언스),     신규 학생입니다("밥", 컴퓨터 사이언스),     신규 학생입니다(찰리, "비즈니스 스터디"), ];  $ = [     신규 선생님.("단", [컴퓨터 사이언스, "정보 보안"]),     신규 선생님.("에린", [컴퓨터 사이언스, "3D 그래픽 프로그래밍"]),     신규 선생님.("프랭키", ["온라인 마케팅", "비즈니스 스터디", "전자상거래"]), ];  각각 ([$, $] ~하듯이 $사용자) {     메아리치다 $사용자[0]::학급 . "s:\n";      array_walk($사용자, 기능. (사용자 $사용자) {         메아리치다 "{$사용자->환영하다()}, {$사용자->()}\n";     }); } 

이 프로그램은 다음을 출력합니다.

학생: 안녕하세요 제 이름은 앨리스이고 컴퓨터 과학을 배웁니다 안녕하세요 제 이름은 밥이고 컴퓨터 과학을 배웁니다 안녕하세요 제 이름은 찰리이고 경영학을 배웁니다 선생님: 안녕하세요 제 이름은 댄이고 컴퓨터 과학, 정보 보안을 가르치고 있습니다 안녕하세요 제 이름은 에린이고 컴퓨터 과학, 3D 그래픽 프로그래밍을 가르치고 있습니다 안녕하세요 제 이름은 프랭키입니다 저는 온라인 마케팅, 비즈니스 스터디, 전자 상거래를 가르치고 있습니다. 

구현

PHP의 유일한 완전한 구현은 단순히 PHP로 알려진 원본입니다. 가장 널리 사용되며 Zend Engine으로 구동됩니다. 다른 구현들과 명확하게 구분하기 위해, 그것은 때때로 비공식적으로 "Zend PHP"라고 불립니다. Zend Engine은 PHP 소스 코드를 즉시 실행할 수 있는 내부 형식으로 컴파일하므로 인터프리터 역할을 합니다.[228][229] PHP에는 공식 사양이 없으므로 Zend PHP의 의미론이 PHP의 의미론을 정의하기 때문에 PHP의 "참조 구현"이기도 합니다. Zend의 작동 방식에 따라 정의되는 PHP의 복잡하고 미묘한 의미론 때문에 경쟁 구현체가 완전한 호환성을 제공하기는 어렵습니다.[citation needed]

PHP의 단일 요청-대본별 실행 모델과 Zend Engine이 인터프리터라는 점은 비효율을 초래하고, 그 결과 PHP의 성능을 향상시키기 위한 다양한 제품들이 개발되었습니다. 웹 페이지에 접근할 때마다 실행 시간을 단축하고 PHP 소스 코드를 컴파일할 필요가 없도록 하기 위해, PHP 스크립트는 opcode 캐시를 사용하여 PHP 엔진의 내부 형식으로 배포될 수도 있고, PHP 스크립트(opcodes)의 컴파일된 형태를 공유 메모리에 캐싱하여 스크립트가 실행될 때마다 코드를 구문 분석하고 컴파일하는 오버헤드를 방지합니다. opcode 캐시인 Zend Opcache는 버전 5.5부터 PHP에 내장되어 있습니다.[230] 널리 사용되는 opcode 캐시의 또 다른 예로는 APC(Alternative PHP Cache)가 있으며, PECL 확장으로 사용할 수 있습니다.[231]

Zend PHP가 여전히 가장 인기 있는 구현이지만, 다른 구현들도 개발되었습니다. 이들 중 일부는 컴파일러이거나 JIT 컴파일을 지원하기 때문에 완전한 PHP 호환성이 없는 대신 Zend PHP보다 성능적인 이점을 제공합니다.[citation needed] 대안적인 구현에는 다음이 포함됩니다.

  • HHVM(HipHop Virtual Machine) – Facebook에서 개발되어 오픈 소스로 이용 가능한 이 소프트웨어는 PHP 코드를 고급 바이트코드(일반적으로 중간 언어)로 변환한 다음 JIT(Just-in-Time) 컴파일러에 의해 실행 시 동적으로 x86-64 머신 코드로 변환되어 최대 6배 성능이 향상됩니다.[232] 그러나 버전 7.2 Zend가 HHVM을 능가했으며,[233] HHVM 3.24가 공식적으로 PHP를 지원하는 마지막 버전입니다.[234]
    • HipHop – Facebook에서 개발되어 오픈 소스로 이용 가능한 HipHop은 PHP 스크립트를 C++ 코드로 변환한 후 결과 코드를 컴파일하여 서버 부하를 최대 50%까지 줄여줍니다. 2013년 초, Facebook은 배포의 어려움과 PHP 언어 전체에 대한 지원 부족 등 여러 가지 이유로 인해 HHVM에 유리하게 평가절하했습니다. create_function() 그리고. eval() 건축물을 [235]짓다
  • 패럿 – 동적 언어를 효율적으로 실행하도록 설계된 가상 머신 교차 번역기 Pipp는 PHP 소스 코드를 패럿 중간 표현으로 변환한 다음 패럿의 바이트 코드로 변환하여 가상 머신에서 실행합니다.
  • PitchPie – 의 2세대 컴파일러입니다.Roslyn 플랫폼에 구축된 CIL(NET Common Intermediate Language) 바이트코드; Palanger의 후속, 여러 아키텍처 구성요소 공유
  • Palanger – PHP를 다음으로 컴파일합니다.PitchPie의 전신인 순공통 중급 언어 바이트코드
  • Quercus – PHP를 Java 바이트코드로 컴파일

라이센싱

PHP는 PHP 라이선스에 따라 출시되는 자유 소프트웨어로,[236] 다음과 같이 규정하고 있습니다.

이 소프트웨어에서 파생된 제품은 "PHP"라고 불릴 수 없으며, group@php.net 의 사전 서면 허가 없이 "PHP"가 그 이름으로 표시될 수도 없습니다. 소프트웨어를 "PHP Foo" 또는 "pfoo"라고 부르지 않고 "Foo for PHP"라고 말하면 PHP와 연동되어 작동함을 나타낼 수 있습니다.

"PHP"의 사용에 대한 이러한 제한으로 인해 PHP 라이센스는 GPL(General Public License)과 호환되지 않는 반면 Zend License는 원래 BSD 라이센스와 유사한 광고 조항으로 인해 호환되지 않습니다.[237]

개발 및 커뮤니티

PHP는 소스 배포에 다양한 자유 및 오픈 소스 라이브러리를 포함하거나 결과적으로 PHP 바이너리 빌드에 사용합니다. PHP는 기본적으로 FTP(File Transfer Protocol) 서버와 Postgre를 포함한 많은 데이터베이스 서버에 액세스하기 위한 모듈이 내장된 인터넷 인식 시스템입니다.SQL, MySQL, Microsoft SQL ServerSQLite(내장 데이터베이스), LDAP 서버 등. 표준 PHP 빌드에서는 stdio 계열의 기능과 같이 C 프로그래머들에게 친숙한 수많은 기능을 사용할 수 있습니다.[238]

PHP를 사용하면 개발자가 PHP 언어에 기능을 추가하기 위해 C로 확장자를 작성할 수 있습니다. PHP 확장은 PHP로 정적으로 컴파일하거나 런타임에 동적으로 로드할 수 있습니다. 윈도우 API, 유닉스 계열 운영 체제에서의 프로세스 관리, 멀티바이트 문자열(유니코드), cURL, 그리고 몇몇 대중적인 압축 포맷에 대한 지원을 추가하기 위해 수많은 확장들이 작성되었습니다. 확장을 통해 사용할 수 있는 다른 PHP 기능에는 IRC(Internet Relay Chat)와의 통합, 이미지 및 Adobe Flash 콘텐츠의 동적 생성, 데이터베이스 액세스에 사용되는 추상화 계층으로서의 PHP 데이터 개체(PDO) [239][240][241][242][243][244][245]음성 합성이 포함됩니다. 문자열과 배열을 다루는 것과 같은 언어의 핵심 기능 중 일부도 확장으로 구현됩니다.[246] PHP 확장 커뮤니티 라이브러리(PECL) 프로젝트는 PHP 언어에 대한 확장 저장소입니다.[247]

Zephir와 같은 일부 다른 프로젝트는 PHP 확장자를 고급 언어로 만들어 네이티브 PHP 확장자로 컴파일할 수 있는 기능을 제공합니다. 이러한 접근 방식은 PHP 확장자를 C로 직접 작성하는 대신 확장자 개발을 단순화하고 프로그래밍 및 테스트에 필요한 시간을 단축합니다.[248]

2018년 12월까지 PHP 그룹은 10명으로 구성되었습니다. This C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski.[249]

Zend Technologies는 프로그래머가 인증된 PHP 개발자가 될 수 있도록 PHP 7[250] 시험(이전에는 PHP 5.5 기반)에 기반한 PHP Certification을 제공합니다.

PHP 파운데이션

PHP
형성2021년 11월 22일, 2년(2021-11-22)
창시자오토매틱, Laravel, Acquia, Zend, Private Packagist, Symfony, Craft CMS, Tideways, Presta Shop, JetBrains[251]
웹사이트https://thep.foundation

2021년 11월 26일, JetBrains 블로그는 PHP의 디자인과 개발을 후원할 The PHP Foundation의 설립을 발표했습니다.[252]

설치 및 구성

PHP 7.1의 phpinfo() 함수 출력 예시

웹 서버에 PHP 지원을 추가하는 방법은 크게 네이티브 웹 서버 모듈 또는 CGI 실행 파일 두 가지가 있습니다. PHP에는 서버 응용 프로그램 프로그래밍 인터페이스(SAPI)라는 직접 모듈 인터페이스가 있으며, 이 인터페이스는 Apache HTTP Server, Microsoft IISiPlanet Web Server를 포함한 많은 웹 서버에서 지원됩니다. OmniHTTPd와 같은 일부 다른 웹 서버는 Microsoft의 웹 서버 모듈 인터페이스인 ISAPI(Internet Server Application Programming Interface)를 지원합니다. PHP가 웹 서버에 대한 모듈 지원이 없는 경우 항상 CGI(Common Gateway Interface) 또는 FastCGI 프로세서로 사용할 수 있습니다. 이 경우 웹 서버는 PHP의 CGI 실행 파일을 사용하여 PHP 파일에 대한 모든 요청을 처리하도록 구성됩니다.[253]

PHP-FPM(FastCGI Process Manager)은 버전 5.3.3부터 공식 PHP 배포와 함께 제공되는 PHP를 위한 대안적인 FastCGI 구현입니다.[254] 이전 FastCGI 구현과 비교할 때, 일부 추가 기능이 포함되어 있으며, 대부분 부하가 많이 걸리는 웹 서버에 유용합니다.[255]

명령줄 스크립트에 PHP를 사용할 경우 PHP CLI(명령줄 인터페이스) 실행 파일이 필요합니다. PHP는 PHP 4.3.0부터 CLI 서버 응용 프로그램 인터페이스(SAPI)를 지원합니다.[256] 이 SAPI의 주요 초점은 PHP를 사용하여 셸 애플리케이션을 개발하는 것입니다. CLI SAPI와 다른 SAPI 간에는 많은 차이점이 있지만 동일한 동작을 많이 공유합니다.[257]

PHP에는 다양한 웹 서버를 위한 SAPI라는 직접 모듈 인터페이스가 있으며,[258] 윈도우에서 PHP 5와 Apache 2.0의 경우 다음과 같은 DLL 파일 형태로 제공됩니다. pph5apache2.[259]dll은 서버가 이해할 수 있는 형태로 구현된 PHP와 웹 서버 간의 인터페이스를 제공하는 모듈입니다. 이 형태는 SAPI로 알려진 것입니다.[citation needed]

다양한 웹 서버 확장을 위한 다양한 종류의 SAPI가 있습니다. 예를 들어, 위에 나열된 것 외에도 PHP 언어를 위한 다른 SAPI에는 공통 게이트웨이 인터페이스와 명령줄 인터페이스가 있습니다.[258][260]

PHP-GTK 확장을 사용하여 데스크톱 그래픽 사용자 인터페이스(GUI) 응용 프로그램을 작성하는 데 PHP를 사용할 수도 있습니다. PHP-GTK는 공식 PHP 배포판에는 포함되어 있지 않으며,[253] 확장판으로 PHP 버전 5.1.0 이상에서만 사용할 수 있습니다. PHP-GTK를 설치하는 가장 일반적인 방법은 소스 코드에서 컴파일하는 것입니다.[261]

클라우드 환경에서 PHP를 설치하여 사용하면 클라우드 고유의 기능을 사용하기 위한 소프트웨어 개발 키트(SDK)가 제공됩니다.[citation needed] 예:

다양한 구성 옵션이 지원되어 핵심 PHP 기능과 확장에 모두 영향을 미칩니다.[264][265] 구성파일 php.ini PHP를 사용하는 방법에 따라 다른 위치에서 검색됩니다.[266] 구성 파일은 다양한 섹션으로 나뉘며 [267]일부 구성 옵션은 웹 서버 구성 내에서 설정할 수도 있습니다.[268]

사용하다

Squid와 함께 여기에 표시된 LAMP 소프트웨어 번들에 대한 광범위한 개요

PHP는 서버측 개발에 특히 적합한 범용 스크립트 언어이며, 이 경우 PHP는 일반적으로 웹 서버에서 실행됩니다. 요청된 파일의 모든 PHP 코드는 PHP 런타임에 의해 실행되며, 일반적으로 웹 사이트 또는 다른 곳에서 사용되는 동적페이지 콘텐츠 또는 동적 이미지를 만듭니다.[269] 명령줄 스크립팅 및 클라이언트 GUI(Graphic User Interface) 응용 프로그램에도 사용할 수 있습니다. PHP는 대부분의 웹 서버, 많은 운영 체제플랫폼에 배포할 수 있으며, 많은 관계형 데이터베이스 관리 시스템(RDBMS)과 함께 사용할 수 있습니다. 대부분의 웹 호스팅 공급자는 고객이 사용할 수 있도록 PHP를 지원합니다. 무료로 이용할 수 있으며, PHP 그룹은 사용자가 자신의 용도에 맞게 구축, 사용자 지정 및 확장할 수 있는 완전한 소스 코드를 제공합니다.[17]

동적 웹 페이지: 서버측 스크립팅(PHP 및 MySQL)의 예

원래 동적 웹 페이지를 만들기 위해 설계된 PHP는 현재 주로 서버스크립팅에 초점을 맞추고 있으며,[270] 마이크로소프트ASPPython과 같이 웹 서버에서 클라이언트로 동적 콘텐츠를 제공하는 다른 서버 측 스크립팅 언어와 유사합니다.NET, Sun Microsystems의 Java Server 페이지 [271]mod_perl. PHP는 또한 빠른 응용 프로그램 개발(RAD)을 촉진하기 위해 빌딩 블록과 디자인 구조를 제공하는 많은 소프트웨어 프레임워크의 개발을 끌어들였습니다.[citation needed] 이 중 일부는 다른 웹 프레임워크와 유사한 기능을 제공하는 PRADO, CakePHP, Symfony, CodeIgniter, Larvel, Yii Framework, PhalconLaminas를 포함합니다.

LAMP 아키텍처는 웹 애플리케이션을 배포하는 방법으로 웹 산업에서 인기를 얻었습니다.[272] PHP는 일반적으로 Linux, Apache, MySQL과 함께 이 번들에서 P로 사용되지만 PPython, Perl 또는 이들 세 가지를 혼합하여 지칭할 수도 있습니다. WAMP와 MAMP라는 유사한 패키지는 WindowsmacOS에서도 사용할 수 있으며 각 운영 체제의 첫 글자는 다음과 같습니다. PHP와 Apache는 모두 macOS 기본 설치의 일부로 제공되지만 이러한 패키지의 사용자는 보다 쉽게 최신 상태를 유지할 수 있는 보다 간단한 설치 메커니즘을 찾고 있습니다.[citation needed]

PHP는 사용자 지정 확장을 C 또는 C++[273][274][275][276][277][278][279][non-primary source needed]로 작성할 수 있는 정확하고 문서화된 방법을 제공합니다. 언어 자체를 추가 라이브러리 형태로 확장하는 것 외에도, 확장 기능은 실행 속도를 향상시키는 방법을 제공하고 있으며, 중요한 경우에는 진정한 컴파일 언어를 사용하여 개선할 여지가 있습니다.[280][281] PHP는 또한 다른 소프트웨어 프로젝트에 자체를 포함하는 잘 정의된 방법을 제공합니다. 이를 통해 PHP를 다른 프로젝트의 내부 스크립트 언어로 쉽게 사용할 수 있으며 프로젝트의 특정 내부 데이터 구조와 긴밀한 인터페이스를 제공할 수 있습니다.[282]

PHP는 "pthreads" PECL 확장에 의해 쓰레드를 사용할 수 있게 되었지만,[283] 코어 언어 수준에서 멀티쓰레드를 지원하지 않기 때문에 엇갈린 평가를 받았습니다.[284][285]

명령 줄 인터페이스, pph-cli 및 두 개의 PHP용 ActiveX Windows Script Host 스크립팅 엔진이 제작되었습니다.[citation needed]

인기 및 사용량 통계

PHP는 MediaWiki,[286] WordPress,[287][288] Joomla, Drupal, Moodle,[289][290] eZ Publish, eZ Platform, SilverStripe포함한 웹 콘텐츠 관리 시스템에 사용됩니다.[291]

2013년 1월 현재 PHP는 2억 4천만 개 이상의 웹 사이트에서 사용되었으며(샘플링된 웹 서버의 39%), 210만 의 웹 서버에 설치되었습니다.[292]

2023년 11월 기준으로 PHP는 서버측 프로그래밍 언어로 76.7%의 웹 사이트에서 사용되었으며,[18] 이는 언어를 확인할 수 있는 이전의 83.5%보다 감소한 수치이며, PHP 7은 해당 버전을 사용하는 웹 사이트 전체의 61.4%로 가장 많이 사용되는 언어 버전입니다.[293]

보안.

2019년 국가 취약성 데이터베이스에 나열된 모든 취약성의 11%가 PHP와 연결되었으며,[294] 역사적으로 1996년 이후 이 데이터베이스에 나열된 모든 취약성의 약 30%가 PHP와 연결되어 있습니다. 언어 자체 또는 핵심 라이브러리의 기술적 보안 결함은 빈번하지 않습니다(2009년 22개, PHP가 목록에 있는 프로그램의 약 20%에 적용되지만 전체의 약 1%).[295] 프로그래머들이 실수를 한다는 것을 인식하고, 일부 언어들은 많은 문제를 유발하는 입력 유효성 검사의 부족을 자동으로 감지하기 위해 얼룩 검사를 포함합니다. 이러한 기능은 PHP용으로 개발되고 있지만,[296] 릴리스에 포함되는 것은 과거에 여러 번 거부되었습니다.[297][298]

웹 호스팅 환경을 위해 특별히 설계된 수호신경화-패치와 같은 고급 보호 패치가 있습니다.[299]

역사적으로 오래된 버전의 PHP는 일부 PHP 응용 프로그램이 보안 문제에 취약하도록 만드는 런타임 설정에 대한 일부 구성 매개 변수와 기본값을 가지고 있었습니다. 이 중에. magic_quotes_gpc 그리고. register_globals[300] 가장 잘 알려진 것은 구성 지침으로, 후자는 모든 URL 매개 변수를 PHP 변수로 만들어 공격자가 초기화되지 않은 전역 변수의 값을 설정하고 PHP 스크립트의 실행을 방해함으로써 심각한 보안 취약성에 대한 경로를 열었습니다. "매직 어록" 및 "레지스터 글로벌" 설정에 대한 지원은 PHP 5.3.0 이후로 중단되었으며 PHP 5.4.0에서 삭제되었습니다.[301]

잠재적인 런타임 설정 취약성의 또 다른 예는 PHP 실행을 비활성화하지 않는 것에서 비롯됩니다(예: engine 업로드된 파일이 저장된 디렉토리에 대한 구성 지침).[302] 이를 활성화하면 업로드된 파일에 포함된 악성 코드가 실행될 수 있습니다.[303][304][305] 가장 좋은 방법은 웹 서버가 사용할 수 있는 문서 루트 외부의 이미지 디렉토리를 찾아 중간 스크립트를 통해 제공하거나 업로드된 파일을 저장하는 디렉토리에 대해 PHP 실행을 비활성화하는 것입니다.[citation needed]

또한 PHP 확장자를 동적으로 로드할 수 있도록(를 통해) enable_dl 구성 지침)[306] 공유 웹 호스팅 환경에서 보안 문제가 발생할 수 있습니다.[307][308]

서로 다른 값이 동일한 것으로 취급되는 묵시적 유형 변환은 때때로 프로그래머의 의도에 반하여 보안 문제로 이어질 수 있습니다. 예를 들어, 비교 결과는 다음과 같습니다. true , 숫자로 파싱 가능한 문자열은 숫자로 변환되기 때문에, 이 경우 첫 번째 비교값은 0인 값(0×101234)을 갖는 과학적 표기로 처리됩니다. MD5 암호 해시를 비교할 때 이와 같은 오류로 인해 Simple Machine Forum,[309] Typo3[310]phpBB에서[311] 인증 취약성이 발생했습니다. 권장되는 방법은 hash_equals()를 사용하는 것입니다(타이밍 공격 안전을 위해). strcmp 또는 신원 연산자(Identity operator)===), 결과적으로 false.[312]

Zone-H에서 발표한 2013년 170,000개 이상의 웹 사이트 손상 분석에서 가장 자주 사용된 기법은 파일 포함 취약성을 이용한 것으로, 대부분 PHP 언어 구성의 안전하지 않은 사용과 관련이 있습니다. include, require,그리고. allow_url_fopen.[313][314]

2021년 4월 현재, W3Techs는 PHP를 사용하는 웹사이트의 64%가 7.2 이상 버전을 사용하고 있으며(더 이상 PHP 개발팀에서 지원하지 않음), 전체 PHP 웹사이트의 35%가 5.6 이상 버전을 사용하고 있다고 보고했습니다.[315]

2021년 9월 현재 버전 5는 여전히 전체 웹사이트의 24.5%에서 사용되고 있습니다.[316] PHP 버전 7 또는 8로 마이그레이션하여 사용하는 것이 좋습니다. random_int() 대신에 rand() 아니면 mt_rand(), 후자의 기능은 암호학적으로 안전하지 않기 때문입니다.[citation needed] PHP 엔트로피 소스에 대해 수행할 수 있는 공격은 "seed attack"과 "state recovery attack" 두 가지입니다.[citation needed] 현재[when?] GPU 기술을 사용하면 공격자는 250달러 GPU로 초당30 최대 2개의 MD5 계산을 수행할 수 있는 반면, 추가로 500달러를 사용하면32 최대 2개의 계산에 도달할 수 있습니다.[317] 생일 공격(birthday attack)과 결합하면 심각한 보안 취약성이 발생할 수 있습니다.[citation needed]

참고 항목

참고문헌

  1. ^ a b Lerdorf, Rasmus (June 8, 1995). "Announce: Personal Home Page Tools (PHP Tools)". Retrieved 7 June 2011.
  2. ^ a b Lerdorf, Rasmus (2007-04-26). "PHP on Hormones – history of PHP presentation by Rasmus Lerdorf given at the MySQL Conference in Santa Clara, California". The Conversations Network. Archived from the original on 2019-01-06. Retrieved 2009-12-11.
  3. ^ ""PHP 8.3.0 Released!"".
  4. ^ "PHP: Function arguments – Manual". secure.php.net.
  5. ^ "PHP: Release Archives (museum)". museum.php.net.
  6. ^ "PHP: Preface – Manual".
  7. ^ Stogov, Dmitry [@dstogov] (2015-12-04). "It's not a secret that some #PHP7 optimization ideas came from HHVM, LuaJIT and V8. Thank you @HipHopVM @SaraMG. #php7thankyou" (Tweet) – via Twitter.
  8. ^ "PHP: Hypertext Preprocessor". www.php.net. Retrieved 2020-02-12.
  9. ^ a b Krill, Paul (2013-11-18). "Believe the hype: PHP founder backs Facebook's HipHop technology". InfoWorld. Retrieved 2022-10-13.
  10. ^ "Announce: Personal Home Page Tools (PHP Tools)". groups.google.com. Retrieved 2022-11-03.
  11. ^ a b c d e f g h i "History of PHP and related projects". The PHP Group. Retrieved 2008-02-25.
  12. ^ "History of PHP". php.net.
  13. ^ Olsson, Mikael (2013-09-04). PHP Quick Scripting Reference. Apress. ISBN 978-1-4302-6284-8.
  14. ^ PHP 매뉴얼: 서문, www.php.net .
  15. ^ "Introduction: What can PHP do?". PHP Manual. Retrieved 2009-03-05.
  16. ^ helicopter: Port of node-ar-drone which allows user to control a Parrot AR Drone over PHP: jolicode/php-ar-drone, JoliCode, 2019-01-11, retrieved 2019-02-23
  17. ^ a b "Embedding PHP in HTML". O'Reilly. 2001-05-03. Archived from the original on 2008-02-19. Retrieved 2008-02-25.
  18. ^ a b c "Usage statistics of PHP for websites". W3Techs – World Wide Web Technology Surveys. W3Techs. Retrieved 29 November 2023.
  19. ^ https://w3techs.com/technologies/details/pl-php/8
  20. ^ PHP: 지원되는 버전
  21. ^ PHP: 지원되지 않는 분기
  22. ^ "LTS/Extended – Debian Wiki". wiki.debian.org. Retrieved 2023-09-11.
  23. ^ "Information on source package php7.4". Security Bug Tracker. Debian. Retrieved 11 Jun 2023.
  24. ^ Lerdorf, Rasmus (2012-07-20). "I wonder why people keep writing that PHP was ever written in Perl. It never was. #php". Twitter. Retrieved 2014-09-04.
  25. ^ Lerdorf, Rasmus (2007-04-26). "PHP on Hormones". The Conversations Network. Archived from the original (mp3) on 2019-01-06. Retrieved 2009-06-22.
  26. ^ Lerdorf, Rasmus (1995-06-08). "Announce: Personal Home Page Tools (PHP Tools)". Newsgroup: comp.infosystems.www.authoring.cgi. Retrieved 2006-09-17.
  27. ^ Lerdorf, Rasmus (2007). "Slide 3". slides for 'PHP on Hormones' talk. The PHP Group. Retrieved 2009-06-22.
  28. ^ "Rasmus Lerdorf, Senior Technical Yahoo: PHP, Behind the Mic". 2003-11-19. Archived from the original on 2013-07-28.
  29. ^ "Problems with PHP". Retrieved 20 December 2010.
  30. ^ "php.internals: Re: Function name consistency". news.php.net. 2013-12-28. Retrieved 2014-02-09.
  31. ^ Rasmus Lerdorf (Dec 16, 2013). "Re: Flexible function naming". Newsgroup: php.internals. Retrieved December 26, 2013.
  32. ^ "PHP – Acronym Meaning Vote". PHP.net. Archived from the original on August 15, 2000.
  33. ^ "Zend Engine version 2.0: Feature Overview and Design". Zend Technologies Ltd. Archived from the original on 2006-07-19. Retrieved 2006-09-17.
  34. ^ "php.net 2007 news archive". The PHP Group. 2007-07-13. Retrieved 2008-02-22.
  35. ^ Kerner, Sean Michael (2008-02-01). "PHP 4 is Dead—Long Live PHP 5". InternetNews. Archived from the original on 2018-08-06. Retrieved 2018-12-16.
  36. ^ Trachtenberg, Adam (2004-07-15). "Why PHP 5 Rocks!". O'Reilly. Archived from the original on 2016-03-31. Retrieved 2008-02-22.
  37. ^ "Late Static Binding in PHP". Digital Sandwich. 2006-02-23. Retrieved 2008-03-25.
  38. ^ "Static Keyword". The PHP Group. Retrieved 2008-03-25.
  39. ^ "GoPHP5". Archived from the original on 2011-07-17.
  40. ^ "PHP projects join forces to Go PHP 5" (PDF). GoPHP5 Press Release. Archived from the original (PDF) on 2019-08-04. Retrieved 2008-02-23.
  41. ^ "GoPHP5". GoPHP5. Archived from the original on 2011-04-27. Retrieved 2008-02-22.
  42. ^ "PHP Installation and Configuration". php.net. Retrieved 2013-10-29.
  43. ^ "PHP for Windows: Binaries and sources releases (5.3)". php.net. Retrieved 2013-10-29.
  44. ^ "PHP for Windows: Binaries and sources releases (5.4)". php.net. Retrieved 2013-10-29.
  45. ^ "PHP for Windows: Binaries and sources releases (5.5)". php.net. Retrieved 2013-10-29.
  46. ^ "PHP: Supported Versions".
  47. ^ "Types: Strings (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  48. ^ "Details of the String Type (PHP Manual)". PHP.net. Retrieved 2021-09-22.
  49. ^ Andrei Zmievski (2005-08-10). "PHP Unicode support design document" (Mailing list). Retrieved 2014-02-09.
  50. ^ "PHP 5.5 or 6.0". Retrieved 2014-02-09.
  51. ^ Andrei Zmievski (2011-04-22). "The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6". Retrieved 2014-02-09.
  52. ^ Rasmus Lerdorf (2010-03-11). "PHP 6" (Mailing list). Retrieved 2014-02-07.
  53. ^ "The Neverending Muppet Debate of PHP 6 v PHP 7". Archived from the original on 2015-11-19. Retrieved 2015-11-19.
  54. ^ "RFC: Name of Next Release of PHP". php.net. 2014-07-07. Retrieved 2014-07-15.
  55. ^ "Re: [PHP-DEV] [VOTE] [RFC] Name of Next Release of PHP (again)". 2014-07-30. Retrieved 2014-07-30.
  56. ^ "phpng: Refactored PHP Engine with Big Performance Improvement". news.php.net.
  57. ^ "PHP: rfc:phpng". php.net. Retrieved 16 December 2014.
  58. ^ a b "PHP: phpng". php.net. Retrieved 2014-07-15.
  59. ^ "Merge branch 'ZendEngine3'". github.com. 2014-12-05. Retrieved 2014-12-05.
  60. ^ a b c "PHP: Release Process". 2011-06-20. Retrieved 2013-10-06.
  61. ^ a b "PHP RFC: Exceptions in the engine (for PHP 7)". php.net. Retrieved 2015-05-21.
  62. ^ a b "PHP RFC: Uniform Variable Syntax". php.net. 2014-05-31. Retrieved 2014-07-30.
  63. ^ "Online PHP editor output for udRhX". 3v4l.org.
  64. ^ "PHP RFC: Fix "foreach" behavior". php.net. Retrieved 2015-05-21.
  65. ^ "PHP RFC: Constructor behaviour of internal classes". php.net. Retrieved 2015-05-21.
  66. ^ "PHP RFC: Removal of dead or not yet PHP7 ported SAPIs and extensions". php.net. Retrieved 2015-05-21.
  67. ^ "PHP RFC: Fix list() behavior inconsistency". php.net. Retrieved 2015-05-21.
  68. ^ "PHP RFC: Remove alternative PHP tags". php.net. Retrieved 2015-05-21.
  69. ^ "PHP RFC: Make defining multiple default cases in a switch a syntax error". php.net. Retrieved 2015-05-21.
  70. ^ "PHP RFC: Remove hex support in numeric strings". php.net. Retrieved 2015-05-21.
  71. ^ a b "PHP RFC: Integer Semantics". php.net. Retrieved 2015-05-21. Making NaN and Infinity always become zero when cast to integer means more cross-platform consistency, and is also less surprising than what is currently produces
  72. ^ "PHP RFC: ZPP Failure on Overflow". php.net. Retrieved 2015-05-21.
  73. ^ a b c "RFC: Return Types". php.net. 2015-01-27. Retrieved 2015-01-28.
  74. ^ a b c d e f "RFC: Scalar Type Declarations". php.net. 2015-03-16. Retrieved 2015-03-17.
  75. ^ a b c d e f g Brent. "What's new in PHP 8". Stitcher. Retrieved 22 September 2020.
  76. ^ "PHP 8 Released". PHP. Retrieved 27 November 2020.
  77. ^ a b "PHP: rfc:jit". wiki.php.net. Retrieved 2019-04-05.
  78. ^ Brent. "PHP 8: JIT performance in real-life web applications". Stitcher.io. Retrieved 4 October 2020.
  79. ^ Rethams, Derick. "PHP 8: A Quick Look at JIT".
  80. ^ a b Popov, Nikita. ""What's new in PHP 8.0?" Nikita Popov". PHP fwdays. Archived from the original on 2021-12-11. Retrieved 4 October 2020.
  81. ^ Daniele, Carlo (25 May 2020). "What's New in PHP 8 (Features, Improvements, and the JIT Compiler)". Kinsta. Retrieved 24 December 2020.
  82. ^ Redmond, Paul (15 July 2020). "Match Expression is Coming to PHP 8". Laravel News. Retrieved 4 October 2020.
  83. ^ "PHP 8.0: Match Expressions". PHP Watch. Retrieved 4 October 2020.
  84. ^ Barnes, Eric (27 November 2020). "PHP 8 is now Released!". Laravel News. Retrieved 24 December 2020.
  85. ^ a b "PHP RFC: throw expression". wiki.php.net. Retrieved 14 August 2020.
  86. ^ a b "PHP RFC: Nullsafe operator". wiki.php.net. Retrieved 14 August 2020.
  87. ^ a b "PHP: rfc:weakrefs". wiki.php.net. Retrieved 2019-04-05.
  88. ^ Merchant, Amit (13 June 2020). "These new string functions are coming in PHP 8". Amit Merchant. Retrieved 4 October 2020.
  89. ^ Popov, Nikita. "Call for participation: Annotating internal function argument and return types". Externals. Retrieved 19 November 2020.
  90. ^ "PHP: PHP 8.1.0 Release Announcement". www.php.net. Retrieved 2022-01-08.
  91. ^ "PHP: Migrating from PHP 8.0.x to PHP 8.1.x - Manual". www.php.net. Retrieved 2022-12-23.
  92. ^ "Great new PHP 8.1 features: enums, read-only & more (2021)". RJS. 2021-12-21. Retrieved 2022-01-08.
  93. ^ "PHP: Documentation". www.php.net. Retrieved 2022-12-23.
  94. ^ a b c d e f g h i j k l "Unsupported Branches". php.net. Retrieved 2019-07-31.
  95. ^ "PHP 4.0.0 Released". Retrieved 25 October 2020.
  96. ^ a b c d "PHP: PHP 4 ChangeLog". The PHP Group. 2008-01-03. Retrieved 2008-02-22.
  97. ^ "PHP 4.1.0 Release Announcement". Retrieved 25 October 2020.
  98. ^ "PHP 4.2.0 Release Announcement". Retrieved 25 October 2020.
  99. ^ "PHP 4.3.0 Release Announcement". Retrieved 25 October 2020.
  100. ^ "Using PHP from the command line". PHP Manual. The PHP Group. Retrieved 2009-09-11.
  101. ^ "PHP 4.4.0 Release Announcement". Retrieved 25 October 2020.
  102. ^ "PHP 4.4.0 Release Announcement". PHP Mannual. The PHP Group. Retrieved 2013-11-24.
  103. ^ "PHP 5.0.0 Released!". Retrieved 25 October 2020.
  104. ^ a b c "PHP: PHP 5 ChangeLog". The PHP Group. 2007-11-08. Retrieved 2008-02-22.
  105. ^ "PHP 5.1.0 Release Announcement". Retrieved 25 October 2020.
  106. ^ "PHP manual: PDO". The PHP Group. 2011-11-15. Retrieved 2011-11-15.
  107. ^ "PHP 5.2.0 Release Announcement". Retrieved 25 October 2020.
  108. ^ "PHP 5.3.0 Release Announcement". Retrieved 25 October 2020.
  109. ^ "PHP 5.4.0 Release Announcement". Retrieved 25 October 2020.
  110. ^ "Built-in web server". Retrieved March 26, 2012.
  111. ^ "PHP 5.5.0 Release Announcement". Retrieved 25 October 2020.
  112. ^ a b c d "Supported Versions". php.net. Retrieved 2017-12-13.
  113. ^ "PHP 5.5.0 changes". php.net. Retrieved 2015-03-03.
  114. ^ "PHP 5.6.0 Release Announcement". Retrieved 25 October 2020.
  115. ^ "Migrating from PHP 5.5.x to PHP 5.6.x". php.net. Retrieved 2014-03-24.
  116. ^ "Resetting PHP 6". There have been books on the shelves purporting to cover PHP 6 since at least 2008. But, in March 2010, the PHP 6 release is not out – in fact, it is not even close to out. Recent events suggest that PHP 6 will not be released before 2011 – if, indeed, it is released at all.
  117. ^ "PHP 7 moves full speed ahead". 2014-10-31. Recent versions of PHP have been part of the 5.x release series, but there will be no PHP 6. "We're going to skip [version] 6, because years ago, we had plans for a 6, but those plans were very different from what we're doing now," Gutmans said. Going right to version 7 avoids confusion.
  118. ^ "News Archive – 2018: PHP 7.2.9 Released". php.net. 2018-08-16. Retrieved 2018-08-16.
  119. ^ "PHP: rfc:size_t_and_int64_next". php.net. Retrieved 16 December 2014.
  120. ^ "PHP: rfc:abstract_syntax_tree". php.net. Retrieved 16 December 2014.
  121. ^ "PHP: rfc:closure_apply". php.net. Retrieved 16 December 2014.
  122. ^ "PHP: rfc:integer_semantics". php.net. Retrieved 16 December 2014.
  123. ^ "PHP: rfc:isset_ternary". php.net. Retrieved 16 December 2014.
  124. ^ "RFC: Unicode Codepoint Escape Syntax". 2014-11-24. Retrieved 2014-12-19.
  125. ^ "Combined Comparison (Spaceship) Operator". php.net. Retrieved 2015-05-21.
  126. ^ "PHP RFC: Generator Delegation". php.net. Retrieved 2015-05-21.
  127. ^ "PHP RFC: Anonymous Classes". php.net. Retrieved 2015-05-21.
  128. ^ "PHP RFC: Easy User-land CSPRNG". php.net. Retrieved 2015-05-21.
  129. ^ "PHP RFC: Group Use Declarations". php.net. Retrieved 2015-05-21.
  130. ^ "PHP: rfc:iterable". php.net. 2016-06-10. Retrieved 2023-06-30.
  131. ^ "PHP: rfc:nullable_types". php.net. 2014-04-10. Retrieved 2023-06-30.
  132. ^ "PHP: rfc:void_return_type". php.net. 2015-11-09. Retrieved 2015-11-14.
  133. ^ "PHP: rfc:class_constant_visibility". php.net. 2015-10-27. Retrieved 2015-12-08.
  134. ^ "PHP: rfc:short_list_syntax". php.net. 2016-04-07. Retrieved 2023-06-30.
  135. ^ "PHP: rfc:multiple-catch". php.net. 2016-03-06. Retrieved 2023-06-30.
  136. ^ "PHP: rfc:object-typehint". wiki.php.net.
  137. ^ "PHP: rfc:libsodium". wiki.php.net.
  138. ^ "PHP: rfc:allow-abstract-function-override". wiki.php.net.
  139. ^ "PHP: rfc:parameter-no-type-variance". wiki.php.net.
  140. ^ "PHP: todo:php73". wiki.php.net.
  141. ^ "PHP: rfc:flexible_heredoc_nowdoc_syntaxes". wiki.php.net.
  142. ^ "PHP: rfc:list_reference_assignment". wiki.php.net.
  143. ^ "PHP: rfc:pcre2-migration". wiki.php.net.
  144. ^ "PHP: hrtime – Manual". php.net.
  145. ^ "PHP 7.4.0 Released!". php.net. Retrieved 2019-11-28.
  146. ^ "PHP: rfc:typed_properties_v2". wiki.php.net. Retrieved 2019-04-04.
  147. ^ "PHP: rfc:preload". wiki.php.net. Retrieved 2019-04-04.
  148. ^ "PHP: rfc:null_coalesce_equal_operator". wiki.php.net. Retrieved 2019-04-04.
  149. ^ "PHP: rfc:improve-openssl-random-pseudo-bytes". wiki.php.net. Retrieved 2019-04-04.
  150. ^ "PHP: rfc:ffi". wiki.php.net. Retrieved 2019-04-05.
  151. ^ "PHP: rfc:permanent_hash_ext". wiki.php.net. Retrieved 2019-04-05.
  152. ^ "PHP: rfc:password_registry". wiki.php.net. Retrieved 2019-04-05.
  153. ^ "PHP: rfc:mb_str_split". wiki.php.net. Retrieved 2019-04-05.
  154. ^ "PHP: rfc:reference_reflection". wiki.php.net. Retrieved 2019-04-05.
  155. ^ "PHP: rfc:deprecate-and-remove-ext-wddx". wiki.php.net. Retrieved 2019-04-05.
  156. ^ "PHP: rfc:custom_object_serialization". wiki.php.net. Retrieved 2019-04-05.
  157. ^ "PHP: Supported Versions". php.net. Retrieved 2023-11-26.
  158. ^ "PHP: rfc:negative_array_index". wiki.php.net. Retrieved 2019-04-05.
  159. ^ "PHP RFC: Validation for abstract trait methods". wiki.php.net. Retrieved 14 August 2020.
  160. ^ "PHP RFC: Saner string to number comparisons". wiki.php.net. Retrieved 14 August 2020.
  161. ^ "PHP RFC: Saner numeric strings". wiki.php.net. Retrieved 14 August 2020.
  162. ^ "PHP RFC: Stricter type checks for arithmetic/bitwise operators". wiki.php.net. Retrieved 14 August 2020.
  163. ^ "PHP RFC: Reclassifying engine warnings". wiki.php.net. Retrieved 14 August 2020.
  164. ^ "PHP: rfc:consistent_type_errors". wiki.php.net. Retrieved 2019-04-05.
  165. ^ "PHP: rfc:lsp_errors". wiki.php.net. Retrieved 2019-05-26.
  166. ^ "PHP RFC: Locale-independent float to string cast". wiki.php.net. Retrieved 14 August 2020.
  167. ^ "PHP RFC: Variable Syntax Tweaks". wiki.php.net. Retrieved 14 August 2020.
  168. ^ "PHP RFC: Attributes V2". wiki.php.net. Retrieved 14 August 2020.
  169. ^ "PHP RFC: Attribute Amendments". wiki.php.net. Retrieved 14 August 2020.
  170. ^ "PHP RFC: Shorter Attribute Syntax". wiki.php.net. Retrieved 2020-06-20.
  171. ^ "PHP RFC: Shorter Attribute Syntax Change". wiki.php.net. Retrieved 14 August 2020.
  172. ^ "PHP RFC: Named Arguments". wiki.php.net. Retrieved 14 August 2020.
  173. ^ "PHP RFC: Match expression v2". wiki.php.net. Retrieved 14 August 2020.
  174. ^ "PHP RFC: Constructor Property Promotion". wiki.php.net. Retrieved 14 August 2020.
  175. ^ "PHP RFC: Union Types 2.0". wiki.php.net. Retrieved 14 August 2020.
  176. ^ "PHP RFC: Mixed Type v2". wiki.php.net. Retrieved 14 August 2020.
  177. ^ "PHP RFC: Static return type". wiki.php.net. Retrieved 14 August 2020.
  178. ^ "PHP RFC: non-capturing catches". wiki.php.net. Retrieved 14 August 2020.
  179. ^ Andre, Tyson. "PHP RFC: Always available JSON extension". PHP. Retrieved 25 October 2020.
  180. ^ "PHP: todo:php81". wiki.php.net. Retrieved 2022-06-16.
  181. ^ "PHP RFC: Explicit octal integer literal notation". wiki.php.net. Retrieved 2020-11-25.
  182. ^ "PHP RFC: Enumerations". wiki.php.net. Retrieved 2021-03-25.
  183. ^ "PHP: rfc:readonly_properties_v2". wiki.php.net. Retrieved 2021-11-26.
  184. ^ "PHP: rfc:first_class_callable_syntax". wiki.php.net. Retrieved 2021-11-26.
  185. ^ "PHP: rfc:new_in_initializers". wiki.php.net. Retrieved 2021-11-26.
  186. ^ "PHP: rfc:pure-intersection-types". wiki.php.net. Retrieved 2021-11-26.
  187. ^ "PHP: rfc:noreturn_type". wiki.php.net. Retrieved 2021-11-26.
  188. ^ "PHP: rfc:final_class_const". wiki.php.net. Retrieved 2021-11-26.
  189. ^ "PHP: rfc:fibers". wiki.php.net. Retrieved 2021-11-26.
  190. ^ "PHP: todo:php82". wiki.php.net. Retrieved 2022-06-16.
  191. ^ "PHP: rfc:readonly_classes". wiki.php.net. Retrieved 2022-06-16.
  192. ^ "PHP: rfc:null-false-standalone-types". wiki.php.net. Retrieved 2022-06-16.
  193. ^ "PHP: rfc:true-type". wiki.php.net. Retrieved 2022-06-16.
  194. ^ "PHP: rfc:strtolower-ascii". wiki.php.net. Retrieved 2022-06-16.
  195. ^ "PHP: rfc:dnf_types". wiki.php.net. Retrieved 2023-02-07.
  196. ^ "PHP: rfc:constants_in_traits". wiki.php.net. Retrieved 2023-02-07.
  197. ^ "PHP 8.3.0 Released!". php.net. 23 November 2023. Retrieved 24 November 2023.
  198. ^ "PHP: ElePHPant". 4 Oct 2014. Retrieved 4 Oct 2014.
  199. ^ "Redirecting…". wwphp-fb.github.io.
  200. ^ "The PHP Mascot's Birth - Creator Of The elePHPant Vincent Pontier Reveals The True Story!". 7php.com. 2014-01-06.
  201. ^ "PHP: ElePHPant". www.php.net.
  202. ^ "A Field Guide to Elephpants". afieldguidetoelephpants.net.
  203. ^ "tags – Manual". php.net. Retrieved 2014-02-17.
  204. ^ a b "PHP: rfc:shortags". php.net. 2008-04-03. Retrieved 2014-05-08.
  205. ^ "PHP: Basic syntax". The PHP Group. Retrieved 2008-02-22.
  206. ^ "Basic Coding Standard". PHP Framework Interoperability Group. Retrieved 2016-01-03.
  207. ^ "echo – Manual". php.net. Retrieved 2014-02-17.
  208. ^ "Description of core php.ini directives – Manual". php.net. 2002-03-17. Retrieved 2014-02-17.
  209. ^ "Your first PHP-enabled page". The PHP Group. Retrieved 2008-02-25.
  210. ^ Bray, Tim; et al. (26 November 2008). "Processing Instructions". Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C. Retrieved 2009-06-18.
  211. ^ "Variables". The PHP Group. Retrieved 2008-03-16.
  212. ^ "Instruction separation". The PHP Group. Retrieved 2008-03-16.
  213. ^ "Comments". The PHP Group. Retrieved 2008-03-16.
  214. ^ "Integers in PHP, running with scissors, and portability". MySQL Performance Blog. March 27, 2007. Retrieved 2007-03-28.
  215. ^ a b c d e "Types". The PHP Group. Retrieved 2008-03-16.
  216. ^ "Strings". The PHP Group. Retrieved 2008-03-21.
  217. ^ "SPL – StandardPHPLibrary". PHP.net. March 16, 2009. Retrieved 2009-03-16.
  218. ^ a b "User-defined functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  219. ^ a b "Variable functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  220. ^ "create_function() (PHP manual)". php.net. 2022-04-06. Retrieved 2022-05-04.
  221. ^ "Anonymous functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  222. ^ "Arrow Functions (PHP manual)". php.net. Retrieved 2021-01-25.
  223. ^ Christian Seiler; Dmitry Stogov (2008-07-01). "Request for Comments: Lambda functions and closures". php.net. Retrieved 2014-07-07.
  224. ^ a b "PHP 5 Object References". mjtsai.com. Retrieved 2008-03-16.
  225. ^ "Classes and Objects (PHP 5)". The PHP Group. Retrieved 2008-03-16.
  226. ^ "Object cloning". The PHP Group. Retrieved 2008-03-16.
  227. ^ "Visibility (PHP Manual)". theserverpages.com. 2005-05-19. Archived from the original on 2010-09-24. Retrieved 2010-08-26.
  228. ^ "How do computer languages work?". Archived from the original on 2011-07-16. Retrieved 2009-11-04.
  229. ^ Gilmore, W. Jason (2006-01-23). Beginning PHP and MySQL 5: From Novice to Professional. Apress. p. 43. ISBN 1590595521.
  230. ^ "[VOTE] Integrating Zend Optimizer+ into the PHP distribution". news.php.net. Retrieved 2013-03-08.
  231. ^ "Alternative PHP Cache". PHP.net. Archived from the original on 2013-11-15. Retrieved 2013-09-21.
  232. ^ "We are the 98.5% (and the 16%) « HipHop Virtual Machine". hhvm.com. December 2013. Retrieved 2014-02-23.
  233. ^ "The Definitive PHP 5.6, 7.0, 7.1, 7.2 & 7.3 Benchmarks (2019)". 2019-01-14. Retrieved 2019-04-19.
  234. ^ Krill, Paul (2017-09-20). "Forget PHP! Facebook's HHVM engine switches to Hack instead". InfoWorld. Retrieved 2019-02-06.
  235. ^ "Announcement on GitHub removing HPHPc support". GitHub. Retrieved 2013-05-24.
  236. ^ "The PHP License, version 3.01". Retrieved 2010-05-20.
  237. ^ "GPL-Incompatible, Free Software Licenses". Various Licenses and Comments about Them. Free Software Foundation. Retrieved 2011-01-03.
  238. ^ "PHP: Function and Method listing – Manual". The PHP Group. Retrieved 2015-01-14.
  239. ^ "Introduction – Manual". php.net. 2013-06-07. Retrieved 2013-06-13.
  240. ^ Darryl Patterson (5 August 2004). "Simplify Business Logic with PHP DataObjects — O'Reilly Media". ibm.com. Archived from the original on 16 December 2014. Retrieved 16 December 2014.
  241. ^ "IBM — United States". Retrieved 16 December 2014.
  242. ^ "Five common PHP database problems". ibm.com. 2006-08-01. Retrieved 2013-06-13.
  243. ^ "IBM Redbooks — Developing PHP Applications for IBM Data Servers". redbooks.ibm.com. Retrieved 16 December 2014.
  244. ^ "php[architect] Magazine - The Journal for PHP Programmers". www.phparch.com.
  245. ^ Krill, Paul (19 October 2005). "PHP catching on at enterprises, vying with Java". InfoWorld. Archived from the original on 13 July 2014.
  246. ^ "Cross Reference: /PHP_5_4/ext/standard/". php.net. Archived from the original on 16 March 2012. Retrieved 16 December 2014.
  247. ^ "Developing Custom PHP Extensions". devnewz.com. 2002-09-09. Archived from the original on 2008-02-18. Retrieved 2008-02-25.
  248. ^ "Why Zephir?". zephir-lang.com. 2015-10-20. Retrieved 2015-12-14.
  249. ^ "PHP Credits". Retrieved 2018-12-16.
  250. ^ "Learn PHP Via PHP Training and PHP Certification". www.zend.com. Retrieved 2020-11-16.
  251. ^ Walker, James (2021-12-13). "What the New PHP Foundation Means for PHP's Future". How-To Geek. Retrieved 2023-11-26.
  252. ^ "The New Life of PHP – The PHP Foundation The PhpStorm Blog". The JetBrains Blog. 22 November 2021. Retrieved 2022-06-16.
  253. ^ a b "General Installation Considerations". php.net. Retrieved 2013-09-22.
  254. ^ "News Archive: PHP 5.3.3 Released!". php.net. 2010-07-22.
  255. ^ "FastCGI Process Manager (FPM)". php.net. Retrieved 2013-09-22.
  256. ^ "Command line usage: Introduction". php.net. Retrieved 2013-09-22.
  257. ^ "Command line usage: Differences to other SAPIs". php.net. Retrieved 2013-09-22.
  258. ^ a b "General Installation Considerations". php.net. Retrieved 2013-09-22.
  259. ^ "PHP: Apache 2.x on Microsoft Windows". php.net. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  260. ^ "Command line usage: Introduction". php.net. Retrieved 2013-09-22.
  261. ^ "Installing PHP-GTK 2". php.net. Retrieved 2013-09-22.
  262. ^ "AWS SDK for PHP". aws.amazon.com. Retrieved 2014-03-06.
  263. ^ "Windows Azure SDK for PHP — Interoperability Bridges and Labs Center". interoperabilitybridges.com. Archived from the original on 2014-03-20. Retrieved 2014-03-06.
  264. ^ "Runtime configuration: Table of contents". php.net. Retrieved 2013-09-22.
  265. ^ "php.ini directives: List of php.ini directives". php.net. Retrieved 2013-09-22.
  266. ^ "Runtime configuration: The configuration file". PHP.net. Retrieved 2013-09-22.
  267. ^ "php.ini directives: List of php.ini sections". PHP.net. Retrieved 2013-09-22.
  268. ^ "Runtime configuration: Where a configuration setting may be set". PHP.net. Retrieved 2013-09-22.
  269. ^ "PHP Manual Image Processing and GD;". php.net. Retrieved 2011-04-09.
  270. ^ "PHP Server-Side Scripting Language". Indiana University. 2007-04-04. Archived from the original on 2016-01-21. Retrieved 2008-02-25.
  271. ^ "JavaServer Pages Technology — JavaServer Pages Comparing Methods for Server-Side Dynamic Content White Paper". Sun Microsystems. Retrieved 2008-02-25.
  272. ^ "Five simple ways to tune your LAMP application". IBM. 2011-01-25.
  273. ^ "PHP at the core: Extension structure". PHP.net. Retrieved 2013-09-22.
  274. ^ "PHP at the core: The "counter" Extension – A Continuing Example". PHP.net. Retrieved 2013-09-22.
  275. ^ "Extension Writing Part I: Introduction to PHP and Zend". Zend Technologies. 2005-03-01. Archived from the original on 2013-09-24. Retrieved 2013-09-22.
  276. ^ "Extension Writing Part II: Parameters, Arrays, and ZVALs". Zend Technologies. 2005-06-06. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  277. ^ "Extension Writing Part II: Parameters, Arrays, and ZVALs (continued)". Zend Technologies. 2005-06-06. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  278. ^ "Extension Writing Part III: Resources". Zend Technologies. 2006-05-12. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  279. ^ "Wrapping C++ Classes in a PHP Extension". Zend Technologies. 2009-04-22. Archived from the original on 2013-09-20. Retrieved 2013-09-22.
  280. ^ "Extending PHP with C++?". Stack Overflow. Retrieved 2013-09-22.
  281. ^ "How can I use C++ code to interact with PHP?". Stack Overflow. Retrieved 2013-09-22.
  282. ^ Golemon, Sara (2006). Extending and Embedding PHP. Sams. ISBN 978-0-672-32704-9.
  283. ^ "Request #46919: Multithreading". PHP.net. Retrieved 2013-09-22.
  284. ^ "pthreads: Introduction (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  285. ^ "PECL :: Package :: pthreads". pecl.php.net. Retrieved 2014-02-09.
  286. ^ "Manual:Installation requirements#PHP". MediaWiki. 2010-01-25. Retrieved 2010-02-26. PHP is the programming language in which MediaWiki is written [...]
  287. ^ "About WordPress". Retrieved 2010-02-26. WordPress was [...] built on PHP
  288. ^ Kempkens, Alex. "Joomla! — Content Management System to build websites & apps".
  289. ^ "PHP and Drupal". Drupal.org. 16 September 2007. Retrieved 2010-06-13.
  290. ^ "About". Moodle.org. Retrieved 2009-12-20.
  291. ^ "Server requirements of SilverStripe". Archived from the original on 28 November 2014. Retrieved 13 October 2014. SilverStripe requires PHP 5.3.2+
  292. ^ Ide, Andy (2013-01-31). "PHP just grows & grows". Retrieved 2013-04-01.
  293. ^ "Usage Statistics and Market Share of PHP for Websites, March 2021". w3techs.com. Retrieved 2021-03-28.
  294. ^ "National Vulnerability Database (NVD) Search Vulnerabilities Statistics". Retrieved 2019-11-22.
  295. ^ "PHP: rfc:taint". wiki.php.net.
  296. ^ "Developer Meeting Notes, Nov. 2005".
  297. ^ "Taint mode decision, November 2007". Archived from the original on 2009-02-26.
  298. ^ "Hardened-PHP Project". 2008-08-15. Archived from the original on 2019-02-24. Retrieved 2019-08-22.
  299. ^ "Security: Using Register Globals". PHP Manual. PHP.net. Retrieved 2013-09-22.
  300. ^ "Magic Quotes". PHP Manual. PHP.net. Retrieved 2014-01-17.
  301. ^ "'engine' configuration directive". PHP: Runtime Configuration. PHP.net. Retrieved 2014-02-13.
  302. ^ "PHP Security Exploit With GIF Images". 2007-06-22. Archived from the original on 2013-09-27. Retrieved 2013-09-22.
  303. ^ "PHP security exploit with GIF images". PHP Classes blog. 2007-06-20. Retrieved 2013-09-22.
  304. ^ "Passing Malicious PHP Through getimagesize()". 2007-06-04. Archived from the original on 2013-09-21. Retrieved 2013-09-22.
  305. ^ "'enable_dl' configuration directive". PHP: Runtime Configuration. PHP.net. Retrieved 2014-02-13.
  306. ^ "PHP function reference: dl()". PHP.net. Retrieved 2013-09-22.
  307. ^ "My host won't fix their Trojan". WebHosting Talk. Retrieved 2013-09-22.
  308. ^ Raz0r (25 January 2013). "Simple Machines Forum <= 2.0.3 Admin Password Reset".{{cite web}}: CS1 main: 숫자 이름: 저자 목록 (링크)
  309. ^ Nibble Security. "TYPO3-SA-2010-020, TYPO3-SA-2010-022 EXPLAINED".
  310. ^ "Криптостойкость и небезопасное сравнение". Ahack.ru (in Russian).
  311. ^ "Comparison operators". PHP.net.
  312. ^ Krawczyk, Pawel (2013). "Most common attacks on web applications". IPSec.pl. Archived from the original on 2015-04-15. Retrieved 2015-04-15.
  313. ^ Krawczyk, Pawel (2013). "So what are the "most critical" application flaws? On new OWASP Top 10". IPSec.pl. Retrieved 2015-04-15.
  314. ^ "Usage Statistics and Market Share of PHP for Websites, December 2020". w3techs.com. Retrieved 2020-12-08.
  315. ^ "Usage statistics of PHP Version 5 for websites".
  316. ^ "Randomness Attacks Against PHP Applications".

더보기

이 기사 듣기(35분)
Spoken Wikipedia icon
이 오디오 파일은 2011년 11월 23일자(2011-11-23) 본 기사의 개정판에서 생성된 것이며, 이후의 편집 내용은 반영하지 않습니다.

외부 링크