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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ashibe
December 08, 2024
Programming
0
170
公式Docや@rana_kualuさんたちのブログを拝見しながら PHP8.4 新機能を試してみる
2024年12月8日開催の「PHP勉強会 in 広島 vol.2」の登壇発表資料です。
ashibe
December 08, 2024
Tweet
Share
More Decks by ashibe
See All by ashibe
Claude Codeが開発を変えた
ryo_hashiguchi
0
17
PHPの名前空間(namespace)
ryo_hashiguchi
0
41
2025年に開催されるPHPカンファレンス
ryo_hashiguchi
0
55
わたしがしてきた失敗の話をしようか
ryo_hashiguchi
0
120
Other Decks in Programming
See All in Programming
Gemini for developers
meteatamel
0
100
Apache Iceberg V3 and migration to V3
tomtanaka
0
180
AgentCoreとHuman in the Loop
har1101
5
250
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
280
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
150
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
高速開発のためのコード整理術
sutetotanuki
1
410
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
CSC307 Lecture 01
javiergs
PRO
0
690
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.1k
Docker and Python
trallard
47
3.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
460
Believing is Seeing
oripsolob
1
59
Technical Leadership for Architectural Decision Making
baasie
2
250
Become a Pro
speakerdeck
PRO
31
5.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
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ͷάϧʔϓʹ͝ ࢀՃ͍͚ͨͩΔͱخ͍͠Ͱ͢ɻ ʮٕज़ʯͷʹߜͬͨΧϯϑΝϨϯεʹ͠Α͏͔ͳͱߟ ͍͑ͯ·͢ɻʢ࠷ۙ։ൃख๏։ൃੜ࢈ੑɺϚωδϝ ϯτɺϚΠϯυηοτͳͲͷ͕ଟ͍ͷͰɿ͖ͳ
ͷͰ͕͢ɺٕज़ͷ͍ͨ͠ʂʣ