PHP 8.2์˜ ์•ŒํŒŒ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

PHP 8.2 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ƒˆ ๋ถ„๊ธฐ์˜ ์ฒซ ๋ฒˆ์งธ ์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ๋งค๋Š” 24์›” 8.2์ผ๋กœ ์˜ˆ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. PHP XNUMX์—์„œ ์ด๋ฏธ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ธ ์ฃผ์š” ํ˜์‹  ์‚ฌํ•ญ:

  • ๋ณ„๋„์˜ ์œ ํ˜• "false" ๋ฐ "null"์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์™„๋ฃŒ ํ‘œ์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์—์„œ ๋นˆ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” "false" ๋ฐ "null"์„ ๋‹ค๋ฅธ ์œ ํ˜•(์˜ˆ: "string|false")๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. function alwaysFalse(): false { return false; }
  • ํด๋ž˜์Šค๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค์˜ ์†์„ฑ์€ ํ•œ ๋ฒˆ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ํ›„์—๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๊ฐœ๋ณ„ ํด๋ž˜์Šค ์†์„ฑ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ ๋ชจ๋“  ํด๋ž˜์Šค ์†์„ฑ์— ๋Œ€ํ•ด ์ด ๋ชจ๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์ผค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์ˆ˜์ค€์—์„œ "readonly" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ํด๋ž˜์Šค์— ์†์„ฑ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ „์šฉ ํด๋ž˜์Šค Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* โ€ฆ */); $post->unknown = '์ž˜๋ชป๋จ'; // ์˜ค๋ฅ˜: ๋™์  ์†์„ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Post::$unknown
  • ํด๋ž˜์Šค์—์„œ ์†์„ฑ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ์œ„์˜ ์˜ˆ์—์„œ "post->unknown"). PHP 9.0์—์„œ ์›๋ž˜ ํด๋ž˜์Šค์— ์ •์˜๋˜์ง€ ์•Š์€ ์†์„ฑ์— ์•ก์„ธ์Šคํ•˜๋ฉด ์˜ค๋ฅ˜(ErrorException)๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด __get ๋ฐ __set ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค ๋˜๋Š” stdClass์˜ ๋™์  ์†์„ฑ์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ž‘๋™ํ•˜๋ฉฐ, ์ˆจ๊ฒจ์ง„ ์˜ค๋ฅ˜๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ์ž๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์— ๋Œ€ํ•œ ์•”์‹œ์  ์ž‘์—…๋งŒ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด "#[AllowDynamicProperties]" ํŠน์„ฑ์ด ์ œ์•ˆ๋˜์–ด ๋™์  ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์Šคํƒ ์ถ”์  ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋ฏผ๊ฐํ•œ ์„ค์ •์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ํƒ€์‚ฌ ์„œ๋น„์Šค์— ์ž๋™์œผ๋กœ ์ „์†ก๋˜๋Š” ๊ฒฝ์šฐ ํŠน์ • ์ •๋ณด๋ฅผ ์ž˜๋ผ๋‚ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์ถ”์ ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('์˜ค๋ฅ˜'); } test('foo', '๋น„๋ฐ€๋ฒˆํ˜ธ', 'baz'); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main}์ด test.php์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ 8
  • "${var}" ๋ฐ ${(var)}" ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” "{$var}" ๋ฐ "$var" ๋Œ€์ฒด์— ๋Œ€ํ•œ ์ง€์›์ด ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: "Hello {$world}"; ํ™•์ธ "Hello $world"; OK "์•ˆ๋…•ํ•˜์„ธ์š” ${world}"; ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ: ๋ฌธ์ž์—ด์—์„œ ${} ์‚ฌ์šฉ์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
  • "call_user_func($callable)"์„ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์ฝœ๋Ÿฌ๋ธ”์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ "$callable()": "self::method" "parent::method" "static :: ํ˜•์‹์˜ ํ˜ธ์ถœ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•" ["์ž์‹ ", "๋ฐฉ๋ฒ•"] ["๋ถ€๋ชจ", "๋ฐฉ๋ฒ•"] ["์ •์ ", "๋ฐฉ๋ฒ•"] ["Foo", "Bar::๋ฐฉ๋ฒ•"] [์ƒˆ๋กœ์šด Foo, "๋ฐ”: :๋ฐฉ๋ฒ• "]
  • ๋กœ์ผ€์ผ ๋…๋ฆฝ์ ์ธ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. strtolower() ๋ฐ strtoupper()์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ์ด์ œ ๋กœ์ผ€์ผ์„ "C"๋กœ ์„ค์ •ํ•  ๋•Œ์™€ ๊ฐ™์ด ํ•ญ์ƒ ASCII ๋ฒ”์œ„์˜ ๋ฌธ์ž ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€