Upgrade to Pro — share decks privately, control downloads, hide ads and more …

公式Docや@rana_kualuさんたちのブログを拝見しながら PHP8.4 新機能を試してみる

ashibe
December 08, 2024

公式Docや@rana_kualuさんたちのブログを拝見しながら PHP8.4 新機能を試してみる

2024年12月8日開催の「PHP勉強会 in 広島 vol.2」の登壇発表資料です。

ashibe

December 08, 2024
Tweet

More Decks by ashibe

Other Decks in Programming

Transcript

  1. 1SPQFSUZBDDFTTIPPLT <?php class PropertyAccessHooks { public string $phoneNumber { set

    { if (! ctype_digit($value)){ throw new InvalidArgumentException('ແޮͳి࿩൪߸Ͱ͢'); } if (strlen($value) < 10){ throw new InvalidArgumentException('ి࿩൪߸͸10ܻҎ্Ͱೖྗ͍ͯͩ͘͠͞'); } $this->phoneNumber = $value; } get => 'ి࿩൪߸͸' . $this->phoneNumber . 'Ͱ͢'; } } $hooks = new PropertyAccessHooks(); $hooks->phoneNumber = '09012341234'; echo $hooks->phoneNumber; // ి࿩൪߸͸09012341234Ͱ͢ !SBOB@LVBMV͞Μͷ2JJUBͷهࣄΛࢀ ߟʹͯ͠ΈͯΈ·͢ɻ IUUQTRJJUBDPNSBOB@LVBMV JUFNTEBDC ϓϩύςΟʹTFUUFSHFUUFSΛ௚઀ه ड़Ͱ͖Δߏจ /JLJUB͞ΜͷϓϩύςΟΞΫηαͷ 3'$͔Βདྷ͍ͯͯɺ$ͱ4XJGU͔Βେ ͖ͳӨڹΛड͚ͨͦ͏Ͱ͢ɻ ͜Ε·ͰHFU'PPTFU'PPɺΛهड़͠ ͖ͯͨ෦෼Λॻ͘ඞཁ͕ͳ͘ͳΓ· ͢ɻ
  2. "TZNNFUSJD7JTJCJMJUZW <?php class AsymmetricVisibilityV2 { public private(set) string $companyName =

    'GoQSystem'; } $asymmetricVisibility = new AsymmetricVisibilityV2(); echo $asymmetricVisibility->companyName; // GoQSystem $asymmetricVisibility->companyName = 'GoQSystem Inc.'; // Fatal error !SBOB@LVBMV͞Μͷ2JJUBͷهࣄΛࢀ ߟʹͯ͠ΈͯΈ·͢ɻ IUUQTRJJUBDPNSBOB@LVBMV JUFNTDFFGFCGB ಡΊΔ͚Ͳॻ͚ͳ͍ϓϩύςΟΛએ ݴͰ͖ΔΑ͏ʹͳͬͨʢSFBEPOMZͱ ͸ҧ͏ʣ 4XJGU͔Β࠾༻͍ͯ͠Δͦ͏Ͱ͢ɻ ͜Ε͔Β͸͜ͷॻ͖ํ͕ओྲྀʹͳͬ ͍͔ͯ͘΋͠Εͳ͍Ͱ͢Ͷɻ
  3. OFX.Z$MBTT NFUIPE XJUIPVUQBSFOUIFTFT <?php class NewWithoutParentheses { public function exec()

    { echo 'PHPษڧձin޿ౡ Vol.2'.PHP_EOL; } } // PHP8.3 (new NewWithoutParentheses())->exec(); // PHP8.4 new NewWithoutParentheses()->exec(); !SBOB@LVBMV͞Μͷ2JJUBͷهࣄΛࢀ ߟʹͯ͠ΈͯΈ·͢ɻ IUUQTRJJUBDPNSBOB@LVBMV JUFNTGDFEBGBC OFX$MBTT EP Λ͔͚ΔΑ͏ʹͳ Γ·ͨ͠ ͜Ε·Ͱ͸͜͏ॻ͍ͯ͠·͏ͱɺ OFX $MBTT EP ͱղऍ͞Εͯ͠ ·͏ͨΊΤϥʔʹͳ͍ͬͯ·ͨ͠ +BWBɾ$ɾ5ZQF4DSJQUͳͲׅހ͕͍ Βͳ͍ଞͷݴޠʹ߹Θͤͨଆ໘΋͋ ΔΑ͏Ͱ͢
  4. %BUFUJNF%BUFUJNF*NNVUBCMFDSFBUF'SPN5JNFTUBNQ <?php class CreateFromTimestamp { public function createFromTimestampOld($timestamp) { return

    DateTimeImmutable::createFromFormat('U', (string) $timestamp); } public function createFromTimestampNew($timestamp) { return DateTimeImmutable::createFromTimestamp($timestamp); } } $create = new CreateFromTimestamp(); echo $create->createFromTimestampOld(time())->format('Y-m-d H:i:s') . PHP_EOL; echo $create->createFromTimestampNew(time())->format('Y-m-d H:i:s') . PHP_EOL; NBDPDDJ͞ΜͷϒϩάͷهࣄΛࢀߟ ʹͯ͠ΈͯΈ·͢ɻ λΠϜελϯϓ͔Β%BUF5JNF͕࡞੒ Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ ͜Ε·Ͱ͸DSFBUF'SPN'PSNBUΛར ༻͢Δඞཁ͕͋Γ·͕ͨ͠ɺඞཁͳ ͘ͳΓ·͢ $BSCPOͰ͸ॻ͚͍ͯͨͷͰɺ -BSBWFMϢʔβʔͷํ͸ͪ͜Β͕ೃછ Έ͕͋ΔͷͰ͸ͱࢥ͍·͢ 1)1Ͱ΋ॻ͚ΔΑ͏ʹͳͬͨͷ͸خ ͍͠Ͱ͢