Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
3.1k
pnl で簡易的に作る PHP ネイティブアプリケーション
m3m0r7
PRO
0
70
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
1
1.2k
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
590
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
350
AI 時代だからこそ学ぶべき PHP の基礎
m3m0r7
PRO
7
2.6k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
700
コードゴルファー道
m3m0r7
PRO
0
680
ChatGPT とつくる PHP で OS 実装
m3m0r7
PRO
3
570
Other Decks in Programming
See All in Programming
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
170
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
310
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
120
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
330
Workers Cache を知る
syumai
0
320
setup-vp GitLab対応の裏側
naokihaba
0
150
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
170
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
110
The Rails Doctrine Decade
koic
2
470
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.9k
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
220
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Documentation Writing (for coders)
carmenintech
77
5.6k
First, design no harm
axbom
PRO
2
1.3k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Faster Mobile Websites
deanohume
310
32k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
480
Docker and Python
trallard
47
4.2k
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