Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
公式Docや@rana_kualuさんたちのブログを拝見しながら PHP8.4 新機能を試してみる
Search
ashibe
December 08, 2024
Programming
170
0
Share
公式Docや@rana_kualuさんたちのブログを拝見しながら PHP8.4 新機能を試してみる
2024年12月8日開催の「PHP勉強会 in 広島 vol.2」の登壇発表資料です。
ashibe
December 08, 2024
More Decks by ashibe
See All by ashibe
Claude Codeが開発を変えた
ryo_hashiguchi
0
23
PHPの名前空間(namespace)
ryo_hashiguchi
0
44
2025年に開催されるPHPカンファレンス
ryo_hashiguchi
0
58
わたしがしてきた失敗の話をしようか
ryo_hashiguchi
0
120
Other Decks in Programming
See All in Programming
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
190
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
330
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
480
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
190
事業会社でのセキュリティ長期インターンについて
masachikaura
0
250
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
320
Make GenAI Production-Ready with Kubernetes Patterns
bibryam
0
110
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
320
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
2.4k
의존성 주입과 모듈화
fornewid
0
130
ファインチューニングせずメインコンペを解く方法
pokutuna
0
300
Featured
See All Featured
HDC tutorial
michielstock
1
610
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
The SEO Collaboration Effect
kristinabergwall1
0
420
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Building the Perfect Custom Keyboard
takai
2
730
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
The Cult of Friendly URLs
andyhume
79
6.8k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
440
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.7k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
140
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
330
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Transcript
ެࣜ%PD!SBOB@LVBMV͞ΜͨͪͷϒϩάΛഈݟ͠ͳ͕Β 1)1৽ػೳΛࢼͯ͠ΈΔ ݄1)1ษڧձJOౡ7PM גࣜձࣾ(P24ZTUFNڮޱ྇
1)1ϦϦʔε㊗ ͍ͭʹ1)1͕ϦϦʔε͞Ε·ͨ͠👏👏👏 օ͞Μɺ৽ػೳͳͲΩϟονΞοϓͰ͖ͯ·͔͢ʂʁ ࣗશવͰ͢ɺɺɺ 1)1ຊਓͷ͖ͪ͞͞Μ͕ϦϦʔεϚωʔδϟʔʢϧʔΩʔʣͱͯ͠બΕͨ͜ͱ ʹͳΓ·ͨ͠Ͷ
1)1ϦϦʔε㊗ ࠓ1)1ͷػೳΛ͍͔ͭ͘ϐοΫΞοϓͯ͠ɺ࣮ࡍʹࢼͯ͠ΈΑ͏ͱࢥ͍·͢ʂʂ 1)1ͷ%PDLFSڥΛ༻ҙ࣮ͯ͠ࡍʹࢼͯ͠Έ·͠ΐ͏ ҎԼͷϦϙδτϦʹࠓ͏ίʔυΛஔ͍͍ͯ·͢ (JU)VCɿIUUQTHJUIVCDPN5IF(,SIQIQQIQTUVEZJOIJSPTIJNB
1)1৽ػೳ ެࣜυΩϡϝϯτɿIUUQTXXXQIQOFUNBOVBMKBNJHSBUJPOOFXGFBUVSFTQIQ ৽ػೳ 1)1ίΞ ɾϓϩύςΟϑοΫɾඇରশՄࢹੑϓϩύςΟɾϨΠδʔΦϒδΣΫτɾ<a%FQSFDBUFE>ΞτϦϏϡʔτɾ1045Ҏ֎ͷ )551ϦΫΤετͰͷ3'$ Ϛϧνύʔτ ϦΫΤετͷղੳɾׅހͳ͠ͰͷOFXࣜͷνΣʔϯɾ8FBL3FGFSFODFͷ σόοάใͷվળɾ$MPTVSFͷσόοάใͷվળɾҟͳΔ໊લۭؒϒϩοΫͰಉҰͷγϯϘϧΛఆٛ
͜ͷ΄͔ʹ৽͘͠Ճ͞ΕͨΫϥεؔɺάϩʔόϧఆͳͲଟ͘ͷͷ͕Ճ͞Ε͍ͯ·͢ɻ ԼҐޓੑͷͳ͍มߋʹ͋ΔɺFYJU ͷಈ࡞ͷมߋɻ 1)1YͰਪ͞Εͳ͘ͳΔػೳɺ҉తͳOVMMBCMFύϥϝʔλʔͳͲؾʹͳΔͷ͕ͨ͘͞Μ͋Γ·͢ɻ
ΞδΣϯμ ࠓݸਓతʹؾʹͳ͍ͬͯΔҎԼΛऔΓѻ͍·͢ɻ ɾϓϩύςΟϑοΫ ɾඇରশՄࢹੑϓϩύςΟ ɾׅހͳ͠ͰͷOFXࣜͷνΣʔϯ ɾ%BUFUJNF%BUFUJNF*NNVUBCMFDSFBUF'SPN5JNFTUBNQ
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ɺΛهड़͠ ͖ͯͨ෦Λॻ͘ඞཁ͕ͳ͘ͳΓ· ͢ɻ
"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͔Β࠾༻͍ͯ͠Δͦ͏Ͱ͢ɻ ͜Ε͔Β͜ͷॻ͖ํ͕ओྲྀʹͳͬ ͍͔ͯ͘͠Εͳ͍Ͱ͢Ͷɻ
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ͳͲׅހ͕͍ Βͳ͍ଞͷݴޠʹ߹Θͤͨଆ໘͋ ΔΑ͏Ͱ͢
%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Ͱॻ͚ΔΑ͏ʹͳͬͨͷخ ͍͠Ͱ͢
࠷ޙʹ ຊ#$.BUI৮Ε͔ͨͬͨͷͰ͕͢ɺࣗͷ४උ͕͍͖ͭ·ͤΜͰͨ͠ɺɺɺ ͖ͪ͞͞Μͷͪ͜ΒͷಈըΦεεϝͰ͢ 1)1#$.BUIͷਐԽ
࠷ޙʹ ۙ1)1-BSBWFMͷϝδϟʔɾϚΠφʔΞοϓσʔτظ͕ؒ͘ɺόοΫΤϯυϑϩϯτΤ ϯυͷΑ͏ʹΩϟονΞοϓ͕େมʹͳ͍ͬͯΔؾ͠·͕͢ɺଟ͘ͷίϯτϦϏϡʔλʔͷ͓ ͔͚ͰΑΓྑ͍ιϑτΣΞ։ൃ͕Ͱ͖͍ͯΔ͜ͱʹײँ͔͠ͳ͍Ͱ͢ɻ ઌɺ1)1ษڧձ!౦ژͰా͞Μ͕ొஃ͞Εͯɺ1)1ͷυΩϡϝϯτͷΛͯ͘͠Ε·ͨ͠ɻ Ұ෦ͰΓ্͕ͬͯ·͢ɻ 044ߩݙνϟϯεͳͷͰɺͥͻʢࣗΔ💪ʣ
ࠂ ʢԾʣ1)1ΧϯϑΝϨϯεౡ 2025ळɺPHPΧϯϑΝϨϯεΛౡͰ։࠵༧ఆͰ͢ ʢԾʣ ίΞελοϑ͓ख͍͍͚ͯͨͩ͠Δํ͕͍Βͬ ͠ΌͬͨΒɺconnpassͷHiroshima.phpͷάϧʔϓʹ͝ ࢀՃ͍͚ͨͩΔͱخ͍͠Ͱ͢ɻ ʮٕज़ʯͷʹߜͬͨΧϯϑΝϨϯεʹ͠Α͏͔ͳͱߟ ͍͑ͯ·͢ɻʢ࠷ۙ։ൃख๏։ൃੜ࢈ੑɺϚωδϝ ϯτɺϚΠϯυηοτͳͲͷ͕ଟ͍ͷͰɿ͖ͳ
ͷͰ͕͢ɺٕज़ͷ͍ͨ͠ʂʣ