8.1๋ ๊ฐ์ ๊ฐ๋ฐ ๋์ PHP XNUMX ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ถ์๋์์ต๋๋ค. ์ ๋ถ๊ธฐ์๋ ์ผ๋ จ์ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ํธํ์ฑ์ ์์์ํค๋ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ต๋๋ค.
PHP 8.1์ ์ฃผ์ ๊ฐ์ ์ฌํญ:
- ์ด๊ฑฐ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด์ ๋ค์ ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. enum Status { case Pending; ์ผ์ด์ค ํ์ฑ; ์ฌ๋ก๊ฐ ๋ณด๊ด๋์์ต๋๋ค. } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // โฆ } } $post->setStatus(Status::Active);
- ๋ฎ์ ์์ค์์ ์คํ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ ์ ์๋ Fibers๋ผ๋ ๊ฒฝ๋ ์ค๋ ๋์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. Amphp ๋ฐ ReactPHP ํ๋ ์์ํฌ์ Fiber ์ง์์ด ์ถ๊ฐ๋ ์์ ์ ๋๋ค. $fibre = new Fiber(function (): void { $valueAfterResuming = Fiber::ํ์๋ง('์ผ์ ์ค๋จ ํ'); // ... }); $valueAfterSuspending = $์ฌ์ ->์์(); $์ฌ์ ->resume('์ฌ๊ฐ ํ');
- ๊ฐ์ฒด ์ฝ๋ ์บ์(opcache) ๊ตฌํ์ด ๊ฐ์ ๋์ด ํด๋์ค ์์์ ๋ํ ์ ๋ณด๋ฅผ ์บ์ํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ต์ ํ๋ฅผ ํตํด ์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ 5~8% ํฅ์ํ ์ ์์์ต๋๋ค. ๊ธฐํ ์ต์ ํ์๋ JIT ์์ ์ต์ ํ, ARM64 ์ํคํ ์ฒ(AArch64)์ ๋ํ JIT ์ง์ ๊ตฌํ, ์ด๋ฆ ํ์ธ ๊ฐ์ํ, timelib ๋ฐ ext/date ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ต์ ํ, ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ ์ฑ๋ฅ ํฅ์, get_declared_classes(),Explode() ์ต์ ํ๊ฐ ํฌํจ๋ฉ๋๋ค. , strtr() ํจ์, strnatcmp(), dechex(). ์ผ๋ฐ์ ์ผ๋ก Symfony Demo์ ์ฑ๋ฅ์ 23.0%, WordPress์ ๊ฒฝ์ฐ 3.5% ํฅ์๋์์ต๋๋ค.
- ์ ๋ฐฐ์ด์ ์ ์ํ ๋ ๊ธฐ์กด ๋ฐฐ์ด์ ๋์ฒดํ ์ ์๋ ๋ฐฐ์ด "...$var" ๋ด๋ถ์ ์์ถ ํ๊ธฐ ์ฐ์ฐ์๊ฐ ๋ฌธ์์ด ํค๋ฅผ ์ง์ํ๋๋ก ํ์ฅ๋์์ต๋๋ค(์ด์ ์๋ ๋์งํธ ์๋ณ์๋ง ์ง์๋์์ต๋๋ค). ์๋ฅผ ๋ค์ด ์ด์ ์ฝ๋์์ ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. $array1 = [โaโ => 1]; $array2 = ["b" => 2]; $array = [โaโ => 0, โฆ$array1, โฆ$array2]; var_dump($array); // ["a" => 1, "b" => 2]
- ํจ์ ์ ์์์ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ ์ธ์ ์์ฑ๊ณผ ๊ฐ์ ์ด๊ธฐํ ํ๋ก๊ทธ๋จ์์ "new" ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
- ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค๋ฅผ ์ํด ํด๋์ค ์์ฑ์ ํ์ํ ์ ์์ต๋๋ค(์ด๋ฌํ ์์ฑ์ ์ ๋ณด๋ ํ ๋ฒ๋ง ์ธ ์ ์์ผ๋ฉฐ ๊ทธ ํ์๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* โฆ */); $post->title = '๊ธฐํ'; > ์ค๋ฅ: ์ฝ๊ธฐ ์ ์ฉ ์์ฑ Post::$title์ ์์ ํ ์ ์์ต๋๋ค.
- ํธ์ถ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๋ํด ์๋ก์ด ๊ตฌ๋ฌธ์ด ๊ตฌํ๋์์ต๋๋ค. ์ด์ ํจ์๋ฅผ ํธ์ถํ๊ณ "..." ๊ฐ์ ์ธ์๋ก ์ ๋ฌํ์ฌ ํด๋ก์ ๋ฅผ ํ์ฑํ ์ ์์ต๋๋ค(์: Closure::fromCallable('myFunc ๋์ myFunc(...)). ')): ํจ์ foo (int $a, int $b) { /* โฆ */ } $foo = foo(โฆ); $foo(a: 1, b: 2);
- ๊ต์ฐจ ์ ํ์ ๋ํ ์ ์ฒด ์ง์์ด ์ถ๊ฐ๋์ด ๊ธฐ์กด ์ ํ์ ๊ฒฐํฉํ์ฌ ์๋ก์ด ์ ํ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ ๊ฐ ์ด์์ ์ ํ ์ปฌ๋ ์ ์ ์ ์ํ๋ ํตํฉ ์ ํ๊ณผ ๋ฌ๋ฆฌ ๊ต์ฐจ ์ ํ์์๋ ๋์ด๋ ์ ํ์ด ์๋ ์ธํธ์ ์ง์ ๋ ์ ํ์ด ๋ชจ๋ ์์ด์ผ ์ฑ์์ง๋๋ค. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $ํฌ์คํธ->getId(); }
- ์๋ฅผ ๋ค์ด ์์ธ๋ฅผ ๋ฐ์์ํค๊ฑฐ๋ ์ข ๋ฃ ํจ์๋ฅผ ์คํํ์ฌ ํจ์๊ฐ ํ๋ก๊ทธ๋จ ์คํ์ ์ข ๋ฃํ๋ค๋ ๊ฒ์ ์ ์ ๋ถ์๊ธฐ์ ์๋ฆฌ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ์ ํ "never"๊ฐ ์์ต๋๋ค. function dd(mixed $input): ์ ๋ { ์ข ๋ฃ; }
- ์๋ก์ด ํจ์ array_is_list๊ฐ ์ ์๋์์ต๋๋ค. ์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ํค๊ฐ 0๋ถํฐ ์์ํ์ฌ ์ซ์ ๊ฐ์ด ์ฆ๊ฐํ๋ ์์๋๋ก ์ ๋ ฌ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค. $list = [โaโ, โbโ, โcโ]; array_is_list($list); // ์ฐธ $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // false $ alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($ alsoNotAList); // ๊ฑฐ์ง
- ์ด์ "final" ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํด๋์ค ์์๊ฐ ์ฌ์ ์๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. class Foo { final public const X = "foo"; } ํด๋์ค Bar๋ Foo๋ฅผ ํ์ฅํฉ๋๋ค { public const X = "bar"; > ์น๋ช ์ ์ธ ์ค๋ฅ: Bar::X๋ ์ต์ข ์์ Foo::X๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค. }
- ๋์คํฌ ์บ์์์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ๋ก ์ ์ฅํ๊ธฐ ์ํด fsync ๋ฐ fdatasync ๊ธฐ๋ฅ์ด ์ ์๋์์ต๋๋ค. $file = fopen("sample.txt", "w"); fwrite($file, "์ผ๋ถ ๋ด์ฉ"); if (fsync($file)) { echo "ํ์ผ์ด ๋์คํฌ์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋์์ต๋๋ค."; } fclose($file);
- ์ด์ ์ ์ฌ์ฉ๋ ์ ๋์ฌ "0" ์ธ์ 0์ง์์ ์ ๋์ฌ "0o" ๋ฐ "016O"๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. 0 === 16o016; // ์ฐธ 0 === 16OXNUMX; // ์ง์ค
- $GLOBALS์ ์ฌ์ฉ์ ์ ํ์ ์ผ๋ก ์ ํํ๋ ๊ฒ์ด ์ ์๋์์ต๋๋ค. ์ด๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์๋ฐํ๊ฒ ๋์ง๋ง ์ด๋ ์ด ์์ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, $GLOBALS์ ๋ํ ์ฐ๊ธฐ๋ฅผ ๋นํ์ฑํํ๊ณ ํฌ์ธํฐ๋ก $GLOBALS๋ฅผ ์ ๋ฌํ๋ ๊ฐ๋ฅ์ฑ์ด ๊ณ ๋ ค๋๊ณ ์์ต๋๋ค. 2000๊ฐ ํจํค์ง๋ฅผ ๋ถ์ํ ๊ฒฐ๊ณผ ์ด โโ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ๋ ํจํค์ง๋ 23๊ฐ์ ๋ถ๊ณผํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์์ด ์น์ธ๋๋ฉด 8.1์์๋ ๋ ์ด์ $GLOBALS = [];์ ๊ฐ์ ํํ์์ ์ง์ํ์ง ์์ต๋๋ค. $GLOBALS += []; $GLOBALS =& $x; $x =& $๊ธ๋ก๋ฒ; ์ค์ ๋์ง ์์($GLOBALS); by_ref($GLOBALS);
- ์ด์ ๋ด๋ถ ๋ฉ์๋๊ฐ ์ฌ๋ฐ๋ฅธ ์ ํ์ ๋ฐํํด์ผ ํฉ๋๋ค. PHP 8.1์์๋ ํจ์ ์ ์ธ๊ณผ ์ผ์นํ์ง ์๋ ์ ํ์ ๋ฐํํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์์ฑ๋์ง๋ง PHP 9.0์์๋ ๊ฒฝ๊ณ ๊ฐ ์ค๋ฅ๋ก ๋์ฒด๋ฉ๋๋ค.
- ์์ ์ฌ์ฉ์์ ๊ฐ์ฒด ์กฐ์์ผ๋ก ๊ธฐ๋ฅ์ ์ด์ ํ๋ ์์ ์ด ๊ณ์๋์์ต๋๋ค. finfo_* ๋ฐ imap_* ๊ธฐ๋ฅ์ด ๊ฐ์ฒด๋ก ์ ์ก๋์์ต๋๋ค.
- null ํ์ฉ์ด ์๋ ๊ฒ์ผ๋ก ํ์๋ ๋ด๋ถ ํจ์์ null ๊ฐ์ ์ธ์๋ก ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. PHP 8.1์์๋ str_contains("string", null)๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๊ณ PHP 9์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- MurmurHash3 ๋ฐ xxHash ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru