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
180
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
42
PHPの名前空間(namespace)
ryo_hashiguchi
0
53
2025年に開催されるPHPカンファレンス
ryo_hashiguchi
0
66
わたしがしてきた失敗の話をしようか
ryo_hashiguchi
0
130
Other Decks in Programming
See All in Programming
5分で問診!Composer セキュリティ健康診断
codmoninc
0
1.1k
yield再入門 #phpcon
o0h
PRO
0
1.2k
源内ハンズオン概要編
hideg
0
190
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
テーブルをDELETEした
yuzneri
0
150
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
210
Android CLI
fornewid
0
230
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
480
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
730
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
820
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
340
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
KATA
mclloyd
PRO
35
15k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
370
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
Amusing Abliteration
ianozsvald
1
250
Designing Powerful Visuals for Engaging Learning
tmiket
1
500
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
780
The SEO Collaboration Effect
kristinabergwall1
1
520
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
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ͷάϧʔϓʹ͝ ࢀՃ͍͚ͨͩΔͱخ͍͠Ͱ͢ɻ ʮٕज़ʯͷʹߜͬͨΧϯϑΝϨϯεʹ͠Α͏͔ͳͱߟ ͍͑ͯ·͢ɻʢ࠷ۙ։ൃख๏։ൃੜ࢈ੑɺϚωδϝ ϯτɺϚΠϯυηοτͳͲͷ͕ଟ͍ͷͰɿ͖ͳ
ͷͰ͕͢ɺٕज़ͷ͍ͨ͠ʂʣ