PHP 7.4 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค

XNUMX๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ œ์‹œ๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค PHP 7.4. ์ƒˆ ๋ถ„๊ธฐ์—๋Š” ์ผ๋ จ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ํ˜ธํ™˜์„ฑ์„ ์†์ƒ์‹œํ‚ค๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด์‡  ๊ฐœ๋Ÿ‰ PHP 7.4์—์„œ:

  • ์œ ํ˜•ํ™”๋œ ์†์„ฑ - ์ด์ œ ํด๋ž˜์Šค ์†์„ฑ์— ์œ ํ˜• ์„ ์–ธ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

    ํด๋ž˜์Šค ์‚ฌ์šฉ์ž {
    ๊ณต๊ฐœ int $id;
    ๊ณต๊ฐœ ๋ฌธ์ž์—ด $name;
    }

  • ์•ฝ์นญ ๊ฐ’์œผ๋กœ ๋ฒ”์œ„ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ "fn(parameter_list) => expr" ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "fn($x) => $x + $y"๋Š” "$fn2 = function ($x) use ($y) {return $x + $y;}")์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์†๊ธฐ ํ• ๋‹น ์—ฐ์‚ฐ์ž ๊ธฐ๋ณธ๊ฐ’์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” "??="("a ??= b"๋Š” "a = a ?? b"์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. "a"๊ฐ€ ์ •์˜๋˜๋ฉด ํ•ด๋‹น ๊ฐ’์ด ์ €์žฅ๋˜๊ณ  ์ •์˜๋˜์ง€ ์•Š์œผ๋ฉด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’ "b"๊ฐ€ ํ• ๋‹น๋จ );
  • ์ œํ•œ๋œ ๊ธฐํšŒ ํŒŒ์ƒ๋œ ๋ฐ˜ํ™˜ ์œ ํ˜•์—์„œ ์œ ํ˜•์˜ ์ƒ์† ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ํŒŒ์ƒ๋œ ์ธ์ˆ˜ ์œ ํ˜•์—์„œ ์›๋ž˜ ์œ ํ˜•์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์—ญ์ „ํ•˜๋Š” ๊ธฐ๋Šฅ(๊ณต๋ถ„์‚ฐ ๋ฐ˜ํ™˜ ์œ ํ˜• ๋ฐ ์ธ์ˆ˜ ์œ ํ˜• ๋ฐ˜๊ณต๋ณ€์„ฑ). ์ด์ œ PHP์—์„œ ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํด๋ž˜์Šค A {}
    ํด๋ž˜์Šค B๋Š” A {}๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

    ํด๋ž˜์Šค ํ”„๋กœ๋“€์„œ {
    ๊ณต๊ฐœ ํ•จ์ˆ˜ ๋ฉ”์„œ๋“œ(): A {}
    }
    ChildProducer ํด๋ž˜์Šค๋Š” Producer {๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
    ๊ณต๊ฐœ ํ•จ์ˆ˜ ๋ฉ”์„œ๋“œ(): B {}
    }

  • ๋ฐฐ์—ด "...$var" ๋‚ด๋ถ€์˜ ์—ฐ์‚ฐ์ž ์••์ถ• ํ’€๊ธฐ, ํ—ˆ์šฉ ์ƒˆ ๋ฐฐ์—ด์„ ์ •์˜ํ•  ๋•Œ ๊ธฐ์กด ๋ฐฐ์—ด์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

    $parts = ['์‚ฌ๊ณผ', '๋ฐฐ'];
    $fruits = ['๋ฐ”๋‚˜๋‚˜', '์˜ค๋ Œ์ง€', โ€ฆ$parts, '์ˆ˜๋ฐ•'];
    // ['๋ฐ”๋‚˜๋‚˜', '์˜ค๋ Œ์ง€', '์‚ฌ๊ณผ', '๋ฐฐ', '์ˆ˜๋ฐ•'];

  • ๊ธฐํšŒ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์— ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ ์žˆ๋Š” ํฐ ์ˆซ์ž์˜ ์‹œ๊ฐ์  ํ‘œํ˜„(1_000_000_00)
  • ์ง€์› ์•ฝํ•œ ๋งํฌ, ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ๊ด€๋ จ ๊ฐœ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ะผะตั…ะฐะฝะธะทะผ ๊ฐ์ฒด ์ง๋ ฌํ™”(์ง๋ ฌํ™” ๊ฐ€๋Šฅ ๋ฐ __sleep()/__wakeup()์˜ ์กฐํ•ฉ). ์ด๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ง๋ ฌํ™” ๊ฐ€๋Šฅ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

    // ๊ฐ์ฒด์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    ๊ณต๊ฐœ ํ•จ์ˆ˜ __serialize(): ๋ฐฐ์—ด;

    // ๋ฐฐ์—ด์—์„œ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.
    ๊ณต๊ฐœ ํ•จ์ˆ˜ __unserialize(array $data): void;

  • ๋ฉ”์†Œ๋“œ์—์„œ ์˜ˆ์™ธ ๋ฐœ์ƒ์ด ํ—ˆ์šฉ๋จ __toString();
  • ๊ฐœ์ฒด ์ฝ”๋“œ ์บ์‹œ ์‚ฌ์ „ ๋กœ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์„ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    opcache.preload, ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋  PHP ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์ง์ ‘ ํฌํ•จํ•˜๊ฑฐ๋‚˜ opcache_compile_file() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํŒŒ์ผ์˜ opcode๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Castagnoli ๋‹คํ•ญ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒดํฌ์„ฌ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์‹œ ํ™•์žฅ์— crc32c ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • PHP๊ฐ€ libargon ์—†์ด ๋นŒ๋“œ๋œ ๊ฒฝ์šฐ Sodium ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌํ˜„์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ ๋ฐฉ๋ฒ• argon2i ๋ฐ argin2id์— ๋Œ€ํ•œ Password_hash() ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • str_split()๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ์œ„์น˜๋กœ ์ž‘๋™ํ•˜๋Š” mb_str_split() ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ Strip_tags() ํ•จ์ˆ˜์—๋Š” ํƒœ๊ทธ ์ด๋ฆ„์ด ํฌํ•จ๋œ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Strip_tags($str, ' ') ๋Œ€์‹ ์— Strip_tags($str, ['a', 'p']);๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • proc_open()์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰ํ•  ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๋ฐฐ์—ด์— ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์Šค๋ ˆ๋“œ ๋ฆฌ๋””๋ ‰์…˜ ๋ฐ ๋„ ํŒŒ์ผ ์„ค๋ช…์ž์— ๋Œ€ํ•œ ์ง€์›๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // ์‰˜์˜ 2>&1๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    proc_open($cmd, [1 => ['ํŒŒ์ดํ”„', 'w'], 2 => ['๋ฆฌ๋””๋ ‰์…˜', 1]], $pipes);

    // ์‰˜์—์„œ๋Š” 2>/dev/null ๋˜๋Š” 2>nul๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    proc_open($cmd, [1 => ['ํŒŒ์ดํ”„', 'w'], 2 => ['null']], $pipes);

  • Firebird/Interbase, Recode ๋ฐ WDDX ํ™•์žฅ์€ ๊ธฐ๋ณธ ๋ฐฐํฌ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ™•์žฅ์€ ์ด์ œ PECL์„ ํ†ตํ•ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.
  • ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์ด๋™๋จ ๊ตฌ์‹์˜ ๊ด„ํ˜ธ ์—†์ด ์ค‘์ฒฉ๋œ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, ์ค‘๊ด„ํ˜ธ(โ€œ$var{$idx}โ€)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ์š”์†Œ ๋ฐ ๋ฌธ์ž์—ด์— ์•ก์„ธ์Šค, is_real() ๋ฐ ์‹ค์ˆ˜๋กœ ์บ์ŠคํŒ…, ์ƒ์œ„ ํด๋ž˜์Šค ์—†์ด ์ƒ์œ„ ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ, ๋งค๊ฐœ๋ณ€์ˆ˜ ํ—ˆ์šฉ_url_include ๊ตฌ์„ฑ, ์‚ฌ์šฉ ๋“ฑ์˜ ๊ธฐ๋Šฅ ๊ฐ์ฒด์— ๋Œ€ํ•œ array_key_exists().

    get_magic_quotes_gpc(), get_magic_quotes_runtime() ํ•จ์ˆ˜ ๋ฐ
    hebrevc(), Convert_cyr_string(), Money_format(), ezmlm_hash(), Restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    ํ•จ์ˆ˜์—์„œ ์ž˜๋ชป๋œ ๊ธฐํ˜ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    base_convert(), bindec(), octdec() ๋ฐ hexdec(), ๊ทธ๋ฆฌ๊ณ  mb_ereg_replace()์—์„œ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ํŒจํ„ด์„ ์ง€์ •ํ•  ๋•Œ.

์ถœ์ฒ˜ : opennet.ru

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