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
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
31
PHPの名前空間(namespace)
ryo_hashiguchi
0
46
2025年に開催されるPHPカンファレンス
ryo_hashiguchi
0
60
わたしがしてきた失敗の話をしようか
ryo_hashiguchi
0
120
Other Decks in Programming
See All in Programming
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
240
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
140
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
570
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
440
RTSPクライアントを自作してみた話
simotin13
0
440
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
170
今さら聞けないCancellationToken
htkym
0
220
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
800
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
3.2k
OSもどきOS
arkw
0
400
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
130
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
150
Featured
See All Featured
Abbi's Birthday
coloredviolet
2
7.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Agile that works and the tools we love
rasmusluckow
331
21k
New Earth Scene 8
popppiees
3
2.3k
Skip the Path - Find Your Career Trail
mkilby
1
140
ラッコキーワード サービス紹介資料
rakko
1
3.5M
The SEO Collaboration Effect
kristinabergwall1
1
470
The browser strikes back
jonoalderson
0
1.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
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ͷάϧʔϓʹ͝ ࢀՃ͍͚ͨͩΔͱخ͍͠Ͱ͢ɻ ʮٕज़ʯͷʹߜͬͨΧϯϑΝϨϯεʹ͠Α͏͔ͳͱߟ ͍͑ͯ·͢ɻʢ࠷ۙ։ൃख๏։ൃੜ࢈ੑɺϚωδϝ ϯτɺϚΠϯυηοτͳͲͷ͕ଟ͍ͷͰɿ͖ͳ
ͷͰ͕͢ɺٕज़ͷ͍ͨ͠ʂʣ