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
PHPerKaigi 2019
Search
memory
PRO
March 29, 2019
Programming
14k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPerKaigi 2019
memory
PRO
March 29, 2019
More Decks by memory
See All by memory
pnl で簡易的に作る PHP ネイティブアプリケーション
m3m0r7
PRO
0
58
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
1
1.2k
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
500
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
260
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
7
2.6k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
650
コードゴルファー道
m3m0r7
PRO
0
670
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
560
事業観点から見る技術的負債の返済
m3m0r7
PRO
4
1.3k
Other Decks in Programming
See All in Programming
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
0
150
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
760
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
250
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
52
33k
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
130
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
420
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
260
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.6k
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
720
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
自分的「カンファレンスの楽しみ方」
syumai
0
170
Oxlintはいいぞ(続)
yug1224
1
530
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
230
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
For a Future-Friendly Web
brad_frost
183
10k
Claude Code のすすめ
schroneko
67
230k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
850
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
The Language of Interfaces
destraynor
162
27k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.6k
Balancing Empowerment & Direction
lara
6
1.3k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
PHP Ͱ JVM ʹೖ͢Δ - ༧උࣝฤ - PHPerKaigi 2019 2019/03/29
ΊΓʔ(@m3m0r7) લ ࠲
ͩΕʁ ΊΓʔ(@m3m0r7) Ͱ͢ɻ ը૾ ϋϜελʔքͷఱ Lily ͪΌΜͰ͢ɻ ϫλγϋϐʔΤΠνϐʔνϣοτσΩϧ גࣜձࣾ GameWith
ͱ͍͏ձࣾͰಇ͍ͯ·͢ɻ
༧උࣝฤͰ͢͜ͱ લ ࠲
༧උࣝฤͰ͢͜ͱ • 16ਐͷܭࢉํ๏ʹ͍ͭͯ • signed / unsgined ͳܕʹ͍ͭͯ • double
float ͳͲͷුಈখͷܭࢉํ๏ʹ͍ͭͯ • ΤϯσΟΞϯʹ͍ͭͯ
16 ਐͷܭࢉํ๏ લ ࠲
ܭࢉํ๏͝ଘͷํ✋ લ ࠲
ͦ͏Ͱ͢Ͷɺ dechex / hexdec / base_convert ؔͰ͢ લ ࠲
ஊͰ͢ લ ࠲
16ਐͷܭࢉํ๏ • 10ਐ͔Β16ਐͷܭࢉํ๏ԼهͷࣜʹͯΊΒΕ·͢ 0xFF = (16 - 1) * 16^1
+ (16 - 1) * 16^0 = 255(10) 1ܻ͔Βܻ͕૿͑Δͨͼʹ1,2…Nͱ૿͍͖͑ͯ·͢ɻͭ·Γɺ0xFFFFͷ ߹ԼهͷΑ͏ʹͳΓ·͢ɻ 0xFFFF = (16 - 1) * 16^3 +(16 - 1) * 16^2 + (16 - 1) * 16^1 + (16 - 1) * 16^0 = 65535(10) 16͔Β1ΛҾ͍͍ͯΔͷɺ։࢝͢Δࣈ͕0͔Β࢝·ΔͨΊͰ͢ɻA10, B 11, … F15ͱ֮͑ͯ͠·͍·͠ΐ͏ɻ
16ਐͷܭࢉํ๏ • PHPͰܭࢉ͢Δʹʁ ͜Μͳܭࢉਖ਼Γͨ͘ͳ͍ɻϓϩάϥϚςΟοΫʹղܾͰ͖ΔͳΒղܾ͢Δʹӽ ͨ͜͠ͱͳ͍Ͱ͢ɻ • 10ਐ͔Β16ਐʹ͢Δ <?= dechex(255) ?>
• 16ਐ͔Β10ਐʹ͢Δ <?= hexdec(‘0xFF’) ?> <?= base_convert(255, 10, 16) ?> <?= base_convert(‘0xFF’, 16, 10) ?>
ͱͬͯ؆୯Ͱ͢Ͷ લ ࠲
signed / unsigned ͳܕʹ͍ͭͯ લ ࠲
ͱ͜ΖͰɺPHPer ͷΈͳ͞Μ͕ ͝ଘͷܕԿͰ͠ΐ͏͔ લ ࠲
JVM Ͱܕ͕૿͑·͢ લ ࠲
PHP͔Βݟͯ૿͑ͨܕ • boolean • int (4 byte) • string •
float • ࣮࣭ float ͷ double • byte (1 byte) • short (2 byte) • long (8 byte) • Ψν float (4 byte, ୯ਫ਼ුಈখ) • Ψν double (8 byte, ഒਫ਼ුಈখ)
ଟݴޠΛѻͬͨ͜ͱͳ͍ํ ೃછΈ͕ͳ͍͔͠Ε·ͤΜ લ ࠲
JVM ্ͷ֤ܕʹ͍ͭͯ લ ࠲
֤ܕʹ͍ͭͯ - byte • signed byte (ූ߸͖ byte) • -128(10)
ʙ 127(10) ͕ ූ߸͖ byte ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x00 ʙ 0xFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x00ʙ0x7F, ෛͷ 0x80 ʙ 0xFF ͱͳΓ·͢ɻ • unsigned byte (ූ߸ͳ͠ byte) • 0(10) ʙ 255(10) ͕ූ߸ͳ͠ byte ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x00 ʙ 0xFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
֤ܕʹ͍ͭͯ - short • signed short (ූ߸͖ short) • -32768(10)
ʙ 32767(10) ͕ ූ߸͖ short ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x0000 ʙ 0xFFFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x0000ʙ0x7FFF, ෛͷ 0x8000 ʙ 0xFFFF ͱͳΓ·͢ɻ • unsigned short (ූ߸ͳ͠ short) • 0(10) ʙ 65535(10) ͕ූ߸ͳ͠ short ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x0000 ʙ 0xFFFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
֤ܕʹ͍ͭͯ - int • signed int (ූ߸͖ int) • -2147483648(10)
ʙ 2147483647(10) ͕ ූ߸͖ int ͷൣғͱͳΓ· ͢ɻ • 16ਐͰ 0x000000 ʙ 0xFFFFFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x000000ʙ0x7FFFFF, ෛͷ 0x800000 ʙ 0xFFFFFF ͱͳ Γ·͢ɻ • unsigned int (ූ߸ͳ͠ int) • 0(10) ʙ 4294967295(10) ͕ූ߸ͳ͠ int ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x000000 ʙ 0xFFFFFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
֤ܕʹ͍ͭͯ - long • signed long (ූ߸͖ long) • -9223372036854775808(10)
ʙ 9223372036854775807(10) ͕ ූ߸͖ long ͷൣғͱͳΓ·͢ɻ • 16ਐͰ 0x00000000 ʙ 0xFFFFFFFF ·ͰͰ͢ɻ • ਖ਼ͷ 0x00000000ʙ0x7FFFFFFF, ෛͷ 0x80000000 ʙ 0xFFFFFFFF ͱͳΓ·͢ɻ • unsigned long (ූ߸ͳ͠ long) • 0(10) ʙ 18446744073709551615(10) ͕ූ߸ͳ͠ long ͷൣғͱͳΓ· ͢ɻ • 16ਐͰ 0x00000000 ʙ 0xFFFFFFFF ·ͰͰ͢ • ਖ਼ͷͷΈͰ͢ɻ
͓ؾ͖ͮͷํ͍Δ͔Ε·ͤΜ લ ࠲
ͦ͏ɺPHP ͰܭࢉͰ͖ͳ͍ࣈ͕ ؚ·Ε͍ͯΔͷͰ͢ લ ࠲
Ͱେৎ લ ࠲
ͦ͏ gmp ؔͳΒͶ લ ࠲
PHP ͰܭࢉͰ͖ͳ͍Λܭࢉ͢Δ • PHP Ͱ unsigned long ͷΛܭࢉͰ͖ͳ͍͕ɺ gmpؔ Ͱܭࢉͤ͞Δ͜ͱՄೳɻྫ͑
<?= gmp_strval(gmp_add(PHP_INT_MAX, PHP_INT_MAX));" ?> • ݁Ռ 18446744073709551614 ͱͳΓ·͢
ුಈখͷܭࢉʹ͍ͭͯ લ ࠲
ܭࢉํ๏͝ଘͷํ✋ લ ࠲
ͪͳΈʹɺࢲۤखͰ͢ લ ࠲
͋ͱɺຊฤͰΘͳ͍ͷͰ༨ஊͱͯ͠ ָ͓͠Έ͍ͩ͘͞ લ ࠲
ුಈখͷܭࢉํ๏ • ුಈখͷܭࢉํ๏Ͱ༗໊ॴԼه͔ͱࢥ͍·͢ɻ • ୯ਫ਼ුಈখ • ഒਫ਼ුಈখ • ͪͳΈʹ͜ΕΒ IEEE754
Ͱఆٛ͞Ε͍ͯΔͷͰৄ͘͠Γ ͍ͨํޚཡ͍ͩ͘͞ɻ • ୯ਫ਼ුಈখ 32 Ϗοτ (4 byte) ഒਫ਼ුಈখ 64 Ϗοτ (8 byte) ͷදݱ෯ͷҧ͍͕͋Γ·͢ɻ ࢀরɿhttps://ja.wikipedia.org/wiki/IEEE_754 ը૾ʹ͍ͭͯɿhttps://creativecommons.org/licenses/by-sa/3.0/
ුಈখͷܭࢉํ๏ • ୯ਫ਼ුಈখ (float) ͷܭࢉํ๏ • sign ͕ූ߸ͱͳΓ·͢ɻ (sͱஔ͖·͢) •
exponent ͕ࢦ෦ͱͳΓ·͢ɻ (e ͱஔ͖·͢) • fraction ͕Ծ෦ͱͳΓ·͢ɻ (f ͱஔ͖·͢ɻ) ࢀরɿhttps://ja.wikipedia.org/wiki/IEEE_754 ը૾ʹ͍ͭͯɿhttps://creativecommons.org/licenses/by-sa/3.0/ ୯ਫ਼ුಈখͷܭࢉࣜ = s * f * 2^(e - 127)
ුಈখͷܭࢉํ๏ • ഒਫ਼ුಈখ (double) ͷܭࢉํ๏ • جຊతʹ୯ਫ਼ුಈখͱมΘΓ·ͤΜɻ • sign ͕ූ߸ͱͳΓ·͢ɻ
(sͱஔ͖·͢) • exponent ͕ࢦ෦ͱͳΓ·͢ɻ (e ͱஔ͖·͢) • fraction ͕Ծ෦ͱͳΓ·͢ɻ (f ͱஔ͖·͢ɻ) ࢀরɿhttps://ja.wikipedia.org/wiki/IEEE_754 ը૾ʹ͍ͭͯɿhttps://creativecommons.org/licenses/by-sa/3.0/ ഒਫ਼ුಈখͷܭࢉࣜ = s * f * 2^(e - 1023)
͕͔ͩ͠͠ લ ࠲
JVM ্ͩͱҧ͏ΜͰ͢ લ ࠲
ුಈখͷܭࢉํ๏ • JVM্ʹ͓͚Δ୯ਫ਼ුಈখͷܭࢉํ๏Լهͷ௨Γ • JVM্ʹ͓͚Δഒਫ਼ුಈখͷܭࢉํ๏Լهͷ௨Γ • ࢦ෦ͷϚεΫ͍ͯ͠Δ͕ҟͳΓ·͢ɻ = s *
f * 2^(e - 1075) = s * f * 2^(e - 150)
ΤϯσΟΞϯʹ͍ͭͯ લ ࠲
ΤϯσΟΞϯͱ͍͏ݴ༿Λ ͍ͬͯΔํ✋ લ ࠲
ΤϯσΟΞϯʹ͍ͭͯ • ΤϯσΟΞϯओʹ2ͭ͋Γ·͢ • ϦτϧΤϯσΟΞϯ • ϏοάΤϯσΟΞϯ • ϦτϧΤϯσΟΞϯӈ͔ΒࠨɺϏοάΤϯσΟΞϯࠨ ͔ΒӈಡΉͱ֮͑ΕେৎͰ͢ɻ
ͪͳΈʹϛυϧΤϯσΟΞϯͱ͍͏ͷ ͋ΔΒ͍͠ લ ࠲
ࢀরɿhttps://ja.wikipedia.org/wiki/ %E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
ࢀরɿhttps://ja.wikipedia.org/wiki/ %E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
มͳͷͩͦ͏Ͱ͢ લ ࠲
ϦτϧΤϯσΟΞϯʹ͍ͭͯ લ ࠲
ϦτϧΤϯσΟΞϯʹ͍ͭͯ • ϦτϧΤϯσΟΞϯͷಈ͖ԼهͷΑ͏ʹϝϞϦʹੵ·Εͯ ͍͖·͢ 00 AA BB CC DD Ϩδελ
DD CC ϝϞϦ 0xA ΞυϨε 0xB 0xC 0xD 0xE
ϏοάΤϯσΟΞϯʹ͍ͭͯ લ ࠲
ϏοάΤϯσΟΞϯʹ͍ͭͯ • ϏοάΤϯσΟΞϯͷಈ͖ԼهͷΑ͏ʹϝϞϦʹੵ·Εͯ ͍͖·͢ 00 AA BB CC DD Ϩδελ
CC DD ϝϞϦ 0xA ΞυϨε 0xB 0xC 0xD 0xE
͓͞Β͍ લ ࠲
͓͞Β͍ •gmp_* ؔΛ֮͑ͯؼΖ͏ •dechex / hexdec / base_convert ؔΛ֮͑ͯ ؼΖ͏
•signed, unsigned ͳʹ͍֮ͭͯ͑ͯؼΖ͏ •ුಈখͷܭࢉํ๏Λ֮͑ͯؼΖ͏ •ΤϯσΟΞϯʹ͍֮ͭͯ͑ͯؼΖ͏
લ࠲ऴྃͰ͢ લ ࠲
͋ͳ͍ͨͬͯΔͩΖ͏͔ ຊ ฤ
30 ԯͷσόΠεͰΔϠπͷ͜ͱΛ… ຊ ฤ
ͦ͏ Java ͷ͜ͱΛ… ຊ ฤ
ͦ͏ Java ͷ͜ͱΛ… PHP ຊ ฤ
PHP Ͱ JVM ʹೖ͢Δ - ຊฤ - ຊ ฤ PHPerKaigi
2019 2019/03/29 ΊΓʔ(@m3m0r7)
ͩΕʁ ΊΓʔ(@m3m0r7) ϫλγϋϐʔΤΠνϐʔνϣοτσΩϧ גࣜձࣾ GameWith ͱ͍͏ձࣾͰಇ͍ͯ·͢ɻ
PHP ͰόΠφϦϦʔσΟϯά
ΓํΛ͝ଘͷํ✋
ͦͦɺόΠφϦϦʔσΟϯάͱʁ
None
None
ͷͱ͜ΖΛಡΜͰ͍͘͜ͱͰ͢
ͦͦɺPHP Ͱ JVM Λ ಡΜͰԿָ͕͍͠ͷʁ
PHP Ͱ JVM ΛಡΜͰԿָ͕͍͠ͷ͔ • ελοΫϚγϯ͕ͲͷΑ͏ʹಈ͍ͯΔ͔ཧղ͢Δ͜ͱ͕Ͱ͖ ͨؾ࣋ͪʹͳΔ • ͨͩ͠ JVM
ϩʔΧϧมͷετΞϩʔυ͕ແݶେʹͰ ͖ΔͨΊ७ਮͳελοΫϚγϯͰͳ͍ • php ͷதؒίʔυ͕ཧղ͘͢͠ͳΔ • vld extension ͷؾ࣋ͪʹͳΕΔ • 30 ԯͷσόΠεͰΔ͜ͱ͕Ͱ͖Δ • ͳΜͳΒ PHP ͕Քಇ͍ͯ͠ΔαʔόʔؚΊΔͱ Java ΑΓ͍͢͝ͷͰ
PHP Java
ஊͰ͢
JVM Λೖ͢Δʹ͋ͨͬͯ
None
The Java® Virtual Machine Specification ҰॹʹಡΜͰ͍͖·͢
The Java® Virtual Machine Specification https://docs.oracle.com/javase/specs/jvms/se11/html/index.html
ͬͦ͘͞όΠφϦϦʔσΟϯά͠·͢
Java ͷΫϥεϑΝΠϧ͜ͷߏ
None
ಡΈํ
unsigned int unsigned short object (PHPͩͬͨΒྻͰOK)
࣮ࡍʹ PHP ͰಡΜͰ͍͘
όΠφϦΛಡΉʹ • PHPͷϑΝΠϧؔΛ͏ • fopen ؔ • fread ؔ •
fseek ؔ • int short ͳͲͷΛܭࢉ͢Δ • base_convert ؔ • pack / unpack ؔ (ࠓճ͜ΕΛ͍·͢) • ord / chr ؔ • ؾ߹
unsigned int magic unsigned short minor version unsigned short major
version unsigned short constant pool count
PHP Ͱද͢ͱ
None
N unsigned int Ͱ ϏοάΤϯσΟΞϯ όΠτΦʔμʔ n unsigned
short Ͱ ϏοάΤϯσΟΞϯ όΠτΦʔμʔ cafebabe 0 52 (JDK 8) 29 ͜͜Ͱ͍͏ int (4byte) short (2byte) ͷαΠζ JVM ্ͰͷʹͳΓ·͢ɻ
Ͷʁ؆୯Ͱ͠ΐʁ
औಘͨ͠ constant_pool_count ΑΓ Constant Pool Λऔಘ͠·͢
͕ constant pool
PHP Ͱද͢ͱ
None
None
ͯΑ
ʁʁʁ ʁʁʁ ʁʁʁ ʁʁʁ
0x0A 0x09 ͷͬͯʁ
None
Constant Kind ͱ Tag ͷ͜ͱΛ ͍ࣔͯ͠·͢ unsigned byte
ͭ·Γ Constant Kind ͷ Tag ͷ ʹΑͬͯॲཧͷํ͕ มΘΓ·͢
ॲཧͷํ๏͕ҟͳΔ • ࠓճ Methodref (0x0A), Fieldref (0x09), String (0x08), Class
(0x07), Utf8 (0x01), NameAndType(0x0C) ͷ6ͭͷΈ ରԠɻ Constant Kind Tag Read bytes CONSTANT_Methodref 0x0A 2 byte + 2 byte ( unsigned short + unsigned short ) CONSTANT_Fieldref 0x09 2 byte + 2 byte ( unsigned short + unsigned short ) CONSTANT_String 0x08 2 byte ( unsigned short ) CONSTANT_Class 0x07 2 byte ( unsigned short ) CONSTANT_Utf8 0x01 ( length = 2 byte ) + length bytes ( unsigned short + length bytes ) CONSTANT_NameAndType 0x0C 2 byte + 2 byte ( unsigned byte + unsigned byte )
͜ΕΛͱʹͯ͠…
C unsigned byte constant pool count ྺ࢙తͳ ཧ༝ʹΑΓ -1
͢Δ CONSTANT_Methodref CONSTANT_Fieldref CONSTANT_String CONSTANT_Class
CONSTANT_Utf8 CONSTANT_NameAndType औಘͨ݁͠ՌΛ֨ೲ͢Δ
࣮ࡍʹग़ྗͯ͠ΈΔͱͲ͏ͳΔ͔ʁ
None
ͦΕͬΆ͍ͷ͕ݟ͑ͯ͘Δ
✌(‘ω'✌ )ࡾ✌('ω')✌ࡾ( ✌’ω’)✌ ָ͍͠ !!!
Ҿ͖ଓ͖ಡΜͰ͍͖·͢
None
unsigned short access flag unsigned short this class unsigned short
super class unsigned short interface count unsigned short fields count unsigned short methods count
PHP Ͱද͢ͱ
None
32 (ACC_SUPER) Test java/lang/Object 0 (ΠϯλϑΣʔεఆٛ͞Ε͍ͯͳ͍ͨΊ) 0 (ϑΟʔϧυఆٛ͞Ε͍ͯͳ͍ͨΊ) 2 (<init>
ͱ main ͕ఆٛ͞Ε͍ͯΔͨΊ)
ϝιου͕ 2 ͭ͋ΔͷͰ ಡΜͰ͍͖·͢
None
unsigned short unsigned short unsigned short unsigned short ϝιουʹ Code
Attribute ؚ͕·ΕΔ ʢͦΕҎ֎ؚ·Ε·͕͢লུ͠·͢ʣ
Code Attribute ͷߏʁ
None
unsigned short length byte unsigned int Code Attribute ʹ LineNumberTable
Attribute ؚ͕·Ε·͢ ʢͦΕҎ֎ؚ·Ε·͕͢লུ͠·͢ʣ
LineNumberTable Attribute ͷߏʁ
None
unsigned short unsigned int
None
͕ϝιουͷใͱ JVM ͷίʔυͷใʹͳΓ·͢
PHP Ͱද͢ͱ
None
None
None
࣮ࡍͷ JVM ্ͷίʔυ͕֨ೲ͞Ε͍ͯ·͢ Attribute ͷछྨʹΑΓॲཧํ๏͕ҟͳΔͨΊ ذ͍ͯ͠·͢ ࠶ؼ͢Δඞཁ͕͋ΔͷͰؔԽͯ͠·͢
Attribute ͷछྨʹΑΓॲཧํ๏͕ҟͳΔͨΊ ذ͍ͯ͠·͢ ࠶ؼͰॲཧ͍ͯ͠·͢
0 (ϝιουͷΞΫηεݖΛ͍ࣔͯ͠·͢) <init>, mainͳͲͷϝιου໊ ()V, ([Ljava/lang/String;)VͳͲͷ ϝιουͷҾͷใ Code Attribute ͳͲͷใ
࣮ࡍʹग़ྗͯ͠ΈΔͱʁ
None
͍͍ײ͡ʹऔΕ͖ͯ·ͨ͠
ϥετεύʔτ
࠷ޙ Ϋϥεͷ Attribute Λऔಘ͢Δ
ClassFile Structure ʹ SourceFile Attribute ͕ ؚ·Ε·͢ ʢͦΕҎ֎ؚ·Ε·͕͢লུ͠·͢ʣ
SourceFile Attribute ͷߏʁ
None
None
unsigned short attribute count unsigned short attribute name index unsigned
int attribute length unsigned short sourcefile index
PHP Ͱද͢ͱ
None
None
readAttributeؔʹ SourceFile ΛՃ
ϝιουͱಉ͡Α͏ͳॲཧΛॻ͘
Ҏ্Ͱ JVM ೖྃͰ͢
30ԯͷσόΠεͰΔ Java ͷ ؾ࣋ͪʹͳΕ·͔ͨ͠ʁ PHP
࣍ճ
PHP Ͱ JVM Λಈ͔͢ χʔϞχοΫͱ Operation Code ͱ iload_0 ͬͯͳΜͩ…
tableswitch ͱ lookupswitch ͷҧ͍ Φϖϥϯυ ϩʔΧϧετϨʔδ invokespecial ͱ invokevirtual ಥવͷ <clinit> ͳͥ PHP ͰΔΜͩ…
ָ͓͠Έʹʂ ※͓͢Δॴܾ·ͬͯ·ͤΜ ※͓͢Δ͜ͱࣗମܾ·ͬͯ·ͤΜ
None
͜ͷͷͨΊʹɺେྔͷ࣮ͱ ϦϑΝΫλϦϯάΛ͖ͯ͠·ͨ͠
JAR ͷରԠ, ΞϊςʔγϣϯͷରԠ, ֎෦Ϋϥε ͷରԠ ͳͲͳͲ…
None
None
None
Before
Before ʊਓਓਓਓਓਓʊ ʼɹ.DS_Storeɹʻ ʉY^Y^Y^Y^Y^Y^ʉ ʊਓਓਓਓਓਓʊ ʼɹnbprojectɹʻ ʉY^Y^Y^Y^Y^Y^ʉ ʊਓਓਓਓʊ ʼɹ4લɹʻ ʉY^Y^Y^Y^ʉ
20ࡀͷͱ͖ʹ͜Εॻ͍ͨͷ͔…
After
After PHPUnit Ͱςετ composer ରԠ PHP CodeSniffer ͰίʔσΟϯάϧʔϧΛ౷Ұ TravisCIͰςετΛ୲อ
ϞμϯʹͳΓ·ͨ͠
DEMO (͕࣌ؒ͋Ε)
php-java ͱ͍͏໊લͰ JVM ΤϛϡϨʔλΛެ։͍ͯ͠·͢ ͥͻࣗ͝ͷ PC Ͱࢼͯ͠Έ͍ͯͩ͘͞ ͦͯ͠ίϯτϦϏϡʔλʹͳ͍ͬͯͩ͘͞ʂʂ https://github.com/memory-agape/php-java
ຊͷαϯϓϧͪ͜Β https://gist.github.com/memory-agape/ 6d4dce2af4ece6e41293afb4e2caa5e1
THANK YOU FOR YOUR LISTENING