์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
TIOBE ์„ ์ • ์˜ฌํ•ด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
2003๋…„
C++
โ†’
2004๋…„
PHP
โ†’
2005๋…„
Java
PHP - Hypertext Preprocessor
์ตœ์ดˆ ๊ฐœ๋ฐœ์ž
Rasmus Lerdorf
์šด์˜ ๋ฐ ๊ฐœ๋ฐœ
The PHP Group
๊ณต์‹ ์‚ฌ์ดํŠธ
๋ผ์ด์„ ์Šค
PHP License
์ฒ˜์Œ ๋ฒ„์ „
  1. 0 (1995.06.08)
์ตœ์‹  ๋ฒ„์ „
7.3.27 (2021.02.04.)
์—ญ๋Œ€ ๋ฒ„์ „
7.3.0 alpha1
2018.06.07.
7.3.0 alpha2
2018.06.21.
7.3.0 alpha3
2018.07.05.
7.3.0 alpha4
2018.07.19.
7.3.0 beta1
2018.08.02.
7.3.0 beta2
2018.08.16.
7.3.0 beta3
2018.08.30.
7.3.0 RC1
2018.09.13.
7.3.0 RC2
2018.09.28.
7.3.0 RC3
2018.10.11.
7.3.0 RC4
2018.10.25.
7.3.0 RC5
2018.11.08.
7.3.0 RC6
2018.11.22.
7.3.0
2018.12.06.
7.3.1
2019.01.10.
7.3.2
2019.02.07.
7.3.3
2019.03.07.
7.3.4
2019.04.04.
7.3.5
2019.05.02.
7.3.6
2019.05.30.
7.3.7
2019.07.04.
7.3.8
2019.08.01.
7.3.9
2019.08.29.
7.3.10
2019.09.26.
7.3.11
2019.10.24.
7.3.12
2019.11.21.
7.3.13
2019.12.18.
7.3.14
2020.01.23.
7.3.15
2020.02.20.
7.3.19
2020.03.19.

7.4.15 (2021.02.04.)
์—ญ๋Œ€ ๋ฒ„์ „
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.7
2020.06.11.

8.0.2 (2021.02.04.)
์—ญ๋Œ€ ๋ฒ„์ „
8.0.0RC5 (2020.11.19.)

1. ๊ฐœ์š”2. ํŠน์ง•
2.1. ์žฅ์ 2.2. ๋‹จ์ 2.3. ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ธฐ์ˆ ๊ณผ์˜ ๋น„๊ต
3. ๋ ˆ๊ฑฐ์‹œ์™€ ํ˜„๋Œ€ํ™”
3.1. ๋ชจ๋˜ PHP
4. ๊ตฌ๋™๋ฐฉ์‹5. ๊ฐœ๋ฐœ ๋„๊ตฌ6. PHP ์ฝ”๋”ฉ ํ‘œ์ค€์•ˆ7. ์—…๋ฐ์ดํŠธ
7.1. PHP 57.2. PHP 77.3. PHP 8
8. ๊ธฐํƒ€9. PHP๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก

1. ๊ฐœ์š”[ํŽธ์ง‘]

<?php
    echo "Hello, World!";
?>
๋Œ€ํ‘œ์ ์ธ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ์ „ ์„ธ๊ณ„ ์ˆ˜๋งŽ์€ ์›น ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์–ธ์–ด. ๋น„์Šทํ•œ ์–ธ์–ด๋กœ๋Š” ASP, JSP ๋“ฑ์ด ์žˆ๋‹ค. C-like ๋ฌธ๋ฒ•[1]์„ ์‚ฌ์šฉํ•˜์—ฌ, ์†Œ๊ทœ๋ชจ ์›น ํŽ˜์ด์ง€ ์ œ์ž‘์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์›น๊ด€๋ จ ํ•จ์ˆ˜๋“ค์ด ๋งŽ์•„ ์ƒ์‚ฐ์„ฑ์ด ๋†’๋‹ค๋Š” ์ ์—์„œ ์‚ฌ์šฉ์ž, ์‚ฌ์šฉ์ฒ˜๊ฐ€ ๋งŽ๋‹ค. 1995๋…„ ๋ผ์Šค๋ฌด์Šค ๋Ÿฌ๋Œํ”„๊ฐ€ ์ฒ˜์Œ ๊ณต๊ฐœํ–ˆ๊ณ , ์ง€๊ธˆ์€ The PHP Group ์ด๋ผ๋Š” ๋‹จ์ฒด์—์„œ ๊ฐœ๋ฐœ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ๋งก๊ณ  ์žˆ๋‹ค.

PHP๋ผ๋Š” ์ด๋ฆ„์€ ์›๋ž˜ Personal Home Page Tools์˜€๋Š”๋ฐ, ์ง€๊ธˆ์€ PHP - Hypertext Preprocessor์˜ ์žฌ๊ท€ ์•ฝ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์›Œ๋“œํ”„๋ ˆ์Šค, ๋ฏธ๋””์–ด์œ„ํ‚ค ๋“ฑ์˜ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด PHP๋กœ ์งœ์—ฌ ์žˆ๋‹ค. ์˜์™ธ๋กœ ์›น์„œํ•‘์„ ํ•ด๋ณด๋ฉด ์“ฐ์ด๋Š” ๊ณณ์ด ๋งŽ๋‹ค. ์šฐ๋ฆฌ๋‚˜๋ผ ํ•œ์ •์œผ๋กœ ๋†’์€ ์ ์œ ์œจ์„ ์ฐจ์ง€ํ•œ XpressEngine๊ณผ ๋ผ์ด๋ฏน์Šค, ์˜์นดํŠธ๋Š” PHP๋กœ ์ œ์ž‘๋๋‹ค.
์šฐ๋ฆฌ๋‚˜๋ผ ์ค‘์†Œ ์‡ผํ•‘๋ชฐ๊ณผ ์ธํ„ฐ๋„ท ์ปค๋ฎค๋‹ˆํ‹ฐ, ์ง€์—ญ์–ธ๋ก ์‚ฌ ๋“ฑ ๋Œ€๋‹ค์ˆ˜๊ฐ€ PHP ๊ฑฐ๋‚˜ PHP ๊ธฐ๋ฐ˜ CMS๋กœ ์ œ์ž‘๋˜์–ด ์žˆ๋‹ค.

2. ํŠน์ง•[ํŽธ์ง‘]

PHP๋Š” ์˜คํ”ˆ ์†Œ์Šค์ธ๋ฐ ํฌํŒ…๋œ ๊ณณ์ด ๋งŽ์•„ ๊ฑฐ์˜ ๋ชจ๋“  ์›น ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. PHP ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•˜๊ณ  ์žˆ๊ณ , ๋ฆฌ๋ˆ…์Šค ๋“ฑ์˜ ์œ ๋‹‰์Šค ๊ณ„์—ด OS์—์„œ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋‹ค์ˆ˜์˜ ๊ฒฝ์šฐ ์ง์ ‘ ์ปดํŒŒ์ผ์„ ํ•  ํ•„์š”๋Š” ์—†๋Š”๋ฐ, ์œ ๋ช… ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌ๋ณธ์˜ ๊ณต์‹ ์ €์žฅ์†Œ์—๋Š” PHP ์„ค์น˜ ํŒจํ‚ค์ง€๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ ์—†๋‹ค๋ฉด Packagist ๊ฐ™์€ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ(repository)์—์„œ ๊ฐ OS์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” PHP ์„ค์น˜ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ณ„๋„์˜ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฒ„์ „๋„ ์ž…๋ง›๋Œ€๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œˆ๋„์šฐ์šฉ์€ PHP ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์ง์ ‘ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณตํ•œ๋‹ค. PHP5.5 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” 64๋น„ํŠธ ๋ฒ„์ „๋„ ๋‚˜์˜ค๊ณ  ์žˆ๋‹ค. ์œˆ๋„์šฐ์šฉ์˜ ๊ฒฝ์šฐ ๋™์ž‘ ๋ฐฉ์‹์˜ ์ฐจ์ด ๋•Œ๋ฌธ์— IIS ๋ฐ NGINX์—์„œ ๋Œ๋ฆฌ๋Š” PHP๋Š” Non-Thread Safe ๋ฒ„์ „์œผ๋กœ, ์•„ํŒŒ์น˜์—์„œ ๋Œ๋ฆฌ๋Š” PHP๋Š” Thread-Safe ๋ฒ„์ „์œผ๋กœ ๋”ฐ๋กœ ๋‚˜์˜จ๋‹ค.

PHP๋Š” Perl์–ธ์–ด์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋ณ€์ˆ˜ ์ด๋ฆ„ ์•ž์— $๋ฅผ ๋ถ™์ธ๋‹ค๋Š” ์ (์˜ˆ: $abc)๊ณผ ๋ฌธ์ž์—ด๋ผ๋ฆฌ ๊ฒฐํ•ฉํ•  ๋•Œ ๋ง์…ˆ ๊ธฐํ˜ธ(+)๋ฅผ ์ (.)์œผ๋กœ ๋Œ€์‹ ํ•ด์„œ ์“ด๋‹ค๋Š” ์ (์˜ˆ: "Hello, " . "world!" = "Hello, world!")์ด๋‹ค. ํ›„์ž์˜ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ํ•˜๋˜๋Œ€๋กœ ๋ง์…ˆ ๊ธฐํ˜ธ(+)์œผ๋กœ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ์„ ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋ฉด ๋ง์…ˆ ๊ธฐํ˜ธ ์•ž๋’ค์— ์žˆ๋Š” ๋‘ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ณ„์‚ฐํ•ด ๋ฒ„๋ฆฐ๋‹ค. (์˜ˆ: "Hello, " + "world!" = 0)[2]

PHP ์˜ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ์ƒํƒœ๊ฐ€ ์—†๋‹ค๋Š” ์ (Stateless)์ธ๋ฐ, PHP์›น ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•  ๋•Œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์‹คํ–‰ํ•œ ๋’ค ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๊ณ  ์ƒˆ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒˆ๋กญ๊ฒŒ ์‹œ์ž‘๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋•Œ๋ฌธ์— PHP์—์„œ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋ฉด ๊ฐ์ฒด๋Š” 1ํšŒ ์š”์ฒญ์— ์˜ํ•œ ์ž‘์—…์ด ๋๋‚ ๋•Œ๊นŒ์ง€๋งŒ ์œ ์ง€๋œ๋‹ค.

๋‹ค๋ฅธ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ <?php ... ?>๋กœ ์ด๋ฃจ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์˜์—ญ์ด ์žˆ๋‹ค. <? ... ?>๋Š” ๋น„๊ถŒ์žฅ์ด๋‹ค. ๋ณ€์ˆ˜ ํ•˜๋‚˜๋งŒ ์ถœ๋ ฅํ•  ๋•Œ์—๋Š” <?=$var?> ๊ฐ™์€ ํ˜•์‹์œผ๋กœ๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ์ค„์—ฌ ์“ฐ๋Š” ๋ฐฉ์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์–ด์„œ ์“ฐ๋ ค๋ฉด php.ini์—์„œ short_open_tags์˜ ์„ค์ •์„ on์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค. ์ค„์—ฌ ์“ฐ๋Š” ๋ฐฉ์‹์ด ๊บผ์ ธ ์žˆ๋Š” ์ด์œ ๋Š” XML์˜ <? xml version="1.0" ?>๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ๊ณผ ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. PHP๊ฐ€ ์ฒ˜์Œ ๋‚˜์™”์„ ๋•Œ๋Š” HTML๋งŒ ์žˆ์–ด์„œ ์ค„์—ฌ ์“ฐ๋Š” ๋ฐฉ์‹์ด ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ, HTML์— XML์˜ ๋ฌธ๋ฒ•์„ ๋„์ž…ํ•œ XHTML 1.0์ด ๋‚˜์˜ค๋ฉด์„œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚ฌ๊ณ  ๊ฒฐ๊ตญ ์ € ์˜ต์…˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ. ๋‹คํ–‰ํžˆ HTML5์—์„œ๋Š” XML ๋ฌธ๋ฒ•์ด ๋น ์กŒ๋‹ค. PHP 5.4๋ถ€ํ„ฐ๋Š” short_open_tags ์„ค์ •๊ฐ’์— ์ƒ๊ด€์—†์ด ํ•ญ์ƒ <?=$var?> ํ˜•ํƒœ๋กœ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

์•„์ฃผ ์˜›๋‚ ์—๋Š” WYSIWYG ๊ธฐ๋ฐ˜ ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ <?php ... ?>๋กœ ์ด๋ฃจ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์˜์—ญ์„ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ํƒœ๊ทธ๋กœ ์ž˜๋ชป ์ธ์‹ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด <script language="php"> ... </script>[3] ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ํƒœ๊ทธ๋Š” JavaScript์—์„œ ์“ฐ๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด๊ณ  ๊ทธ ๋•Œ๋ฌธ์— ํ˜ผ๋™๋œ๋‹ค๋Š” ๋ฌธ์ œ๋กœ ์“ฐ์ž„์ด ์ค„์–ด๋“ค์—ˆ๊ณ  ๋ ˆ๊ฑฐ์‹œ ์š”์†Œ๋กœ ๋‚จ์•„์žˆ๋‹ค๊ฐ€ PHP 7๋ถ€ํ„ฐ๋Š” ์‚ญ์ œ๋˜์—ˆ๋‹ค.

2.1. ์žฅ์ [ํŽธ์ง‘]

  • PHP๋Š” ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š”๊ฒŒ ๊ฐ„ํŽธํ•˜๋‹ค. PHP ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ํŒŒ์ผ์„ ์ฝ๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„์ด ์—†์œผ๋ฉด ์บ์‹œ[4]๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„์€ ๋‹ค์‹œ ํ•ด์„ํ•œ ๋’ค ์บ์‹œ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ด์„œ ์—…๋กœ๋“œ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‹ ๊ฒฝ ์“ธ ๊ฒƒ์ด ์ค„์–ด๋“ ๋‹ค.
  • PHP๋Š” ๋“ฑ์žฅ ๋‹น์‹œ C์–ธ์–ด๋กœ ์›น์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•˜๋Š” CGI์— ๋น„ํ•ด ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” HTMLํŽ˜์ด์ง€์˜ ํ…œํ”Œ๋ฆฟ๋„ ์ง€์›๋˜๋ฉด์„œ ์›น์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ์›น ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค๋Š”๊ฒƒ์ด ์žฅ์ ์ด์˜€๋‹ค.

2.2. ๋‹จ์ [ํŽธ์ง‘]

  • ์ „์ฒด์ ์œผ๋กœ ์ž˜ ์„ค๊ณ„๋œ ์–ธ์–ด๋Š” ๊ฒฐ์ฝ” ์•„๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด์žฅ ํ•จ์ˆ˜๋‚˜ ์ธ์ž ์ด๋ฆ„ ๊ทœ์น™์— ์ผ๊ด€์„ฑ์ด ๋ถ€์กฑํ•˜๋‹ค. ์ด๋Š” PHP๋ฅผ ๋งŒ๋“  rasmus๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ C์–ธ์–ด ํ•จ์ˆ˜๋“ค์„ ๊ฐ€์ ธ์˜ค๊ณ  ์ดํ›„ ํ•จ์ˆ˜๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์ด๋ฆ„ ๊ทœ์น™์ด ๋ฐ”๋€Œ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ ๋•Œ๋ฌธ์— ๊ณผ๊ฑฐ์—๋Š” ๋งŽ์ด ๊นŒ์˜€๋‹ค. 7.0 ์ดํ›„์—๋Š” ๊ณ„์† ๋ฒ„์ „์—… ํ•˜๋ฉด์„œ ๋ฐ”๋€ ์ด๋ฆ„ ๊ทœ์น™์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•œ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋Š” ๋“ฑ[5] ์ ์ฐจ ๋‚˜์•„์ง€๋Š” ์ถ”์„ธ๋‹ค.
  • PHP๋Š” 7.4๊นŒ์ง€ ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜(undefined)๋ฅผ ์“ธ์ˆ˜์žˆ์—ˆ๋‹ค.[6] ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ null๋กœ ํ˜•๋ณ€ํ™˜ํ•ด์„œ ๋ณด์—ฌ์ค€๋‹ค. ๋‹ค๋งŒ ์ •์˜ ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์•Œ๋ฆผ์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋Š”ํ•œ๋‹ค. ์—๋Ÿฌ ๋ณด์—ฌ์ฃผ๋Š” ์„ค์ •์„ E_ALL ๋กœ ํ•ด๋†”์•ผ ํ‘œ์‹œ๋œ๋‹ค [7] , ๋А์Šจํ•œ ==๊ฐ€ ์•„๋‹Œ ===๋ฅผ ์“ฐ๋”๋ผ๋„ ๊ฐ™๋‹ค๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด get_defined_vars ํ•จ์ˆ˜(์ง€์—ญ ๋ณ€์ˆ˜) ๋˜๋Š” $GLOBALS ๋ณ€์ˆ˜(์ „์—ญ ๋ณ€์ˆ˜) ๋“ฑ์„ ํ†ตํ•ด ์„ ์–ธ๋œ ๋ณ€์ˆ˜์˜ ๋ชฉ๋ก ๋ฐฐ์—ด์„ ์–ป์–ด์˜จ ๋‹ค์Œ, ๊ทธ ๋ฐฐ์—ด์— ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธ ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ null๊ณผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ์ด์šฉํ•ด ๋ณดํ†ต์€ issetํ•จ์ˆ˜๋กœ ์ฒดํฌํ•œ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ผ๋Š” ํŠน์„ฑ์ƒ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋งŒํผ ์„ฑ๋Šฅ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๊ณต์‹์ ์œผ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ํ•œํŽธ PHP 8.0 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— JIT์ด ์ง€์›๋˜์–ด ๊ธฐ์กด 7.4๋Œ€๋น„ 2๋ฐฐ ๊ฐ€๋Ÿ‰์˜ ์„ฑ๋Šฅํ–ฅ์ƒ์ด ์žˆ๋‹ค.

2.3. ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ธฐ์ˆ ๊ณผ์˜ ๋น„๊ต[ํŽธ์ง‘]

์ข…์ข… Java ์ง„์˜์˜ JSP์™€ ๋น„๊ต๋˜๊ธฐ๋„ ํ–ˆ์—ˆ๋‹ค.

ํ•œ๊ตญ์˜ SI์—…๊ณ„์—์„œ๋Š” PHP ๊ฐœ๋ฐœ์ž์—์„œ JSP ๊ฐœ๋ฐœ์ž๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ผ์ด ์ƒ๋‹นํžˆ ๋งŽ์•˜๋Š”๋ฐ, ๊ณต๊ณต๊ธฐ๊ด€์—์„œ๋Š” ์ •๋ถ€์—์„œ ๋งŒ๋“  ์ž๋ฐ”๊ธฐ๋ฐ˜์˜ ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์จ์•ผ ์‚ฌ์—…์„ ๋ฐœ์ฃผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜๊ณ  ๋ฏผ๊ฐ„ ๋Œ€๊ทœ๋ชจ ์‚ฌ์—…์—์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด๋‚˜ ์•ˆ์ •์„ฑ, ์„ฑ๋Šฅ ๋“ฑ์„ ์ด์œ ๋กœ Java ๊ธฐ๋ฐ˜์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ผ๋ณธ๊ณผ ์ค‘๊ตญ์—์„œ๋Š” PHP๊ฐ€ ๋งŽ์ด ์“ฐ์ด๊ณ ์žˆ๋‹ค.

2020๋…„ ํ˜„์žฌ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ๋“ค์ด ์ „์„ธ๊ณ„ ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

3. ๋ ˆ๊ฑฐ์‹œ์™€ ํ˜„๋Œ€ํ™”[ํŽธ์ง‘]

2000๋…„๋Œ€ ์ดˆ๋ฐ˜(2005๋…„ ์ด์ „) ๊ตญ๋‚ด์—์„œ๋Š” ๋„ค์ด๋ฒ„๋„ PHP๋ฅผ ์‚ฌ์šฉํ•˜๊ธด ํ•˜์˜€๋Š”๋ฐ, ๊ทธ ๋‹น์‹œ PHP๋Š” ๊ตฌ๋™์†๋„๋„ ๋А๋ฆฐ๋ฐ๋‹ค ๊ฐ์ฒด์ง€ํ–ฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜‘์—…์ด ํž˜๋“ค๋‹ค๋Š” ์ด์œ ๋กœ 2000๋…„๋Œ€ ์ค‘๋ฐ˜ Java ๊ณ„์—ด์˜ JSP๋‚˜ C# ๊ณ„์—ด์˜ ASP.NET์œผ๋กœ ์˜ฎ๊ฒจ๊ฐ”๋‹ค. (PHP์—์„œ ์ œ๋Œ€๋กœ๋œ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋“ฑ์žฅ์€ 2009๋…„์ธ PHP 5.3์ด๋‹ค.) ํŽ˜์ด์Šค๋ถ์€ ์ด์ „์—๋Š” PHP๋ฅผ ์ฃผ ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ 2014๋…„ ์ž์‚ฌ์—์„œ PHP ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•œ hack์ด๋ผ๋Š” ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ด€๋ จ๊ธฐ์‚ฌ

MVC ํŒจํ„ด[8]์„ ์ ์šฉํ•˜๊ธฐ์—๋„ ์–ด๋ ค์› ๋‹ค PHP 5.3๋ถ€ํ„ฐ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋‹ค์ˆ˜์˜ CMS๋“ค์€ ์ด๋ฏธ ์ ˆ์ฐจ์ง€ํ–ฅํ˜•์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์—ˆ๊ณ , ๊ทธ๋ฐ–์—๋„ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณด์•ˆ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์•ˆํŒจ์น˜ ์ง€์›์ด ๋๋‚œ ๋ฒ„์ „์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ œ๋กœ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ์ผ์–ด๋‚œ ๋ฝ๋ฟŒ ๊ฐœ์ธ์ •๋ณด ํ•ดํ‚น ์‚ฌ๊ฑด ๋“ฑ์ด ์žˆ๋‹ค.

3.1. ๋ชจ๋˜ PHP[ํŽธ์ง‘]

2000๋…„์— ๋‚˜์˜จ PHP 4๊นŒ์ง€๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ์–ด๋„ ์ง€์›๋˜๋Š”๊ฒŒ ์ ์–ด์„œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์–ด๋ ค์› ์ง€๋งŒ 2009๋…„์— PHP 5.3์ด ๋‚˜์˜ค๋ฉด์„œ ๊ฐœ์„ ๋๋‹ค. ๊ทธ ๋•๋ถ„์— PHP 4๊นŒ์ง€๋Š” ์ •๋ง ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ, PHP 5.3 ์ดํ›„๋กœ๋Š” ์ ์  ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ ์šฉ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค ๋•๋ถ„์— PHP์˜ ์ตœ์ดˆ ๊ฐœ๋ฐœ๋‹น์‹œ[9] ์ฃผ์š” ์‚ฌ์šฉ ๋Œ€์ƒ์ด์—ˆ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ •์‹์œผ๋กœ ๋ฐฐ์šฐ์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค ์ž…์žฅ์—์„œ๋Š” PHP์˜ ์ตœ๋Œ€ ์žฅ์ ์ด์—ˆ๋˜ ๋‚ฎ์€ ์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์•„์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์šฐ๋ คํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ์—ˆ์„ ์ •๋„. [10] ๊ทธ๋ž˜์„œ 5.3๋ฒ„์ „๊นŒ์ง€๋ฅผ ๊ณ ์ „ PHP, 5.4~5.6๊นŒ์ง€ ๊ณผ๋„๊ธฐ์ด๋ฉฐ 7.0 ๊ทธ ์ดํ›„ ๋ฒ„์ „์€ ํ˜„๋Œ€ PHP๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋ณด๋Š” ์‹œ๊ฐ์ด ์žˆ๋‹ค.

PHP ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๋“ฑ์žฅํ•˜๋ฉด MVC ํŒจํ„ด, HMVC ๋“ฑ ์ด ์ ์šฉ๋˜๋ฉด์„œ ํ˜‘์—…๊ด€๋ จ ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„ ํ•ด์†Œ๋˜์—ˆ์œผ๋ฉฐ PHP 7๋ถ€ํ„ฐ๋Š” ์ข€ ๋” ํ™•์‹คํ•œ OOP ์–ธ์–ด์— ๊ฐ€๊นŒ์›Œ์กŒ๋‹ค. ํ˜„์กดํ•˜๋Š” ๋ฌธ์ œ๋“ค์˜ ๋Œ€๋‹ค์ˆ˜๋Š” ์•„์ง๋„ 5.x ๋Œ€์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•˜๋Š” ์ ˆ์ฐจ์ง€ํ–ฅ์ ์œผ๋กœ ์ž‘์„ฑ๋œ CMS๋“ค๊ณผ ์—ฌ๊ธฐ์— ์ต์ˆ™ํ•ด์ ธ ์ƒˆ๋กœ์šด๊ฒƒ์„ ๋ฐฐ์šฐ์ง€์•Š๋Š” ์‚ฌ์šฉ์ž, ๊ฐœ๋ฐœ์ž๋“ค์ด ์›์ธ์ด๋‹ค. ํŠนํžˆ Laravel ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋Œ€์ค‘ํ™”๋˜์–ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. XE๋„ ๋ฒ„์ „ 3๋ถ€ํ„ฐ ์ ์šฉํ•˜์˜€๋‹ค. ์ถ”๊ฐ€๋กœ PHP Framework Interop Group์—์„œ ์ œ์•ˆํ•œ PSR ๊ทœ์น™[11]์œผ๋กœ ์ธํ•ด ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ •ํ˜•ํ™”๋˜์—ˆ๋‹ค. ์ด์ œ PHP ๊ฐœ๋ฐœ์—์„œ๋Š” PSR ๊ทœ์น™์„ ์ง€ํ‚ค๋Š”๊ฒŒ ๊ถŒ์žฅ๋œ๋‹ค.

์›นํ˜ธ์ŠคํŒ… ์ชฝ์—์„œ๋Š” PHP๊ฐ€ ๊ฐ•์„ธ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์›นํ˜ธ์ŠคํŒ…์ด PHP๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ๋‹ค๋งŒ ์ตœ์‹  ๋ฒ„์ „ ์ง€์›์ด ๋Šฆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. 2020๋…„ ํ˜„์žฌ์—๋„ ์ด๋ฏธ ์ง€์›์ข…๋ฃŒ๋œ 7.0์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š” ์›นํ˜ธ์ŠคํŒ…์ด ์ข€ ๋งŽ๋‹ค. JSP์˜ ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์ธ ์ž๋ฐ”๋ฅผ ์“ฐ๊ธฐ์‰ฝ๊ฒŒํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์—”์ง„์ธ๋ฐ ์•„ํŒŒ์น˜๋‚˜ IIS ๋ง๊ณ ๋„ ํ†ฐ์บฃ์ด๋ž€ ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ๋งˆ๋‹ค ์ปดํŒŒ์ผ ํ•ด์•ผํ•œ๋‹ค. ASP.NET ์ฆ‰ .NET์€ ๋ฆฌ๋ˆ…์Šค์—์„œ๋„ ์ง€์›๋˜์ง€๋งŒ[12] ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ ์šด์˜์ฒด์ œ์™€ IIS๋กœ ์šด์˜ํ• ๋•Œ๊ฐ€ ์ ํ•ฉํ•˜๋ฉฐ ์ด๋•Œ๋Š” ๋ผ์ด์„ผ์Šค๋น„์šฉ์ด ๋น„์‹ธ๋‹ค .

PHP๋Š” ๋А์Šจํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ์™€ $GLOBALS, extract() ๊ฐ™์€ ์ „์—ญ๋ณ€์ˆ˜ ์ ‘๊ทผ ๋“ฑ์—์„œ ๋ณด์•ˆ ์ทจ์•ฝ์  ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ์ง€์  ๋˜์—ˆ๋‹ค. ํƒ€์ž…๊ฐ•ํ™”๋Š” PHP 7๋ถ€ํ„ฐ ๊ฐœ์„ ๋œ ๋ถ€๋ถ„์ด ์žˆ์ง€๋งŒ, ์ดˆ์ฐฝ๊ธฐ๋ถ€ํ„ฐ ์ด์–ด์ ธ ์˜จ ํŠน์œ ์˜ ํ•จ์ˆ˜๋“ค ๋น„์ผ๊ด€์„ฑ์€ ์—ฌ์ „ํ•˜๋‹ค. PHP 8.1 ๋ถ€ํ„ฐ๋Š” ์ผ๋ถ€ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋˜ $GLOBALS ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ฐจ์›์—์„œ ์ œํ•œํ•˜๊ธฐ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค.

๋ชจ๋˜ PHP๋ผ๊ณ  ํ•˜๋Š” PHP 7.0 ์ด ๋‚˜์˜ค๊ธฐ ์ด์ „๊นŒ์ง€๋Š” ์ œ๋Œ€๋กœ ๋œ ๋””์ž์ธ ํŒจํ„ด์ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ™•๋ฆฝ๋˜์ง€ ์•Š์•˜๊ณ , ์ด๋กœ ์ธํ•ด ๋ณด์•ˆ ๋”ฐ์œ„ ๊ฐ€๋ณ๊ฒŒ ๋‚ ๋ ค๋ฒ„๋ฆฐ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์–ด์„œ ๊ทธ๊ฑธ ์“ฐ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ "PHP๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค"๋ผ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‹ฌ๋Š” ๋ฐ ์ผ์กฐํ•˜์˜€๋‹ค. ๊ฒฐ๋ก ์„ ๋งํ•˜์ž๋ฉด, PHP ๊ฐœ๋ฐœ์ž๋Š” ๊ณ ๋„์˜ ์ƒ์‚ฐ์„ฑ์„ ๋ฐ›๋Š” ๋Œ€์‹  '์ž๊ธฐ ์Šค์Šค๋กœ' ์ฝ”๋“œ์˜ ๋ณด์•ˆ์„ฑ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ์„ ์จ์•ผ ํ•œ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋‹ค.

์›น์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” PHP ๋น„ํŒ ๋ฌธ์„œ๋Š” ์œ ์‹ฌํžˆ ๋ด์•ผ ํ•œ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ๊ธฐ์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ํ˜„์‹œ์ ์—์„œ ํ•ด๊ฒฐ๋œ ๋ฌธ์ œ๋„ ๋–กํ•˜๋‹ˆ ์˜ฌ๋ ค๋†“๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. 7.0์ด ๋‚˜์˜ค๊ธฐ ์ด์ „ ๋‹น์‹œ ๋ฒ„์ „์ด 5.x ์‹œ์ ˆ์— ์ž‘์„ฑ๋œ ๊ธ€์ด ๋งŽ๊ธฐ๋„ ํ•˜๋‹ค. ํŠนํžˆ PHP: ์ž˜๋ชป๋œ ๋””์ž์ธ์˜ ํ”„๋ž™ํƒˆ์˜ ๋ฒˆ์—ญ๋ณธ์ด ๊ตญ๋‚ด ์›น์— ๋งŽ์ด ํผ์ ธ ์žˆ๋Š”๋ฐ, ์ด ๊ธ€์€ 2012๋…„์— ์ž‘์„ฑ๋˜์–ด์„œ ํ˜„ ์‹œ์ ์—์„œ๋Š” ๋งŽ์€ ๋ถ€๋ถ„์ด ๋‹ฌ๋ผ์กŒ๊ณ , ์•„๋งˆ์ถ”์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฃผ๊ด€์ ์ธ ๊ฐœ์ธ์˜๊ฒฌ์„ ๋ธ”๋กœ๊ทธ์— ์“ด ๊ธ€์ด๋ผ ๊ฐ๊ด€์ ์ด์ง€ ๋ชปํ•œ ๊ธ€์ด๋‹ค.

๋‹ค๋ฅธ ํ”Œ๋žซํผ์ฒ˜๋Ÿผ ๋ชจ๋“ˆํ™” ์ƒํƒœ๊ณ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Composer๋ผ๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ๋‚˜์™€ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ๊ณผ์ •์„ ๊ฐ„์†Œํ™” ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. PHP ํŒจํ‚ค์ง€๋Š” ์ฃผ๋กœ ํŒจํ‚ค์ง€์ŠคํŠธ์—์„œ ์ฐพ์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. https://packagist.org/

4. ๊ตฌ๋™๋ฐฉ์‹[ํŽธ์ง‘]

PHP๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฐฉ์‹์ด๋ฉด์„œ ์‹คํ–‰ํ›„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜๊ณ  ๋‹ค์Œ ์‹คํ–‰์‹œ ์ฝ”๋“œ๋ฅผ ๋งค๋ฒˆ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ํผํฌ๋จผ์Šค์— ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ PHP ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ทธ๋Œ€๋กœ ์žฌํ™œ์šฉํ•˜๋˜ ์ปดํŒŒ์ผ๋ง์„ ํ†ตํ•ด ํผํฌ๋จผ์Šค๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋“ค์ด ๋ช‡ ๊ฐ€์ง€ ๊ฐœ๋ฐœ๋˜์—ˆ๋Š”๋ฐ ๊ทธ์ค‘์—์„œ opcode ์บ์‹œ๊ฐ€ 5.5๋ฒ„์ „๋ถ€ํ„ฐ PHP ์—”์ง„์— ํ†ตํ•ฉ๋˜์—ˆ๋‹ค.

ํŽ˜์ด์Šค๋ถ์€ ์ž์‚ฌ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ PHP์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ์˜คํ”ˆ ์†Œ์Šค๋กœ HipHop for PHP์™€ HipHop Virtual Machine(HHVM)์„ ๊ฐœ๋ฐœํ–ˆ๋‹ค. ์ „์ž๋Š” PHP ์ฝ”๋“œ๋ฅผ C++ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , ํ›„์ž๋Š” Java์™€ ๋น„์Šทํ•˜๊ฒŒ JIT ์ปดํŒŒ์ผ๋ง์„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ˜„์žฌ HipHop for PHP๋Š” ๊ฐœ๋ฐœ์„ ์ค‘๋‹จํ•˜๊ณ  HHVM๋งŒ ๊ฐœ๋ฐœํ•˜์—ฌ ๋‚ด๋†“๊ณ  ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ํŽ˜์ด์Šค๋ถ์€ HHVM์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ hack์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, HHVM์—์„œ hack ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ PHP 7.0์—์„œ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ํŒŒ์„œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  AST ํŒŒ์„œ๋ฅผ ๋„์ž…ํ•ด์„œ HHVM์˜ ๊ฐ•์ ์ธ ์†๋„๋ฅผ ๋”ฐ๋ผ์žก์•˜๋‹ค. 2020๋…„ ๋ง์— ์ถœ์‹œ๋œ PHP 8๋ถ€ํ„ฐ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— JIT ์„ ๋„์ž…ํ•˜์—ฌ JIT ๊ตฌ๋™์—ฌ๋ถ€์— ๋”ฐ๋ผ 7.4๋Œ€๋น„ 2๋ฐฐ ๊ฐ€๋Ÿ‰์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด์žˆ๋‹ค.๋ฒค์น˜๋งˆํฌ

5. ๊ฐœ๋ฐœ ๋„๊ตฌ[ํŽธ์ง‘]

๊ตฌ๋ฒ„์ „ PHP๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์„ ์•ˆ ์“ฐ๋Š” ๊ณณ์ด ์ข…์ข… ์žˆ๋Š”๋ฐ, ์˜ค๋ฅ˜๋ฅผ ์žก๊ณ  ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” IDE๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. VS Code ๊ฐ™์€ ํ…์ŠคํŠธ ์—๋””ํ„ฐ์— ๋””๋ฒ„๊น…์„ ์œ„ํ•œ Xdebug๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ํŠนํžˆ VS Code๋Š” MS๊ฐ€ ์ „ํญ์ ์œผ๋กœ ๋ฐ€์–ด์ฃผ๊ณ  ์žˆ์–ด ๊ฐ์ข… ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ˆซ์ž๋„ ๋Š˜์–ด๋‚˜๋Š” ์ค‘์ด๋‹ค.

์š”์ฆ˜์—” JetBrains ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ์œ ๋ฃŒ IDE PhpStorm์ด ํŽธ๋ฆฌํ•œ ์ฝ”๋“œ ์—๋””ํ„ฐ, ๊ฐ์ข… ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์›, ์‹ ์†ํ•œ ์„œํฌํŠธ์— ํž˜์ž…์–ด ์ ์œ ์œจ์„ ๋Š˜๋ ค๊ฐ€๊ณ  ์žˆ๋‹ค. PhpStorm์€ PHP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JavaScript ๋ฐ ์›น ๊ด€๋ จ ๊ธฐ๋Šฅ๋“ค๊นŒ์ง€ ์ „๋ถ€ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

6. PHP ์ฝ”๋”ฉ ํ‘œ์ค€์•ˆ[ํŽธ์ง‘]

PHP 5.3 ์ดํ›„ PHP ์ง„์˜์—๋„ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๋‚˜์˜ค๋ฉด์„œ ์ฝ”๋”ฉํ‘œ์ค€๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค ํ˜ธํ™˜์—๊ด€ํ•ด PHP ํ”„๋ ˆ์ž„์›Œํฌ ๊ทธ๋ฃน์—์„œ ๊ทœ์น™์„ ์ •ํ–ˆ๋‹ค.

PSR 0 ~ 17๊นŒ์ง€ ์žˆ์œผ๋‚˜ PSR 4 ์™€ 12๊ฐ€ ์ฃผ์š”๊ทœ์น™์ด๊ณ  PSR 4์—์„œ PHP ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์˜คํ† ๋กœ๋“œ ๋ผ๋Š” ๊ฒŒ ์žˆ๋Š”๋ฐ Node.js๊ณ„์˜ NPM๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ๊ด€๋ฆฌ์ž์ธ ์ปดํฌ์ €๊ฐ€ ๊ตฌํ˜„์ฒด์ด๋‹ค.
PSR ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ๋ฌธ์„œ
๊ทธ ๋ฐ–์— PHP The Right Way๋ผ๋Š” ๋ฌธ์„œ๊ฐ€ ์ธ์ •๋ฐ›๊ณ  ์žˆ๋‹ค. ํ•œ๊ตญ์–ด ๋ฒˆ์—ญhttps://modernpug.github.io/php-the-right-way/

7. ์—…๋ฐ์ดํŠธ[ํŽธ์ง‘]

PHP์˜ ๊ณต์‹ ์—…๋ฐ์ดํŠธ๋Š” 7.0์ด ๋‚˜์˜จ ์ดํ›„๋กœ ์ตœ์‹  ๋ฒ„์ „ ๋ฐ ํ•˜์œ„ 2๊ฐœ ๋ฒ„์ „๊นŒ์ง€๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 7.4๊ฐ€ ๋‚˜์˜ค๋ฉด 7.3๊ณผ 7.2๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์†ํ•˜๊ณ , 7.1์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ํ˜•์‹์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ช‡๋ช‡ ๋ฆฌ๋ˆ…์Šค์˜ ๋ฐฐํฌํŒ(๋Œ€ํ‘œ์ ์œผ๋กœ ๋ ˆ๋“œํ–‡ ๋ฆฌ๋ˆ…์Šค์™€ CentOS, ์šฐ๋ถ„ํˆฌ)์€ PHP์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ข…๋ฃŒ๋œ ์ดํ›„์—๋„ ์ž์ฒด์ ์œผ๋กœ ๊ณ„์† ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์œ ๋ช… ๋ฐฐํฌํŒ๋“ค์€ ๋ณดํ†ต ์„œ๋ฒ„์šฉ์œผ๋กœ ์จ์„œ ์ง€์› ๊ธฐ๊ฐ„์ด ๊ธด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ (ํŠนํžˆ LTS๋กœ ๋ถˆ๋ฆฌ๋Š” ์žฅ๊ธฐ์ง€์› ๋ฒ„์ „), ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ํ•ด๋‹น ๋ฉ”์ด์ € ๋ฒ„์ „ ๋‚ด์—์„œ๋Š” ๊ณต์‹ ์ €์žฅ์†Œ์˜ PHP ๋ฒ„์ „์„ ๋ฐ”๊พธ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฒด์ ์œผ๋กœ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. PHP๋Š” ์›น์„œ๋ฒ„์ด๋‹ˆ ๋ณด์•ˆ์ด ํŒจ์น˜๋œ ์ตœ์‹  ๋ฒ„์ „์„ ์“ฐ๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

7.1. PHP 5[ํŽธ์ง‘]

  • 2007๋…„ 11์›” 5.2 ๋ฒ„์ „ JSON์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‚ด์žฅ๋˜์—ˆ๋‹ค.
  • 2009๋…„ 6์›” 5.3 ๋ฒ„์ „ ์ต๋ช…ํ•จ์ˆ˜ ๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜๋ฅผ ์œ„ํ•œ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค.
  • 2012๋…„ 3์›” 5.4 ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋œ ๊ธฐ๋Šฅ[13]์ด ๋‹ค๋ฅธ ์–ธ์–ด์—์„  ์ด๋ฏธ ์ง€์›๋˜๋Š” ๊ฒƒ๋“ค์ด์ง€๋งŒ, ์ œ์ž‘์ง„๋“ค์˜ ๋ชจ๋ฅด์‡ ๋กœ ์ธํ•ด์„œ ํ™˜ํ˜ธ์„ฑ๊ณผ ํƒ„์‹์ด ๊ต์ฐจํ•˜๊ณ  ์žˆ๋‹ค. ์ƒˆ ๊ธฐ๋Šฅ ์†Œ๊ฐœ ๊ทธ๋ฆฌ๊ณ  ์ƒ์† ์—†์ด ํด๋ ˆ์Šค๋“ค์„ ๋ชจ๋“ˆํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ ˆ์ดํŠธ ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
  • 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๋…„์ด ๋„˜์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค 2005๋…„๋ถ€ํ„ฐ PHP 6์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒŒ ์ทจ์†Œ๋˜๋Š” ๋ฐ”๋žŒ์— PHP 5๋กœ ๊ทผ 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์˜ ํ˜ธํ™˜์„ฑ์„ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•œ ์ƒํƒœ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์€ ๋งŽ์ง€ ์•Š์•˜๋‹ค์„œ

7.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 ํŒŒ์„œ๊ฐ€ ์ ์šฉ๋˜์—ˆ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ฐ์†Œํ–ˆ๋‹ค.
    ์‹ค์ œ๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์™€ ๋ฒค์น˜๋งˆํฌ์— ์˜ํ•˜๋ฉด PHP 7์€ ์ด์ „ ๋ณด๋‹ค 2๋ฐฐ์—์„œ 10๋ฐฐ๊นŒ์ง€๋„ ๋น ๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค.
    ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ๊ณณ์— ์ „๋‹ฌํ• ๋•Œ ๊ฐ’ ๋ณต์‚ฌ ์˜€๋Š”๋ฐ 7.0 ๋ถ€ํ„ฐ๋Š” ์ฐธ์กฐ์ „๋‹ฌ์„ ํ•˜๋„๋ก ๋ฐ”๋€Œ์–ด์„œ ๊ฐ์ฒด์—๋Š” &๋ฅผ ์“ฐ์ง€์•Š์•„๋„ ๋œ๋‹ค.[14]
    ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ํƒ€์ž…์„ ์ง€์ •ํ• ์ˆ˜ ์žˆ๊ฒŒ๋˜์—ˆ๋‹ค.
    PHP 4 ์Šคํƒ€์ผ์˜ ์ƒ์„ฑ์ž ๋ฌธ๋ฒ•์ด ์‚ญ์ œ๋˜๊ณ  5.0์—์„œ ๋‚˜์˜จ ๋ฌธ๋ฒ•์„ ์จ์•ผํ•œ๋‹ค.
    ๋ฌผ์Œํ‘œ ๋‘๊ฐœ๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž๊ฐ€ ์ง€์›๋˜์–ด ํŽธ๋ฆฌํ•ด์กŒ๋‹ค.[15]
    ์ด์ „ ๋ฐฉ์‹
            $user = (!empty($_GET['user'])) ? $_GET['user'] : '';  // ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ ์ฒ˜๋ฆฌ ? ์•ž์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋Œ€์ž…ํ•˜๊ณ  ์—†์œผ๋ฉด  ๋’ค์— ๊ฒƒ์„ ์“ด๋‹ค.
    
         PHP7.0 ๋ถ€ํ„ฐ๋Š” ๊ฐ™์€ ํ‘œํ˜„์‹์ด ๊ฐ„๋‹จํ•ด์ง„๋‹ค.
            $user = $_GET['user'] ?? ''; // ??(null ๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž) ์•ž์— ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๋’ค์—๊ฒƒ์„ ์“ด๋‹ค.
  • 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์›” 1์ผ, PHP 7.0 ๋ฒ„์ „ ์ง€์›์ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค.
  • 2018๋…„ 12์›” 6์ผ, PHP 7.3 ์ •์‹ ๋ฒ„์ „์„ ๋ฐœํ‘œํ•˜์˜€๋‹ค. Heredoc, Newdoc ๋ฌธ๋ฒ•์ด ์œ ์—ฐํ•ด์กŒ๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋งˆ์ง€๋ง‰ ํŒŒ๋ผ๋ฏธํ„ฐ ๋’ค์— ์ฝค๋งˆ๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.
  • 2018๋…„ 12์›” 31์ผ, PHP 5.6 ๋ฒ„์ „์˜ ์ง€์›์ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. ์ด๋กœ์จ PHP 5.x ๋ฒ„์ „์€ 15๋…„๊ฐ„์˜ ๊ธธ๊ณ  ๊ธด ์—ญ์‚ฌ๋ฅผ ๋งˆ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
  • 2019๋…„ 11์›” 26์ผ, PHP 7.4 ์ •์‹ ๋ฒ„์ „์ด ๋ฐœํ‘œ๋˜์—ˆ๋‹ค. ์„ฑ๋Šฅ์ด ์ตœ๋Œ€ 8%์˜ ํ–ฅ์ƒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉฐ์น  ํ›„์ธ 12์›” 1์ผ์— PHP 7.1 ๋ฒ„์ „ ์ง€์›์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค.

7.3. PHP 8[ํŽธ์ง‘]

  • 2020๋…„ PHP 8์—์„œ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์œ„ํ•œ JIT ๋„์ž…, ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ๊ฒ€์‚ฌ ๋“ฑ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ฐ•ํ™”๊ฐ€ ๋˜์—ˆ๋‹ค.
    ํŠนํžˆ ์—๋Ÿฌ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๊ฐ์ถ”๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋˜ @์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค. [16]

๋‹ค๋ฅธ์–ธ์–ด์—์„œ ์˜ต์…”๋„์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š” null safe ์—ฐ์‚ฐ์ž๊ฐ€ ์ง€์›๋œ๋‹ค.
//์•„๋ž˜๋Š” 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. ๊ธฐํƒ€[ํŽธ์ง‘]

  • FastCGI๋กœ ํ”„๋ก์‹œ ํ•˜๊ฒŒ ๋˜๋ฉด HTTPํ—ค๋”์— X-Powered-By ์ด๋ฆ„์˜ ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. : X-Powered-By: PHP/7.4.2 [17]
  • ํ˜„์žฌ ์›น์ƒ์— ๊ณต๊ฐœ๋œ ๋งŽ์€ ์›น ๊ด€๋ จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด 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 ์–ธ์–ด) ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ.[18] ๋Œ€ํ‘œ์ ์œผ๋กœ ํŽ˜์ด์Šค๋ถ์—์„œ PHP์˜ ํ‘œ์ค€์— ๋Œ€ํ•ด ๊ณต์‹ํ™”ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ๋‹ค. ์‹ฌ์ง€์–ด ๊ณต์‹ PHP์—์„œ๋„ ์ด ๋ฌธ์„œ๋ฅผ ์ด์šฉํ•œ๋‹ค. ์ด์ „๊นŒ์ง€ PHP๋Š” ์ œ๋Œ€๋กœ ๋œ ์–ธ์–ด ์‚ฌ์–‘์„œ(php.net์˜ ๋ฌธ์„œ์™€๋Š” ์„ฑ๊ฒฉ์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค)๊ฐ€ ์—†์—ˆ๋‹ค. ์ฆ‰, ๋งˆ๋•…ํžˆ PHP ์–ธ์–ด ๊ฐœ๋ฐœ์ง„์ด ํ•ด์•ผ ํ•  ์ผ์„ ๋ˆ ํ•œ ํ‘ผ ์•ˆ ๋ฐ›๊ณ  ํŽ˜์ด์Šค๋ถ์—์„œ ํ•œ ๊ฒƒ์ด๋‹ค. GitHub ํŽ˜์ด์ง€
  • ํŽ˜์ด์Šค๋ถ๊ณผ ์›Œ๋“œํ”„๋ ˆ์Šค, ๋ฏธ๋””์–ด์œ„ํ‚ค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Magento์™€ WooCommerce๋ผ๋Š” ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์—๋„ PHP๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. Magento์™€ WooCommerce๋Š” ์„ธ๊ณ„ 1, 2์œ„๋ฅผ ๋‹คํˆฌ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์ด๋‹ค.
  • ํŒŒ์ƒ ํ”„๋กœ์ ํŠธ๋กœ PEAR, PECL ๋“ฑ์ด ์žˆ๋‹ค. ์ด๋ฆ„ ๋•Œ๋ฌธ์ธ์ง€ ๊นจ์•Œ๊ฐ™์ด ๋ฐฐ์™€ ์˜ค์ด ์ ˆ์ž„์ด ๊ฐ๊ฐ ๊ทธ๋ ค์ ธ ์žˆ๋‹ค.
  • Laravel, Codeigniter ๋“ฑ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ๊ณ  ์ปดํฌ์ €๋ผ๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋„ ์กด์žฌํ•œ๋‹ค. ๋””๋ฒ„๊น… ๋„๊ตฌ๋กœ๋Š” Xdebug๊ฐ€ ์“ฐ์ธ๋‹ค.

9. PHP๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก[ํŽธ์ง‘]

[1] ์‚ฌ์‹ค PHP๋Š” Perl๊ณผ ์ข€ ๋” ์œ ์‚ฌํ•˜๋‹ค. ๋‹ค๋งŒ C์–ธ์–ด์—์„œ ํŒŒ์ƒ๋œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ C-like๋กœ ๊ธฐ์ˆ ํ•˜์˜€๋‹ค.
[2] PHP์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์ „์— ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , $var = 9;์ด๋ฉด ์ˆซ์ž, $var = "String"; ์ด๋ฉด ๋ฌธ์ž์—ด $var = true ์ด๋ฉด ์ฐธ๊ฑฐ์ง“ ๋ณ€์ˆ˜๋กœ ์ ์šฉ๋˜๋ฉฐ, ์ด๋ฏธ ์„ ์–ธ๋œ ๋ฌธ์ž์—ด์ด + ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ˆซ์ž๋กœ ์ธ์‹ํ•œ๋‹ค.
[3] ์Šคํฌ๋ฆฝํŠธ์˜ ์–ธ์–ด ์†์„ฑ์œผ๋กœ language๋ฅผ ์“ฐ๋Š” ๊ฒƒ ๋˜ํ•œ ์‚ฌ์‹ค์€ ๋น„ํ‘œ์ค€์ด๋‹ค. ํ‘œ์ค€๋Œ€๋กœ๋ผ๋ฉด type์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค. HTML4 ์‹œ์ ˆ๋ถ€ํ„ฐ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๊ฐ€ ํ˜ผ์šฉ๋˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ HTML5์—์„œ ํ›„์ž๊ฐ€ ์‚ด์•„๋‚จ์€ ๊ฒƒ.
[4] php opcache
[5] ๊ธฐ์กด ํ•จ์ˆ˜๋Š” ์ง€์›ํ•˜์ง€๋งŒ, ์„œ์„œํžˆ ์—†์• ๊ณ  ์žˆ๋‹ค.
[6] PHP 8.0์—์„œ๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋„๋ก ๋ฐ”๋€Œ์—ˆ๋‹ค.
[7] Notice ์ˆ˜์ค€์˜ ๋กœ๊ทธ๋กœ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ php.ini์—์„œ ์„ค์ •์„ ๊ป์„๊ฒฝ์šฐ ๋ชจ๋ฅด๊ณ  ์ง€๋‚˜์น˜๊ธฐ ์‰ฝ๋‹ค.
[8] (Model)-์ถœ๋ ฅ(View)-์ž…๋ ฅ ๋ฐ ์ œ์–ด(Controller)์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹.
[9] 95~2002๋…„
[10] ๊ทธ๋Ÿฐ๋ฐ ๋ฃจ๋น„ ์˜จ ๋ ˆ์ผ์ฆˆ ๋“ฑ์˜ ์˜ํ–ฅ์„ ๋ฐ›์€ ๋‹ค์–‘ํ•œ MVC ํŒจํ„ด์„ ์ง€์›ํ•˜๋Š” ์›น ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์˜คํžˆ๋ ค ๋‚œ์ด๋„๊ฐ€ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋‚ฎ์•„์กŒ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 2015๋…„ ํ˜„์žฌ ๋Œ€์„ธ๋กœ ๋– ์˜ค๋ฅด๊ณ  ์žˆ๋Š” Laravel ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” GitHub์—์„œ Python์˜ ๋Œ€ํ‘œ์ ์ธ ์›น ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Django์˜ star ์ˆ˜๋ฅผ ๋›ฐ์–ด๋„˜์—ˆ๋‹ค.
[11] PHPํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ๊ถŒ์žฅ ๊ทœ์น™
[12] 2016๋…„์—๋Š” .NET์˜ ์˜คํ”ˆ ์†Œ์Šค ๊ตฌํ˜„์ฒด์ธ .NET Core๊ฐ€ ์ง€์›๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.
[13] ๋ฐฐ์—ด์„ ๏ผป๏ผฝ๋กœ ์„ ์–ธํ•˜๊ธฐ, ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ณง๋ฐ”๋กœ ์ ‘๊ทผํ•˜๊ธฐ ๋“ฑ. ์ด๊ฒƒ์€ ์ด๋ฏธ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ JavaScript์—์„œ ๊ตฌํ˜„๋œ ๊ฒƒ๋“ค์ด๋‹ค. ์ด ์™ธ์—๋„ JavaScript์—์„œ ์œ ๋ž˜ํ•œ ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
[14] call by reference
[15] null coalescing operator
[16] ์ฆ‰ PHP 7์—์„œ ๋ฒ„๊ทธ๋ฅผ ์žก์ง€์•Š๊ณ  ์งœ์—ฌ์ง„ ์ฝ”๋“œ๋“ค์€ PHP8์—์„œ ๋ฌธ์ œ๊ฐ€ ๋“œ๋Ÿฌ๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.
[17] ์—ฌ๋‹ด์œผ๋กœ header_remove๋กœ ์ง€์šธ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ง€์šฐ์ง€ ์•Š์•„์„œ ํ”„๋กœ๊ทธ๋žจ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜๋ฉด ์„œ๋ฒ„ ๋ณด์•ˆ์— ์ทจ์•ฝํ•  ๊ฑฐ๋ผ๋Š” ์ง€์ ์ด ์žˆ๋‹ค. #StackOverflow
[18] ์™ธ๊ตญ์—์„œ๋Š” ๊ธฐ์—…์ด ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž์‚ฌ์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•œ ๊ฒฝ์šฐ ๊ทธ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌ(contribute)๋ฅผ ํ•˜๋Š” ์ผ์ด ํ”ํ•˜๋‹ค.
[20] ์ฃผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์“ฐ์˜€์œผ๋ฉฐ, ํ˜„์žฌ๋Š” PHP๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž์ฒด ๊ฐœ๋ฐœํ•œ Hack ์–ธ์–ด๋กœ ๋„˜์–ด๊ฐ”๋‹ค.