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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ashibe
December 08, 2024
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
公式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
33
PHPの名前空間(namespace)
ryo_hashiguchi
0
49
2025年に開催されるPHPカンファレンス
ryo_hashiguchi
0
61
わたしがしてきた失敗の話をしようか
ryo_hashiguchi
0
130
Other Decks in Programming
See All in Programming
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.5k
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
140
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
790
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
650
Performance Engineering for Everyone
elenatanasoiu
0
270
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
3
1.5k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
270
どこまでゆるくて許されるのか
tk3fftk
0
500
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
Side Projects
sachag
455
43k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Claude Code のすすめ
schroneko
67
230k
A better future with KSS
kneath
240
18k
The Language of Interfaces
destraynor
162
27k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
The SEO identity crisis: Don't let AI make you average
varn
0
520
The World Runs on Bad Software
bkeepers
PRO
72
12k
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ͷάϧʔϓʹ͝ ࢀՃ͍͚ͨͩΔͱخ͍͠Ͱ͢ɻ ʮٕज़ʯͷʹߜͬͨΧϯϑΝϨϯεʹ͠Α͏͔ͳͱߟ ͍͑ͯ·͢ɻʢ࠷ۙ։ൃख๏։ൃੜ࢈ੑɺϚωδϝ ϯτɺϚΠϯυηοτͳͲͷ͕ଟ͍ͷͰɿ͖ͳ
ͷͰ͕͢ɺٕज़ͷ͍ͨ͠ʂʣ