8.2๋ ๊ฐ์ ๊ฐ๋ฐ ๋์ PHP XNUMX ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ถ์๋์์ต๋๋ค. ์ ๋ถ๊ธฐ์๋ ์ผ๋ จ์ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ํธํ์ฑ์ ์์์ํค๋ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค.
PHP 8.2์ ์ฃผ์ ๊ฐ์ ์ฌํญ:
- ํด๋์ค๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ํ์ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค. ์ด๋ฌํ ํด๋์ค์ ์์ฑ์ ํ ๋ฒ๋ง ์ค์ ํ ์ ์์ผ๋ฉฐ ๊ทธ ํ์๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด์ ์๋ ๊ฐ๋ณ ํด๋์ค ์์ฑ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ํ์ํ ์ ์์์ง๋ง ์ด์ ๋ชจ๋ ํด๋์ค ์์ฑ์ ๋ํด ์ด ๋ชจ๋๋ฅผ ํ ๋ฒ์ ์ผค ์ ์์ต๋๋ค. ํด๋์ค ์์ค์์ "readonly" ํ๋๊ทธ๋ฅผ ์ง์ ํ๋ฉด ํด๋์ค์ ์์ฑ์ ๋์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ๋ ์ฐจ๋จ๋ฉ๋๋ค. ์ฝ๊ธฐ ์ ์ฉ ํด๋์ค Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* โฆ */); $post->unknown = '์๋ชป๋จ'; // ์ค๋ฅ: ๋์ ์์ฑ์ ๋ง๋ค ์ ์์ต๋๋ค. Post::$unknown
- ํ๋์ ์ ํจํ ๊ฐ๋ง ์ฌ์ฉํ ์ ์๊ณ ์๋ฅผ ๋ค์ด ์ค๋ฅ ์ข ๋ฃ ํ๋๊ทธ ๋๋ ๋น ๊ฐ์ด ์๋ ํจ์๋ฅผ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ณ๋์ ์ ํ "true", "false" ๋ฐ "null"์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด์ ์๋ "true", "false" ๋ฐ "null"์ ๋ค๋ฅธ ์ ํ(์: "string|false")๊ณผ ๊ฒฐํฉํด์๋ง ์ฌ์ฉํ ์ ์์์ง๋ง ์ด์ ๋ ๋ณ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. function AlwaysFalse(): false { return false ; }
- ์ค๋ฅ ๋ฐ์ ์ ์คํ ์ถ์ ์ถ๋ ฅ์์ โโ๋ฏผ๊ฐํ ์ค์ ์ ํํฐ๋งํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ต๋๋ค. ๋ฐ์ํ๋ ์ค๋ฅ์ ๋ํ ์ ๋ณด๊ฐ ๋ฌธ์ ๋ฅผ ์ถ์ ํ๊ณ ๊ฐ๋ฐ์์๊ฒ ์๋ฆฌ๋ ํ์ฌ ์๋น์ค์ ์๋์ผ๋ก ์ ์ก๋๋ ๊ฒฝ์ฐ ํน์ ์ ๋ณด๋ฅผ ์๋ผ๋ด์ผ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ์ด๋ฆ, ๋น๋ฐ๋ฒํธ ๋ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ํฌํจํ๋ ์ถ์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. 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
- ํน์ฑ(ํน์ฑ, ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํ ๋ฉ์ปค๋์ฆ)์์ ์์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ํน์ฑ์ ์ ์๋ ์์๋ ํด๋น ํน์ฑ์ ์ฌ์ฉํ๋ ํด๋์ค๋ฅผ ํตํด ์ก์ธ์คํ ์ ์์ต๋๋ค(ํน์ฑ ์ด๋ฆ์ ํตํด์๋ ์๋). trait Foo { public const CONSTANT = 1; ๊ณต์ฉ ํจ์ bar(): int { return self::CONSTANT; // ์น๋ช ์ ์ธ ์ค๋ฅ } } class Bar { use Foo; } var_dump(๋ฐ::์์); // 1
- Disjunctive Normal Form(DNF, Disjunctive Normal Form)์ผ๋ก ์ ํ์ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ ํ์ ํฉ์งํฉ(๋ ์ด์์ ์ ํ์ ์งํฉ)๊ณผ ์ ํ์ ๊ต์งํฉ(๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ์ํ๋ ์ ํ)์ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ์ ํ์ ๋์์). class Foo { ๊ณต๊ฐ ํจ์ bar((A&B)|null $entity) { if ($entity === null) { return null; } $entity๋ฅผ ๋ฐํํฉ๋๋ค. } }
- ์์ฌ ๋์ ๋ฐ ์ํ์ค๋ฅผ ์์ฑํ๊ธฐ ์ํ ํจ์ ๋ฐ ํด๋์ค๊ฐ ํฌํจ๋ ์๋ก์ด ํ์ฅ "Random"์ด ์ ์๋์์ต๋๋ค. ์ด ๋ชจ๋์ ๊ฐ์ฒด ์งํฅ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ์ํธํ์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ ์์ง์ ํฌํจํ์ฌ ์์ฌ ๋์ ์์ฑ์ ์ํ ๋ค์ํ ์์ง์ ์ ํํ ์ ์๋๋ก ํ๋ฉฐ, ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด์ ๋ฌด์์๋ก ํผํฉํ๊ณ , ๋ฌด์์ ๋ฐฐ์ด ํค๋ฅผ ์ ํํ๋ ๋ฑ์ ๋ณด์กฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์์ ๋ง์ ๋ ๋ฆฝ์ ์ธ ์ํ๋ก ์ฌ๋ฌ ๋ฐ์ ๊ธฐ๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. $rng = $is_production ? ์๋ก์ด Random\Engine\Secure() : ์๋ก์ด Random\Engine\Mt19937(1234); $randomizer = ์๋ก์ด Random\Randomizer($rng); $randomizer->shuffleString('foobar');
- ๋ก์ผ์ผ ๋ ๋ฆฝ์ ์ธ ๋์๋ฌธ์ ๋ณํ์ ๊ตฌํํ์ต๋๋ค. strtolower() ๋ฐ strtoupper()์ ๊ฐ์ ํจ์๋ ์ด์ ๋ก์ผ์ผ์ "C"๋ก ์ค์ ํ ๋์ ๊ฐ์ด ํญ์ ASCII ๋ฒ์์ ๋ฌธ์ ๋์๋ฌธ์๋ฅผ ๋ณํํฉ๋๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ: mysqli_execute_query, cur_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, ๋ํธ๋ฅจ_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
- ์๋ก์ด ๋ฉ์๋ ์ถ๊ฐ: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
- ํด๋์ค์์ ์์ฑ์ ๋์ ์ผ๋ก ์์ฑํ๋ ๊ธฐ๋ฅ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. PHP 9.0์์๋ ํด๋์ค์ ์ฒ์์ ์ ์๋์ง ์์ ์์ฑ์ ์ก์ธ์คํ๋ฉด ์ค๋ฅ(ErrorException)๊ฐ ๋ฐ์ํฉ๋๋ค. ์์ฑ ์์ฑ์ ์ํด __get ๋ฐ __set ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ํด๋์ค ๋๋ stdClass์ ๋์ ์์ฑ์ ๋ณ๊ฒฝ ์์ด ๊ณ์ ์๋ํ๋ฉฐ, ์จ๊ฒจ์ง ๋ฒ๊ทธ๋ก๋ถํฐ ๊ฐ๋ฐ์๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์กด์ฌํ์ง ์๋ ์์ฑ์ ์ฌ์ฉํ ์์์ ์์ ๋ง ์ง์๋ฉ๋๋ค. ์ด์ ์ฝ๋์ ์์ ์ ๋ณด์กดํ๊ธฐ ์ํด ๋์ ์์ฑ์ ์ฌ์ฉํ ์ ์๋ "#[AllowDynamicProperties]" ์์ฑ์ด ์ ์๋์์ต๋๋ค.
- "${var}" ๋ฐ ${(var)}" ์์ ์ฌ์ฉํ์ฌ ๋ณ์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋์ฒดํ๋ ๊ธฐ๋ฅ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ "{$var}" ๋ฐ "$var" ๋์ฒด์ ๋ํ ์ง์์ด ์ ์ง๋์์ต๋๋ค. ์: "Hello {$world}"; ํ์ธ "Hello $world"; OK "์๋ ํ์ธ์ ${world}"; ๋ ์ด์ ์ฌ์ฉ๋์ง ์์: ๋ฌธ์์ด์์ ${} ์ฌ์ฉ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์
- "call_user_func($callable)"์ ํตํด ํธ์ถํ ์ ์๋ ๋ถ๋ถ์ ์ผ๋ก ์ง์๋๋ ์ฝ๋ฌ๋ธ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ง๋ง "$callable()": "self::method" "parent::method" "static :: ํ์์ ํธ์ถ์ ์ง์ํ์ง ์์ต๋๋ค. ๋ฐฉ๋ฒ" ["์์ ", "๋ฐฉ๋ฒ"] ["๋ถ๋ชจ", "๋ฐฉ๋ฒ"] ["์ ์ ", "๋ฐฉ๋ฒ"] ["Foo", "Bar::๋ฐฉ๋ฒ"] [์๋ก์ด Foo, "๋ฐ: :๋ฐฉ๋ฒ "]
- error_log_mode ์ง์๋ฌธ์ด ์ค์ ์ ์ถ๊ฐ๋์ด ์ค๋ฅ ๋ก๊ทธ์ ๋ํ ์ก์ธ์ค ๋ชจ๋๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru