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
パーフェクトPHPのススメ
Search
Yumihiki
October 30, 2019
Programming
1
1.1k
パーフェクトPHPのススメ
Web×PHP TechCafe 10月 @ RAKUS のLT資料です。
Yumihiki
October 30, 2019
Tweet
Share
More Decks by Yumihiki
See All by Yumihiki
pathlibのススメ
nibuno
0
49
ノリと勢いで勉強会を共同主催しはじめた話
nibuno
1
390
LTってなんなん?
nibuno
0
140
【初心者向け】ググらずに!? ターミナル上で Pythonオブジェクトを調べよう
nibuno
0
500
勇気出してアウトプットしたらコメントをもらえて自分の理解が深まった良い話🤩
nibuno
0
190
テスト駆動開発のススメ
nibuno
2
21k
目標を決めるにあたって 新年の抱負 超LT会- vol.2
nibuno
0
380
Other Decks in Programming
See All in Programming
DevTalks 25 - Create your own AI-infused Java apps with ease
kdubois
2
120
TypeScript Language Service Plugin で CSS Modules の開発体験を改善する
mizdra
PRO
3
2.4k
マテリアルって何者?RealityKitで扱うマテリアル入門
nao_randd
0
140
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
230
REST API設計の実践 – ベストプラクティスとその落とし穴
kentaroutakeda
2
320
Cursor Meetup Tokyo ゲノミクスとCursor: 進化と制約のあいだ
koido
1
260
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
230
少数精鋭エンジニアがフルスタック力を磨く理由 -そしてAI時代へ-
rebase_engineering
0
130
バランスを見極めよう!実装の意味を明示するための型定義 TSKaigi 2025 Day2 (5/24)
whatasoda
2
780
iOSアプリ開発もLLMで自動運転する
hiragram
6
2.1k
漸進。
ssssota
0
1.2k
從零到一:搭建你的第一個 Observability 平台
blueswen
0
220
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
172
14k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
750
Optimising Largest Contentful Paint
csswizardry
37
3.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Faster Mobile Websites
deanohume
307
31k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Rails Girls Zürich Keynote
gr2m
94
13k
It's Worth the Effort
3n
184
28k
The Language of Interfaces
destraynor
158
25k
Transcript
ύʔϑΣΫτ1)1ͷεεϝ :VNJIJLJ 8FCº1)15FDI$BGF݄ˏ3",64
ࣗݾհ :VNJIJLJʢΏΈͻ͖ʣ 1)1FSͰ͢ υϥΰϯΫΤετΥʔΫͷ Γ͗͢ͰΛ௧Ί·ͨ͠ ٷಓՈٷҾ͖ɹ͕༝དྷͰ͢
ύʔϑΣΫτ1)1͍͍ͧ
ηΫγʔͳ1)1FSʹ ͳΔͨΊʹඞಡͷҰ ύʔϑΣΫτ
ύʔϑΣΫτ1)1ͱ Ͱݴޠ༷͔Β࠷৽ͷٕज़·ͰΛཏͨ͠༰ɻ ཏతʹղઆ͞Ε͍ͯΔ͚ͩͰͳ͘ɼ֤ٕज़ʹؔͯ͠جຊ͔Β͔ͬ͠Γղઆ͠ɼ ϑϨʔϜϫʔΫͳͲΛར༻ͨ͠8FCΞϓϦέʔγϣϯ։ൃͷղઆͳͲɼ ෦ॲཧ͕ཪͰԿΛ͍ͯ͠Δͷ͔Λ۷ΓԼ͛ͯղઆͯ͋͠ΔͨΊɼ 1)1Λମܥతʹֶͼ͍ͨํͪΖΜɼ ΑΓਂ͍ࣝΛಘ͍ͨதʙ্ڃऀʹ͓קΊͷҰͰ͋Δɻ IUUQTHJIZPKQCPPL͜ͷຊͷ֓ཁΑΓ
ϑϨʔϜϫʔΫΛ࡞ͬͯ 8FCΞϓϦέʔγϣϯΛ ։ൃ͠·͢
࣮ࡍʹֶशͯ͠Έͯ
#FGPSF ͦͦΦϒδΣΫτࢦͬͯԿʁɹඒຯ͍͠ͷʁ UIJT QVCMJD JOUFSGBDF TFMG ʜ֮͑Δ୯ޠଟ͘ͳ͍ʁ ϑϨʔϜϫʔΫதͰԿͯ͠ΔΜ͔ ਖ਼Θ͔Βͳ͍ɾɾɾ
"GUFS ΦϒδΣΫτࢦͱ ϑϨʔϜϫʔΫͷΈ શʹཧղͨ͠
࣮ࡍʹϑϨʔϜϫʔΫΛར༻ͯ͠ ࡞͢Δ8FCΞϓϦέʔγϣϯ ͜Μͳײ͡Ͱ͢ʢࠓ͔Βө͠·͢ʣ
ϑϨʔϜϫʔΫʹ͍ͭͯ গ͠ղઆΛߦ͍͖ͬͯ·͢
ύʔϑΣΫτ̥̝̥Ͱ࡞Δ ϑϨʔϜϫʔΫʹ͍ͭͯ
ϑϨʔϜϫʔΫͷཁ݅ • MVCϞσϧʹΑΔׂͷ • σʔλϕʔεͷଓཧ • ϩάΠϯঢ়ଶͷཧ • URLͱཧతͳσΟϨΫτϦߏͱΛΓ͢ϧʔςΟϯάػೳ •
CSRFରࡦ
ϑϨʔϜϫʔΫͷ ߏɾॲཧͷྲྀΕ
3FRVFTU (&51045 ύϥϝʔλɺ63- ͷཧ "QQMJDBUJPO 3PVUFS 63-Λड͚औΓ ݺͼग़͢ ίϯτϩʔϥΛࢦఆ $POUSPMMFS
ϞσϧϏϡʔͷ ੍ޚΛߦ͏ ΞΫγϣϯΛఆٛ 3FTQPOTF ϦΫΤετʹର͠ ࠷ऴతʹϢʔβ ฦ͢ใΛཧ %C.BOBHFS σʔλϕʔεͷଓ ใ%C3FQPTJUPSZ ͷཧ %C3FQPTJUPSZ ΞΫηεΛ͏ॲཧΛ ཧɻϞσϧʹ૬ 4FTTJPO ηογϣϯ Λཧ͢Δ 7JFX දࣔΛ੍ޚ͢Δɻ ϑΝΠϧͷಡΈࠐΈ ड͚͠Λߦ͏ ύʔϑΣΫτ1)1 ϖʔδΑΓ ͜ͷҰ࿈ͷྲྀΕΛ ੍ޚ͢ΔΫϥε ࠷ॳ͔͜͜Βʂ ࠷ޙʹใΛग़ྗʂ
͜͏͍͏෦తͳ ॲཧ͕͋Δͷ͔ͱ ษڧʹͳͬͨ͜ͱ
৭ʑ͋Γ·͢
ྫ͑
ΫϥεͱΦʔτϩʔυ
ΫϥεͱΦʔτϩʔυ ΦʔτϩʔυΛઃఆ͢Δ͜ͱͰΫϥεΛݺͼग़ͨ͠ࡍʹ ͦͷΫϥε͕PHP্ʹಡΈࠐ·Ε͍ͯͳ͍߹ɺ ࣗಈతʹϑΝΠϧͷಡΈࠐΈΛߦ͏͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔɻ ຖճಡΈࠐΈॲཧΛॻ͔ͳͯ͘ྑ͍
Ͳ͏͍ͬͯΔͷʁ
ClassLoader.phpͱ bootstrap.php
ClassLoader.php
ClassLoader.php spl_autoload_register()ϝιουͰ ઃఆͨ͠ίʔϧόοΫؔΛΦʔτϩʔυ࣌ʹݺͼग़ͤΔ
ClassLoader.php σΟϨΫτϦͷొΛߦ͏
ClassLoader.php Φʔτϩʔυ࣌ʹPHP͔Βࣗಈతʹݺͼग़͞Ε ΫϥεϑΝΠϧͷಡΈࠐΈΛߦ͏
ClassLoader.php $dirsϓϩύςΟʹઃఆ͞ΕͨσΟϨΫτϦ͔Β ʮΫϥε໊.phpʯΛ୳͠ݟ͔ͭͬͨ߹ʹrequireͰಡΈ͜Ή
bootstrap.php ClassLoaderΛੜ͠ɺcoreɺmodelσΟϨΫτϦΛ ΦʔτϩʔυͷରσΟϨΫτϦʹઃఆ͠ɺ register()ϝιουͰΦʔτϩʔυʹొ
bootstrap.php ͦͯ͠ɺbootstrap.phpΛಡΈࠐΉͱ Φʔτϩʔυ͕ઃఆ͞Ε·͢
͜ͷΑ͏ͳॲཧͰ ΦʔτϩʔυΛ࣮ ͍ͯ͠·ͨ͠ ศརͰ͢Ͷ
͜͏͍͏෦తͳ ॲཧ͕͋Δͷ͔ͱ ษڧʹͳͬͨ͜ͱ Part2
࣌ؒͷ߹্ࡉ͔͘ ͤͦ͏ʹ͋Γ·ͤΜʜ
গ͠ૣޱͰ ͱͯͬ͘͟Γͱ
ApplicationΫϥεͷ࣮ ίϯτϩʔϥͷݺͼग़͠ ϩάΠϯ੍ޚͳͲ
ଟͷ෦తͳॲཧΛ هड़͠ɺಈ͖ΛΔ ͜ͱ͕Ͱ͖·͢
ࠓͨ͠༰ ύʔϑΣΫτPHPͷ ΄ΜͷҰ෦͚ͩͰ͢
ͥͻҰ ύʔϑΣΫτPHPΛ ಡΜͰΈ͍ͯͩ͘͞
FIN. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠