XLVIIJava
PHPã¨Javaã®é€£æºã‚’ã¨ã—ã¦è€ƒãˆã‚‰ã‚Œã‚‹æ‰‹æ®µã¯2種類ã‚りã¾ã™ã€‚PHPã‚’Javaサーブ
レット環境ã«çµ±åˆã™ã‚‹æ–¹æ³•ã¨Javaサãƒãƒ¼ãƒˆã‚’PHPã«çµ±åˆã™ã‚‹æ–¹æ³•ã§ã™ã€‚å‰è€…ã®
æ–¹ãŒã‚ˆã‚Šå®‰å®šã§åŠ¹çŽ‡çš„ãªæ‰‹æ³•ã§ã™ã€‚å‰è€…ã¯ã€ã‚µãƒ¼ãƒ–レットサーãƒã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼
フェイスã¨ã—ã¦SAPIモジュールã«ã‚ˆã‚Šæä¾›ã•れã€å¾Œè€…ã¯ã€Java拡張モジュール
ã¨ã—ã¦æä¾›ã•れã¾ã™ã€‚
PHP 4 ext/java ã¯ã€PHPã‹ã‚‰Javaオブジェクトã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’生æˆã—ã€ã‚³ãƒ¼ãƒ«
ã™ã‚‹ç°¡å˜ã§åŠ¹çŽ‡çš„ãªæ‰‹æ®µã‚’æä¾›ã—ã¾ã™ã€‚ã“ã®JVMã¯JNIを用ã„ã¦ä½œæˆã•れã€å…¨
ã¦ã¯ã“ã®ãƒ—ãƒã‚»ã‚¹ã§å‹•作ã—ã¾ã™ã€‚ext/javaã®æ§‹ç¯‰æ‰‹é †ã¯ã€
php4/ext/java/READMEã«ã‚りã¾ã™ã€‚
例 1Java ã®ä¾‹ <?php
// Java クラス java.lang.System ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’PHPã«ä½œæˆã™ã‚‹
$system = new Java('java.lang.System');
// プãƒãƒ‘ティã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã®ãƒ‡ãƒ¢
print 'Java version='.$system->getProperty('java.version').' <br>';
print 'Java vendor=' .$system->getProperty('java.vendor').' <br>';
print 'OS='.$system->getProperty('os.name').' '.
$system->getProperty('os.version').' on '.
$system->getProperty('os.arch').' <br>';
// java.util.Date example
$formatter = new Java('java.text.SimpleDateFormat',
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
print $formatter->format(new Java('java.util.Date'));
?> |
|
例 2AWT ã®ä¾‹ <?php
// ã“ã®ä¾‹ã¯ã€CGIã¨ã—ã¦å®Ÿè¡Œã•れるã“ã¨ã®ã¿ã‚’考慮ã—ã¦ã„ã¾ã™ã€‚
$frame = new Java('java.awt.Frame', 'PHP');
$button = new Java('java.awt.Button', 'Hello Java world!');
$frame->add('North', $button);
$frame->validate();
$frame->pack();
$frame->visible = True;
$thread = new Java('java.lang.Thread');
$thread->sleep(10000);
$frame->dispose();
?> |
|
注æ„:
new Java() ã¯ã€æœ‰åйãªã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãŒã‚ã‚‹å ´åˆã€
クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆã—ã¾ã™ã€‚å¼•æ•°ãŒæŒ‡å®šã•れãªã„å ´åˆã«ã¯ã€
デフォルトã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã«ã‚ˆã‚Š
java.lang.Systemã®ã‚ˆã†ãªã‚¯ãƒ©ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨
良ã„ã§ã—ょã†ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã€é™çš„ãªæ‰‹æ³•ã§ãã®ã‚¯ãƒ©ã‚¹ã®æ©Ÿèƒ½ã®å¤šãã‚’
公開ã—ã¦ã„ã¾ã™ã€‚
ã‚るインスタンスã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã«ã¯ã€ã¾ãšbeanプãƒãƒ‘ティ
ãŒæŽ¢ã•れã¦ã‹ã‚‰ã€æ¬¡ã«publicãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ãŒæŽ¢ã•れã¾ã™ã€‚è¨€ã„æ›ãˆã‚‹ã¨ã€
print $date.timeã¯ã¾ãš
$date.getTime()ã¨è§£é‡ˆã•れã€ç¶šã„ã¦
$date.timeã¨è§£é‡ˆã•れã¾ã™ã€‚
é™çš„メンãƒãŠã‚ˆã³ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãƒ¡ãƒ³ãƒã¯å…±ã«åŒã˜æ§‹æ–‡ã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã§ã™ã€‚
ã•らã«ã€javaオブジェクトãŒjava.lang.Classåž‹ã®å ´
åˆã€ã“ã®ã‚¯ãƒ©ã‚¹ã®é™çš„メンãƒ(フィールドã¨ãƒ¡ã‚½ãƒƒãƒ‰)ã«ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã§ã™ã€‚
例外ãŒç™ºç”Ÿã™ã‚‹ã¨PHPã®è¦å‘ŠãŒå‡ºåŠ›ã•れã€çµæžœã¯NULLã¨ãªã‚Šã¾ã™ã€‚è¦å‘Šã¯
"@"記å·ã‚’付ã‘ã¦ãƒ¡ã‚½ãƒƒãƒ‰ã‚’コールã™ã‚‹ã“ã¨ã«æŠ‘圧ã§ãã¾ã™ã€‚以下ã®API
ã‚’ç›´è¿‘ã®ã‚¨ãƒ©ãƒ¼ã‚’å–å¾—ã—ã€ãƒªã‚»ãƒƒãƒˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
オーãƒãƒ¼ãƒãƒ¼ãƒ‰ã®è§£æ±ºã¯ã€äºŒã¤ã®è¨€èªžã®é–“ã§åž‹ã®é•ã„ãŒã‚ã‚‹ãŸã‚一般ã«ã¯
困難ãªå•題ã§ã™ã€‚PHP ã®Java拡張機能ã¯ç°¡å˜ã§ã™ãŒæœ€ã‚‚一致ã™ã‚‹ã‚ªãƒ¼ãƒãƒ¼
ãƒãƒ¼ãƒ‰ã‚’定義ã™ã‚‹ã‹ãªã‚ŠåŠ¹çŽ‡çš„ãªæ‰‹æ®µã‚’使用ã—ã¦ã„ã¾ã™ã€‚
åŠ ãˆã¦ã€PHPã®ãƒ¡ã‚½ãƒƒãƒ‰åã¯å¤§æ–‡å—å°æ–‡å—を区別ã—ãªã„ãŸã‚ã€é¸æŠžã•れる
オーãƒãƒ¼ãƒãƒ¼ãƒ‰ã®æ•°ã¯å¢—åŠ ã™ã‚‹å‚¾å‘ãŒã‚りã¾ã™ã€‚
メソッドãŒä¸€åº¦é¸æŠžã•れるã¨ã€ãƒ‘ラメータã®å€¤ã¯å¿…è¦ã«å¿œã˜ã¦èª¿æ•´ã•れã¾
ã™ã€‚ã“ã®ãŸã‚ã€(å€ç²¾åº¦å®Ÿæ•°ãŒè«–ç†å€¤ã«å¤‰æ›ã•れるã¨ã„ã£ãŸ)データã®åŠ£åŒ–
ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
PHPã§ã¯ä¼çµ±çš„ã«é…列ã¨ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã¯ç›¸äº’ã«å®Œå…¨ã«å¯æ›ã§ã—ãŸã€‚PHPã®
ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ãƒ«ã¯æ•´æ•°ã¾ãŸã¯é…åˆ—ã®æ·»å—ã®ã¿ã‚’使用ã§ãã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦
下ã•ã„。ã¾ãŸã€Javaã®primitiveåž‹ã®é…列ã¯ç–Žã¨ã™ã‚‹ã“ã¨ãŒã§ããªã„ã“ã¨ã«
も注æ„ã—ã¦ä¸‹ã•ã„。ã“ã‚Œã‚‰ã®æ§‹é€ ã¯å€¤ã§æ¸¡ã•れるãŸã‚ã€ãƒ¡ãƒ¢ãƒªã¨æ™‚é–“ã®æ¶ˆ
è²»é‡ãŒå¤§ããã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
sapi/servlet ã¯PHPプãƒã‚»ãƒƒã‚µå…¨ä½“をサーブレットã¨ã—ã¦å®Ÿè¡Œã™ã‚‹ãŸã‚ã«
ext/javaã«ã‚ˆã‚Šå®šç¾©ã•ã‚ŒãŸæ©Ÿæ§‹ã®ä¸Šã«æ§‹ç¯‰ã•れã¦ã„ã¾ã™ã€‚
ã“ã®å½¢æ…‹ã®PHPã®å´ã‹ã‚‰ã“ã®å®Ÿè£…ãŒåŸºæœ¬çš„ã«å„ªã‚Œã¦ã„る点ã¯ã€ã‚µãƒ¼ãƒ–レットを
サãƒãƒ¼ãƒˆã™ã‚‹WebサーãƒãŒé€šå¸¸JVMをプールã—ã€å†åˆ©ç”¨ã™ã‚‹ã“ã¨ã«æ³¨åŠ›ã—ã¦ã„ã‚‹
ã“ã¨ã§ã™ã€‚ã“ã®ã‚µãƒ¼ãƒ–レットSAPIãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ§‹ç¯‰æ‰‹é †ã¯ã€
php4/sapi/README ã«ã‚りã¾ã™ã€‚
注æ„:
ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ã€å…¨ã¦ã®ã‚µãƒ¼ãƒ–レットエンジンã§å®Ÿè¡Œå¯èƒ½ã§ã‚るよã†ã«ä½œæˆ
ã•れã¦ã„ã¾ã™ãŒã€ç¾åœ¨Apacheã®Jakarta/tomcatã§ã—ã‹ãƒ†ã‚¹ãƒˆã•れã¦ã„ã¾ã›
ん。他ã®ã‚¨ãƒ³ã‚¸ãƒ³ã§ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’実行ã™ã‚‹éš›ã«å¿…è¦ãªãƒ‘ッãƒã€ãƒã‚°ãƒ¬ãƒãƒ¼
ãƒˆã€æˆåŠŸäº‹ä¾‹ç‰ã‚’ãŠçŸ¥ã‚‰ã›ä¸‹ã•ã„。
PHP ã¯ã€å‹•作ディレクトリを変更ã™ã‚‹ç‰¹å¾´ãŒã‚りã¾ã™ã€‚sapi/サーブレット
ã¯ã‚‚ã¨ã«æˆ»ãã†ã¨ã—ã¾ã™ãŒã€PHPãŒå®Ÿè¡Œã•れã¦ã„ã‚‹é–“ã€ã‚µãƒ¼ãƒ–レットエンジ
ンã¯CLASSPATHã„相対ディレクトリã«ã‚ˆã‚ŠæŒ‡å®šã•れã¦ã„ã‚‹å…¨ã¦ã®ã‚¯ãƒ©ã‚¹ã‚’ãƒ
ードã§ããªã„ã‹ã€ç®¡ç†ç”¨ãŠã‚ˆã³JSPコンパイル用ã«ä½¿ç”¨ã•れã¦ã„る作æ¥ãƒ‡ã‚£
レクトリを見ã¤ã‘ã‚‹ã“ã¨ãŒã§ããªããªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚