JPHPã¯ãJava VMçšã®PHPèšèªã³ã³ãã€ã©ã§ãã 2é±éåãç§ã¯ãããžã§ã¯ãã«ã€ããŠã®èšäºãæžããŸãã ã åæ§ã®ãããžã§ã¯ãã¯ãRubyçšã®JRubyãPythonçšã®Jythonã§ãã JPHPã«é¢ããæåã®èšäºãå ¬éãããåŸã2æ¥éã§ãããžã§ã¯ãã¯githubã§500ã®æãç²åŸããRuNetã ãã§ãªãå€åœã®ãªãœãŒã¹ã§ãç¹ç¯ããŠãgithubã®è©äŸ¡ã§1äœã«ãªããŸããã
ãããŠãå°ããªãã¥ãŒã¹ãå§ãŸãåã
ææ°ã®ãããžã§ã¯ããã¥ãŒã¹
- ãããžã§ã¯ãã«ã¯ç¬èªã®ãã¥ãŒã¹twitterããããŸã-https://twitter.com/jphpcompiler
- ãã£ãïŒ ç§ãçŽæãããšãããPHP 5.4ã®ç¹æ§ãå®è£ ãããŸãã
- Gotoã¯PHP 5.3ããå®è£
ãããåŒçšç¬Šãå®è¡ããŸã
``
- å人popsulã¯2é²æ°
0b
å®è£ ããŸãã - zendã©ã³ã¿ã€ã ããå®è£ ãããæ©èœã¯ãã«ãŒãã«ããåå¥ã®jphp-zend-extã¢ãžã¥ãŒã«ã«åé¢ãããŸããïŒReflectionãspl autoloadingãå埩åãé€ããã¹ãŠïŒ
- å®è³ªçãªã³ã³ãã€ã©ã®ãªãã¡ã¯ã¿ãªã³ã°
- IDEAãã©ã°ã€ã³ã·ã¹ãã ã«ç²ŸéããŠãããã1人ã®åªãã人VISTALLã¯ãå€ãã®å®è·µçãªã¢ããã€ã¹ãäžãããã®æåãªç°å¢ã§JPHPã®JVMãããã¬ãŒãçµ±åããå¯èœæ§ã暡玢ããŠããŸãããã§ã«æåããŠããŸãã
ãããžã§ã¯ãã¯ããã«å¥ã®ãµã€ãã«ãªããJPHPãè©Šãã®ã¯éåžžã«ç°¡åã«ãªãããšã³ãžã³ã®ããŸããŸãªã³ã³ãã€ã«ãããããŒãžã§ã³ãã¬ã€ã¢ãŠããããŸãã ããã§ã¯ããããã¯ã«ç§»ããŸããã...
ãããžã§ã¯ãéå§
ãããžã§ã¯ãã¯èªçºçã«å§ãŸããŸããã ãã®åã«ãç§ã¯åæ§ã®ãããžã§ã¯ããæ¢ããŠããŸããã JVMã®phpå®è£ ã Resinã®Quercusã®ãããªãããžã§ã¯ãããããŸããããã¯ãJavaã§èšè¿°ãããJavaã³ãŒããžã®ãã©ã³ã¹ã¬ãŒã¿ã§ãã ç¹ã«ãããžã§ã¯ãã®äœè ããå®è£ ã¯Zend PHP + APCãšåãé床ã§æ©èœãããšè¿°ã¹ãŠããããããã®ç¶æ³ã¯ç§ã«ã¯åããŠããŸããã§ããã äžå®ã®æéãŸã§ãJVMã«ã¯ä»ã®PHPå®è£ ïŒããšãã°p8ãprojectzeroïŒããããŸãããããããã¯ãã¹ãŠæ»ãã§éããŸããã
ãããžã§ã¯ããéå§ããäž»ãªåæ©ã¯ãããã©ãŒãã³ã¹ãšJITã§ããã ç§ã¯ããªãé·ãéJavaãšéä¿¡ããŠããŸããããJVMã®é«ãããã©ãŒãã³ã¹ãCookieã巚倧ãªã³ãã¥ããã£ãé«å質ã®ã©ã€ãã©ãªã«æ¹ãããŠããŸãã ãããŠãå°ãèããŠãç§ã®ã¢ã€ãã¢ãçãŸããŸãã-Javaãæ倧éã«æŽ»çšãããã®äžã«PHPãšã³ãžã³ãå®è£ ããããšã§ãã èããéããŠããã¹ãããŒãžã§ã³ã®äœæãéå§ããŸãããjphpãå ã®Zend PHPãããå°ãªããšã2åé«éã§ããã°ãéçºãç¶ãããšå€æããŸããã
ãŸããããç¥ãããŠãããã¹ãŠã®JVMèšèªïŒgroovyãjrubyãscalaïŒã®ãªããžããªã調ã¹ãŠãJVMãã€ãã³ãŒãã®çæã«äœ¿çšããã©ã€ãã©ãªã®ã»ãããèŠã€ããŸããã å€æããããã«ãããç¥ããããµãŒãããŒãã£ã©ã€ãã©ãª-ASMããããŸãã éåžžã«æŽ»çºã«éçºãããŠãããPDFã§ååãªããã¥ã¡ã³ãããããDalvikïŒAndroidïŒãã€ãã³ãŒãããµããŒãããŠããããã§ãïŒããã«ã€ããŠã¯ä»¥äžã§è©³ãã説æããŸãïŒã
Java VMã®çŽ¹ä»
Java Virtual MachineïŒJVMïŒã¯éåžžã«åŒ·åãªããŒã«ã§ãã ASMã©ã€ãã©ãªã®ããã¥ã¡ã³ããããJVMãã€ãã³ãŒããã©ã®ããã«æ©èœãããã確èªã§ããŸãã 次ã®æ®µèœã§ãVMã®ãã¹ãŠã®æ©èœãç°¡åã«èª¬æã§ããŸãã
1.ã¹ã¿ãã¯ä»®æ³ãã·ã³
2.ããŒã«ã«å€æ°ãã€ã³ããã¯ã¹ïŒã¬ãžã¹ã¿ã®ãããªãã®ïŒã§ä¿åããããšãã§ããŸã
3. GCïŒã¬ããŒãžã³ã¬ã¯ã¿ãŒïŒã¯VMã¬ãã«ã§å®è£ ãããŸã
4. VMã¬ãã«ã§å®è£ ããããªããžã§ã¯ããšã¯ã©ã¹
5.å€æ°ã®æšæºæäœ-POPãPUSHãDUPãINVOKEãJMPãªã©ã
6. Try Catchçšã®ãã€ãã³ãŒãåœä»€ããããŸãã
7. VMã®å€ã«ã¯ãint32ãint64ãfloatãdoubleãobjectãã¹ã«ã©ãŒé åããªããžã§ã¯ãé åã®ããã€ãã®ã¿ã€ãããããŸããint32ã¯boolãshortãbyteãcharã«äœ¿çšãããŸãã
ãããã£ãŠãGCèªäœãšãªããžã§ã¯ãã¯ã©ã¹ã·ã¹ãã ããŒãããå®è£ ããå¿ èŠããªãããšã«æ°ä»ããŸããã
ç®æšãšåªå é äœã®éžæ
éçºãå§ããåã«ãèšèªãšããŠã ãã§ãªããã©ãããã©ãŒã ãšããŠãPHPã®äž»ãªå©ç¹ãååã«ç解ããŸããã ç§ã«ãšã£ãŠæãæçœãªããšã¯ã次ã®ããšã§ããã
- ã¹ã¯ãªããããªã¯ãšã¹ãããšã«åå¥ã®ç°å¢ã§å®è¡ãããå Žåã éé¢ãããç°å¢ã¯ã»ãšãã©phpã®å ¬çã§ãã ãã®äœæ¥ã¹ããŒã ã«ããããªã¯ãšã¹ãéã§ãªãœãŒã¹ãå ±æããããšãèããå¿ èŠããªããªããŸãã
- HOT Reloadingã¯åŸæ¥ã®phpã®äœæ¥ã¹ããŒã ã§ãããœãŒã¹ãå€æŽããŠããŒãžãå床éããšãæ°ããçµæã衚瀺ãããŸã
ãããã®å©ç¹ã¯æ¬ ç¹ã§ããããŸãã åãªã¯ãšã¹ãã¯ãã¹ãŠã®ã¯ã©ã¹ããªããŒãããŸãããããã¯ããŸãè¯ããããŸããã åé¡ã¯ãéšåçã«è§£æ±ºããããã€ãã³ãŒããã£ãã·ã¥ã§ãããæåŸãŸã§ã§ã¯ãããŸããã äžèšã®ã¡ãªãããç¶æããªããããã®åé¡ã解決ã§ãããšæããŸããã çµæãšããŠç§ãåŸããã®ïŒ
- ç°å¢ãªããžã§ã¯ã-ãšã³ãžã³ãåäœããããã®éé¢ãããç°å¢ãåç°å¢ã«ã¯ç¬èªã®é¢æ°ãã¯ã©ã¹ãã°ããŒãã«å€æ°ãèšå®ã®ã»ããããããŸã
- CompileScopeãªããžã§ã¯ã-ã³ã³ãã€ã«ãããã¯ã©ã¹ãšé¢æ°ãä¿åããã¯ã©ã¹ãé¢æ°ãããã³ã¢ãžã¥ãŒã«ã®ãã£ãã·ã¥ã¡ã«ããºã ãå®è£ ããŸãã ç°å¢ãªããžã§ã¯ãã¯ãã¹ã³ãŒãã䜿çšããŠã¯ã©ã¹ãšé¢æ°ãæ€çŽ¢ããŸããããããæ¢ã«CompileScopeçšã«ã³ã³ãã€ã«ãããŠããå Žåããããã¯å³åº§ã«ç°å¢ã«ããŒããããŸãã
åçåä»ã
Java VMã¬ãã«ã§ã¯ãåçåä»ãã¯ãããŸããããPHPã§ã¯å¿ èŠã§ãã ããã¯å€ãã®äººã«ãšã£ãŠå€§ããªåé¡ã®ããã«æããŸãããããã§ã¯ãããŸããã
å€ãä¿åããããã«ãæœè±¡ã¯ã©ã¹Memoryãå®è£ ããŸããã JPHPã¯å€ãMemoryãªããžã§ã¯ããšããŠä¿åããŸãã 次ã«ãStringMemoryãNullMemoryãDoubleMemoryãLongMemoryãTrueMemoryãFalseMemoryãArrayMemoryãããã³ObjectMemoryã¯ã©ã¹ãå®è£ ããŸããã ããããã¯ã©ã¹ã®ååãããããããã«ããããããç¹å®ã®ã¿ã€ãïŒæ°åãæååãªã©ïŒãæ åœããŠããŸãã ãããã¯ãã¹ãŠã¡ã¢ãªããç¶æ¿ãããŸããã
ã¡ã¢ãªã¯ãå€ã®æäœãå®è£ ããããã«å¿ èŠãªæœè±¡ã¡ãœããã§æ§æãããŸããããšãã°ããã©ã¹æŒç®åãšãã€ãã¹æŒç®åã«ã¯ãåã¡ã¢ãªã¯ã©ã¹ã«å®è£ ããå¿ èŠããã
plus()
ããã³
minus()
ã¡ãœããããããŸãã ãããã¯ä»®æ³ã¡ãœããã§ãã ãããã®ã¡ãœããã¯å€æ°ãããŸãããããã«ã¯çç±ããããŸã-ããŸããŸãªæé©åã ãããã©ã®ããã«æ©èœããããç解ããããã«ãæ¬äŒŒã³ãŒããæäŸããŸãã
æ¬äŒŒã³ãŒãã®äŸ
åœç¶ãããã¯å®éã®phpã³ãŒãã§ã¯ãªããæ¬äŒŒã³ãŒãã§ãã ããã¯ãã¹ãŠãå éšã§ãã€ãã³ãŒãã§çºçããŸãã
$var + 20; // // $var Memory $var->plus(20); // plus Memory $x + 20 - $y /* */ $x->plus(20)->minus($y);
åœç¶ãããã¯å®éã®phpã³ãŒãã§ã¯ãªããæ¬äŒŒã³ãŒãã§ãã ããã¯ãã¹ãŠãå éšã§ãã€ãã³ãŒãã§çºçããŸãã
Memoryãªããžã§ã¯ãã¯ãã¡ã¢ãªæ¶è²»ã®ç¹ã§Zend PHPã®zvalãªããžã§ã¯ããè¶ ããŸãããããããJPHPãšZend PHPã®ã¡ã¢ãªæ¶è²»éãã»ãŒçããçç±ã®1ã€ã§ãã å€ãã®å€ïŒããšãã°ãfalseãtrueãnullãå°ããæ°å€ïŒã®å Žåããªããžã§ã¯ãã¯ã¡ã¢ãªã«ãã£ãã·ã¥ãããè€è£œãããŸããã ãã¹ãŠã®
true
æ°ããTrueMemoryãªããžã§ã¯ã
true
äœæããã®ã¯çã«ããªã£ãŠããŸããïŒ ãã¡ããéããŸãã
åçåä»ããšãã®ä¿®æ£ã®å€±æ
äžã§èª¬æããããã«ããã¹ãŠã®å€ã¯Memoryã¯ã©ã¹ã®ãªããžã§ã¯ãã§ãã æåã«ãåçŽãªå®æ°å€ã®ãªãŒããã¯ã·ã³ã°ãå®è£ ããŸããã ããšãã°ã次ã®å ŽåïŒ
// $y = $x + 2; // ( ) $y->assign( $x->plus( new LongMemory(2) ) );
ã芧ã®ãšãããã2ãããªããžã§ã¯ãã«å€ãããŸããã ããã°ã©ãã³ã°ã®èŠ³ç¹ããã¯äŸ¿å©ã§ããããçç£æ§ã®èŠ³ç¹ããã¯æªå€¢ã§ãã ãã®ãããªå®è£ ã¯ãZend PHPãããéãåäœããŸããã§ããã
æåŸã«è¡ãããšã«ããŸããã åçŽãªå€ã«å¯ŸããŠãã®ãããªå€æ°ã®ãªããžã§ã¯ããéå§ãããã®ãé¿ããããã«ïŒãããŠãã®ã³ãŒããã«ãŒãã§æ³åããŸããïŒïŒãç§ã¯plusïŒïŒã¡ãœããããã³ãã®ä»ã®åæ§ã®ã¡ãœãããåºæ¬çãªJavaåïŒdoubleãlongãbooleanãªã©ïŒã«å®è£ ããããšã«ããŸãããèšæ¶ ç§ã¯èªãããããã¯ã«ãŒãã³ã§ãããããããšã®ãããªã«ãããããŸããã ç§ã¯ã³ã³ãã€ã©ãåç·šéãã圌ã¯åãšããããã©ãããããç解ãå§ããŸããã ã³ã³ãã€ã©ã¯ãã¹ã¿ãã¯å ã®èŠçŽ ã®ã¿ã€ãã«å¿ããŠãç°ãªãã¿ã€ããšç°ãªãã¡ãœãããæäœã«çœ®ãæããããšãåŠã³ãŸããã ã¯ããã¹ã¿ãã¯ã¯ã³ã³ãã€ã«æã«èšç®ãããŸãã ãããã®å®æ°å€ãå®æ°ã®ããŒãã«ã«ä¿åããããšãã§ããŸãããããã»ã©å€§ããã¯ãããŸãããããªãŒããŒãããã«ãªããŸãã
çµå±ã®ãšãããç§ã¯ãããæ£åœãªçç±ã§ãã¹ãŠéå§ããåæãã¹ãã®ããã©ãŒãã³ã¹ã¯ãã«ãŒããå€æ°ãªã©ã§ãZend PHPã2-3-4-10å以äžäžåãããã«ãªããŸããã
å€æ°ã®éæ³
PHPã¯æ¬åœã«éæ³ã®èšèªã§ãã確ãã«ããããŸããããå®è¡æã«æååããååã§å€æ°ã«ã¢ã¯ã»ã¹ã§ããèšèªã¯ä»ã«ãããŸããïŒ ç°¡åãªäŸïŒ
$var = "foobar"; ${'var'} = 100500; $name = 'var'; echo $$name;
ãã®ãããªéæ³ãå®è£ ããã«ã¯ãå€æ°åããŒãã«-ããã·ã¥ããŒãã«ã䜿çšããå¿ èŠããããŸãã JVMã¯ãã€ã³ããã¯ã¹ã«ãã£ãŠå€æ°ãä¿åããæ©èœãæäŸããŸãããã¡ãããã³ã³ãã€ã«æã«å€æ°åãã€ã³ããã¯ã¹ã«å€æããããšã¯ããè«ççãªã¹ãããã§ãããããã·ã¥ããŒãã«ãããè¿ éã«å€æ°ã«ã¢ã¯ã»ã¹ã§ããŸãã ããé«éã«ãªããã®ãšæ¯èŒããŠãã ãã-ããã·ã¥ããŒãã«ã§æ€çŽ¢ããããã€ã³ããã¯ã¹ã§é åã«ã¢ã¯ã»ã¹ããŸããïŒ
æåã¯ãããå¿ããŠãã€ã³ããã¯ã¹ã«å€æ°ãå®è£ ããŸããã å€æ°ãžã®ã¢ã¯ã»ã¹ã®ããã©ãŒãã³ã¹ã¯æé«ã§ããã ãã®ãããªéæ³ãæãåºãããšããç§ã¯ããã·ã¥ã®ããã«ããŒãã«ãããçŽããªããã°ãªããŸããã§ãã...ãããŠããã¹ãŠã¯æªãã£ãã§ãã å€æ°ã«ããçç£æ§ã¯æåéã2ã3åäœäžããŸããã
ããããããšãªããã³ã³ãã€ã©ãŒã§å€æ°ã®ã³ã³ãã€ã«ã®2ã€ã®ã¢ãŒãïŒã€ã³ããã¯ã¹ãšããã·ã¥ããŒãã«ïŒãå®è£ ããããšã«ããŸããã ã¢ãã©ã€ã¶ãŒã¯ãè¡ã®å€æ°ã«ã¢ã¯ã»ã¹ããå¿ èŠãããã³ãŒããèå¥ããã®ã«åœ¹ç«ã¡ãŸãã ããã¯ã次ã®çç¶ã«åŸã£ãŠçºçããŸãã
- ã³ãŒãã«åŒãå«ãŸããŠããå ŽåïŒ
$$var
ã${...}
- é¢æ°evalãincludeãrequireãget_defined_varsãextractãcompactããããŸã
- ã°ããŒãã«ã¹ã³ãŒã
requireãšincludeãå«ãã³ãŒãã®ããã·ã¥ããŒãã«ã«å€æ°åãä¿åããå¿ èŠãããã®ã¯ãªãã§ããïŒ ã¯ãããã¹ãŠãåçŽã§ããPHPã¯ãã©ã°ã€ã³ã¹ã¯ãªããå ã®å€æ°ãæž¡ãå¿ èŠããããŸããããã¯evalãšåãã§ãã ãããŠãæ®ãã®é¢æ°ã¯å€æ°åã§åäœããŸãã
éåžžã«å€ãã®å Žåããã®ãããªå€æ°ã®éæ³ã¯å¿ èŠãããŸãããã€ãŸããJPHPã§ã³ãŒããããé«éã«åäœããŸãã å€æ°ã®ã°ããŒãã«ã¹ã³ãŒãããããŸãã ããã·ã¥ããŒãã«ã«å€æ°ãæ ŒçŽããã¡ã«ããºã ã¯ããã®é åã§èªåçã«äœ¿çšãããŸãã ã°ããŒãã«å€æ°ã¯ãååããã³ãã€ã§ã
$GLOBALS
é åãä»ããŠã¢ã¯ã»ã¹ã§ãããšæ³å®ãããŠããŸãã
ã¹ãŒããŒ-ã°ããŒãã«å€æ°
$GLOBALS, $_SERVER, $_ENV ..
ããã®ãããªå€æ°ã®å Žåã globalããŒã¯ãŒãã¯å¿ èŠãããŸããã ãããã®å®è£ ã¯éåžžã«ç°¡åã§ãã³ã³ãã€ã©ã¯ã¹ãŒããŒã°ããŒãã«å€æ°ã®ååãäºåã«ç¥ã£ãŠãããããããçºçããå Žåããã®ãããªå€æ°ã«ã¢ã¯ã»ã¹ããããã«å¥ã®ã³ãŒããæ¬äŒŒã³ãŒãã®äŸã«çœ®ãæããŸãïŒ
ã¹ãŒããŒã°ããŒãã«å€æ°ã®äŸ
function test() { $a = $GLOBALS['a']; ... $GLOBALS['x'] = 33; } // function test() { $GLOBALS =& getGlobalVar('GLOBALS'); // $a->assign($GLOBALS['a']); ... $GLOBALS['x']->assign(33); }
é åãåç §ãäžå€å€ãGC
PHPã§ã¯ãé åã¯ã³ããŒãããåç §æž¡ãã§ã¯ãããŸããã ãã ããå²ãåœãŠ=ã®æç¹ã§ã¯é åã®ã³ããŒã¯çºçããŸããã ããã«ããå€ãã®ãªãŒããŒããããçºçããŸãã JPHPãšã³ãžã³ã®å éšãããã³Zend PHPã§ããé åã¯åç §ã«ãã£ãŠã³ããŒãããŸãããé åã®å€æŽæã«ã³ããŒãããŸãïŒé åãžã®åç §ã®æ°ã1ãè¶ ããå ŽåïŒã
JPHPã¯åç §ã«ãŠã³ãã䜿çšããã埪ç°ãªã³ã¯ãåé€ã§ããæšæºã®Java GCã䜿çšããŸãã ããã«ããããã®ãããªé åãå®è£ ãããšãã«åé¡ãçºçããŸãã ãã®ãããMemoryå€ãäžå€å€ã«å€æããããã®ç¹å¥ãªã¡ã«ããºã ãå®è£ ããŸããã æåã«ç䌌ã³ãŒãã瀺ããŸãã
$x = array(1, 2, 3); $y = $x; $y[0] = 100; // $y , $x // (-): $x->assign( array(1,2,3) ); $y->assign($x->toImmutable()); // $x $y[0]->assign(100); // : $y =& $x; // ->toImmutable $y->assign($x);
JPHPã«ã¯ãå¥ã®çš®é¡ã®ã¡ã¢ãªãªããžã§ã¯ããReferenceMemoryããããŸãããããã®ãªããžã§ã¯ãã¯ãåã«å¥ã®ã¡ã¢ãªãªããžã§ã¯ããžã®åç §ãæ ŒçŽããŸãã ãã ããå€æ°ã¯åžžã«åç §ãªããžã§ã¯ããšããŠä¿åãããããã§ã¯ãããŸãããå Žåã«ãã£ãŠã¯ãããŒã«ã«å€æ°ããã®ãããªãªã³ã¯ãªãã§å®è¡ã§ãããã€ãã³ãŒããçŽæ¥äœ¿çšããŠã»ã«ã«æ°ããå€ãæžã蟌ãããšãã§ããŸããããã¯éåžžã®æ¹æ³
->assign().
ããèªç¶ã«é«éã«åäœããŸã
->assign().
åç §ãªããžã§ã¯ãã¯
toImmutable
ã¡ãœããããå®éã®å€ãè¿ããé åã¯é åã®ç¹å¥ãªåç §ã³ããŒãè¿ããŸããããã¯ãæåã«å€æŽããããšãã«ã³ããŒãããŸãã ãããã£ãŠãå€æ°ãå¥ã®å€æ°ãžã®ãªã³ã¯ã«ã³ã³ãã€ã©ãŒã«å²ãåœãŠãã«ã¯ã
toImmutable
ã¡ãœããã䜿çšããªãã§ååã§ãã
ã¯ã©ã¹ãšé¢æ°ã®å®è£
ã¯ã©ã¹ã¯ãã§ã«JVMã¬ãã«ã§ååšããŠããŸãã äžè¬çã«ãJavaãScalaãGroovyãJRubyã¯ãJVMã®ãã¬ãŒã ã¯ãŒã¯å ã§ç°ãªãã·ã°ããã£ãæã€åãã¯ã©ã¹ãçæããŸãã phpã¯ã©ã¹ãã³ã³ãã€ã«ãããšããJPHPã¯ç¹å¥ãªã·ã°ããã£ãæã€JVMã¯ã©ã¹ã䜿çšããŸãã
Memory methodName(Environment env, Memory[] args)
Environmentãªããžã§ã¯ãã¯åã¡ãœãããšé¢æ°ã«è»¢éãããŸãããã®ãªããžã§ã¯ãã䜿çšãããšãã¡ãœãããå®è¡ãããç°å¢ã«ã€ããŠå€ããåŠã¶ããšãã§ããŸãã ã¯ã©ã¹ãšé¢æ°ã¯ããã¹ãŠã®ç°å¢ã§åãæ¹æ³ã§ã³ã³ãã€ã«ãããŸãã ã¡ã¢ãª[]ã¯ãã¡ãœããã«æž¡ãããåŒæ°ã®é åã§ãã PHPã§ã¯ãé¢æ°ãäœãè¿ããªããŠãnullãè¿ããããã¡ãœããã¯åžžã«voidã§ã¯ãªãäœããè¿ãå¿ èŠããããŸããããã¯ãã®ãããªããŒãããžãŒã§ãã
PHPé¢æ°ãã¯ã©ã¹ã«ã³ã³ãã€ã«ãããŸã JVMã«ã¯é¢æ°ã®ãããªãã®ã¯ãããŸããã åºåã§ã¯ã1ã€ã®éçã¡ãœãããæã€ã¯ã©ã¹ãååŸããŸããããã¯æ¬è³ªçã«é¢æ°ã§ãã é¢æ°ãåãã¯ã©ã¹ã®ã¡ãœããã«ã³ã³ãã€ã«ãããªãã®ã¯ãªãã§ããïŒ ããã¯è¯ã質åã§ãããããããäœåãªã¯ã©ã¹ãçæããªãããã«ããçŽãå¿ èŠããããŸãããä»ã®ãšããã¯ãã䟿å©ã§ãã
JVMã¯ãå®è¡æã«Javaã¯ã©ã¹ããŒããŒãèšè¿°ããã ãã§ãã¡ã¢ãªããã¯ã©ã¹ãç°¡åã«ããŒãã§ããŸãã ãããã£ãŠãJPHPã¯å®è¡æã«ã³ã³ãã€ã«ãããäžåºŠã«ãã¹ãŠã§ã¯ãªãå®è¡æã«ã¯ã©ã¹ãããŒãã§ããŸãã
ãã³ã°ã¹ã¿ãŒããšåé¡è§£æ±º
ãã®ãšã³ãžã³ã¯ãJavaèªäœã§ã¯ã©ã¹ãäœæããæ©èœãå®è£ ããŸããã ãã ãããã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã ãã®ãããªã¯ã©ã¹ã®ãã¹ãŠã®ã¡ãœããã«ã¯ãå¿ èŠãªçœ²åãããããã®ãããªã¯ã©ã¹ã®äžäŸãšããŠãããã€ãã®è£å©æ³šéïŒããšãã°ãã¿ã€ããã³ãçšïŒã§ããŒã¯ããå¿ èŠããããŸãã
php \ lang \ã·ã¹ãã ã¯ã©ã¹
import php.runtime.Memory; import php.runtime.env.Environment; import php.runtime.lang.BaseObject; import php.runtime.reflection.ClassEntity; import static php.runtime.annotation.Reflection.*; @Name("php\\lang\\System") final public class WrapSystem extends BaseObject { public WrapSystem(Environment env, ClassEntity clazz) { super(env, clazz); } @Signature private Memory __construct(Environment env, Memory... args) { return Memory.NULL; } @Signature(@Arg("status")) public static Memory halt(Environment evn, Memory... args) { System.exit(args[0].toInteger()); return Memory.NULL; } }
JPHPã®æ°ãããã€ãã£ãã¯ã©ã¹ã®æ°ãå¢ããã«ã€ããŠãã¯ã©ã¹ã®ç»é²ã«ãããæéãé·ããªã£ãŠããããšã«æ°ä»ããŸããã æ¡åŒµæ©èœãšã¯ã©ã¹ãå€ããã°å€ãã»ã©ããšã³ãžã³ãèµ·åãããŸã§ã®é 延ã倧ãããªããŸãã æ°ã«ãªããŸããã ãããŠã¢ã€ãã¢ãæµ®ãã³ãŸãã-ãããä¿®æ£ããæ¹æ³ã
èšèªãšããŠã®PHPã«ã¯é 延ã¯ã©ã¹èªã¿èŸŒã¿ã¡ã«ããºã ãããã誰ããç¥ã£ãŠããŸãã ãã€ãã£ãã¯ã©ã¹ãç»é²ããããã«ãé 延ã¯ã©ã¹ããŒãã¡ã«ããºã ã䜿çšããŸããã ãã€ãã£ãJavaã¯ã©ã¹ãç»é²ããããšãååããŒãã«ã«ç»é²ãããã ãã§ããã®ã¯ã©ã¹ã®æåã®äœ¿çšæã«äºå®äžã®ç»é²ãè¡ãããŸãã ãã®ã¡ã«ããºã ãå®è£ ããããšã§ãè¯ãçµæãåŸããããšã³ãžã³ã®åæåæéã2ã3åã«ççž®ããããã¹ãæéã24ç§ãã13ç§ã«ççž®ãããŸããã ãã®ããããã€ãã£ãã¯ã©ã¹ã®æ°ã¯å®è³ªçã«ãšã³ãžã³ã®åæåé床ã«åœ±é¿ããŸããã
ãšã³ãžã³ã®èµ·åé床ã¯ãGUIã¢ããªã±ãŒã·ã§ã³ã§ã¯ç¹ã«éèŠã§ãã
JVMã§çºçããåé¡
1. JVMã¯ã©ã¹ã®åœåã JVMã¯ãã¯ã©ã¹ã®åœåæšæºãå®æœããŸãã ã¯ã©ã¹ãžã®ãã¡ã€ã«ãã¹ããã€ãã³ãŒãã§èšè¿°ãããšãJVMã¯Javaã®å Žåãšåæ§ã«ãã®ã¯ã©ã¹ã®ååããã§ãã¯ããŸãã ããã¯ãPSR-0æšæºãããé£æ³ãããŸãã ãã ããã¯ã©ã¹ãã°ããŒãã«jvmããã±ãŒãžã«é 眮ãããŠããå Žåããã®ãã§ãã¯ã¯è¡ãããŸããã PHPã¯1ã€ã®ãã¡ã€ã«ã«ä»»æã®æ°ã®ã¯ã©ã¹ãšé¢æ°ãæ ŒçŽã§ããä»»æã®ååãä»ããããšãã§ããŸãã ãã®ãããphpã¯ã©ã¹ã®ååãšãã€ãã³ãŒãå ã®JVMã¯ã©ã¹ã®ååã®ãã€ã³ãã£ã³ã°ã解ãå¿ èŠããããŸããã ããããããããã®éžæã®å¯äžã®çç±ã§ã¯ãããŸãã...
2.äžæã®ã¯ã©ã¹åã JPHPã¯ãåä¿¡ãããã€ãã³ãŒãããã¡ã€ã«ã«ä¿åããä»»æã®ç°å¢ã«ããŒãã§ããå¿ èŠããããŸãããããã£ãŠã競åãçºçããªãããã«ãjvmã¬ãã«ã®ãã¹ãŠã®ã¯ã©ã¹ã«äžæã®ååãä»ããå¿ èŠããããŸãã jvmãã€ãã³ãŒãã®ããŒãäžã«ã¯ã©ã¹åãå€æŽããããšã¯ã§ããŸãããå°ãªããšãç§ã¯ãŸã è©ŠããŠããŸããã çŸæç¹ã§ã¯ãåé¿çãšããŠãUVIDããŒã¹ã®JVM +ããã€ãã®ã©ã³ãã ãªã¯ã©ã¹åãçæããŠããŸãã ããã¯éåžžã«ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããšæããŸãããå°æ¥çã«ã¯ããè¯ããœãªã¥ãŒã·ã§ã³ãããã°ããã®ã§ããã ã¯ã©ã¹ãé 眮ãããŠãããã¡ã€ã«ã®ååã¯äœ¿çšã§ããŸããã ã³ãŒããã¯ã©ã¹ã«å«ãŸããŠããªãå¯èœæ§ãããããã€ãã³ãŒããã¡ã€ã«ãã³ã³ãã¥ãŒã¿ãŒããã³ã³ãã¥ãŒã¿ãŒã«è»¢éãããååãå€æŽãããå ŽåããããŸãã
3.åå°ã®å¶éã Javaãªãã¬ã¯ã·ã§ã³ã«ããã芪ã¯ã©ã¹ã®ã³ã³ããã¹ãã§ã¡ãœãããåŒã³åºãããšã¯ã§ããŸããã
super.call()
ãããªãã®ãããã³php
parent::
ã ãã¡ãããJava 7ã§ã¯invokeDynamicãå°å ¥ãããŸãããããã«ããããããè¡ãããšãã§ããŸããããªãã¬ã¯ã·ã§ã³ãããé©ãã»ã©é ãåäœããŸãã invokeDynamicã®æåŠã¯ãäž»ã«Java 7ã®ããã©ãŒãã³ã¹ã®äœäžãåå ã§ããããJava 8ã§ã¯ãã®åé¡ã¯è§£æ±ºãããé床ã¯åãã«ãªããŸããïŒããããæ£ããæºåããŠããªãã®ã§ããããïŒïŒã ããã«ãJava 6ãšAndroidãžã®ç°¡åãªé©å¿ããµããŒããããã£ãã®ã§ãinvokeDynamicã¯ååšããªããšæãããŸããããªãã¬ã¯ã·ã§ã³ããããŸãã
ç§ã¯ãã®åé¡ãããŸããšã¬ã¬ã³ãã«è§£æ±ºããŸããã§ãã.jvmã¯ã©ã¹ã®ã¡ãœãããåå®çŸ©ããããã®æšæºã¡ã«ããºã ãæŸæ£ããªããã°ãªããªãã£ããããjvmã¯ã©ã¹ã®ã¬ãã«ã§ç¶æ¿ãããã¡ãœããã®ååã¯ç°ãªããŸã-ã¢ã«ãŽãªãºã
method_name + $ + index
ã«åŸã£ãŠ ãã®ãããªè§£æ±ºçã§ã¯åé¡ã¯çºçãããçºçããŸããããäžèšã®åé¡ã¯è§£æ±ºããŸãã
ç¹æ§ã®å®è£ æ¹æ³
Traitsã¯ãããŒãžã§ã³5.4ããPHPã«å°å ¥ãããå€éç¶æ¿ã¡ã«ããºã ã§ãã åºæ¬çã«ãã³ããŒãšè²Œãä»ãã®ããã«æ©èœããŸãã JPHPå®è£ ãçºçããŸãããASTããªãŒãã³ããŒããã®ã§ã¯ãªããã³ã³ãã€ã«ããããã€ãã³ãŒããã³ããŒããŸãã ãã¡ãããJVMã«ã¯ç¹æ§ã¯ãããŸããããJPHPã¯ç¹æ§ãéåžžã®JVMã¯ã©ã¹ã«ã³ã³ãã€ã«ããç¹æ§ã®å¶éãå¶åŸ¡ããŸããããšãã°ãç¹æ§ãããªããžã§ã¯ããäœæããããç¹æ§ããç¶æ¿ãããããããšã¯ã§ããŸããã
ãããã£ãŠãå ã®ãœãŒã¹ããªããŠããJVMã§ã³ã³ãã€ã«ããããã€ãã³ãŒããç°¡åã«ç¹°ãè¿ã䜿çšã§ããŸãã JVMã¬ãã«ã§ã®ã³ããŒã«é¢ããŠè€éãªããšã¯äœããããŸãããASMã©ã€ãã©ãªã¯ããã«ç°¡åã«å¯ŸåŠã§ããŸãã å¯äžã®ããšã¯ãå Žæã«ãã£ãŠã¯éåžžã®ã¯ã©ã¹ãšã¯å°ãç°ãªããã€ãã³ãŒããçæããå¿ èŠãããããšã§ãã ããšãã°ãããã¯ç¹æ§ã®
__CLASS__
å®æ°ã§çºçããŸãã
trait Foobar { function test(){ echo __CLASS__; } } class A { use Foobar; } $a = new A(); $a->test();
éåžžã®ç¶æ³ã§ã®
__CLASS__
ã¯ãã³ã³ãã€ã«æã«
__CLASS__
å®æ°ããã³ãŒããé 眮ãããŠããã¯ã©ã¹ã®ååãæã€æååã«çœ®ãæããŸãã ãã¬ã€ãã§ãããè¡ãããšã¯ã§ããŸããããã¬ã€ãã§çºçããå Žåãå®è¡æã«ãã®å®æ°ã®å€ãåçã«èšç®ããå¿ èŠããããŸãã ãã ããç¹æ§ã®
__TRAIT__
å®æ°ã¯ãã¯ã©ã¹ã®
__CLASS__
ãšåãããã«
__CLASS__
ããŸãã ãŸããåŒ
self
ããã³
self::class
ãåŠçããå¿ èŠããããŸãã ããããã£ã®ã³ããŒã¯éåžžã«ç°¡åãªã®ã§ã説æããæå³ããããŸããã
Zendã©ã³ã¿ã€ã ã©ã€ãã©ãªã®ãªããã¢ãŠã
ããã§ãã©ã€ãã©ãªãšã¯ãæšæºã®PHPé¢æ°ãå«ãzend apiã䜿çšããŠCã§èšè¿°ãããæ¡åŒµæ©èœãæå³ããŸãã çŽ1ãæéãæååãé åãªã©ã®é¢æ°ãå®è£ ããŸããã PHPã®ããã«ãæãåä»ãªã®ã¯ãããã€ãã®é¢æ°ã®èª¬æãèªãã åŸã§ã1-2-3åå ¥åã§ããªãã£ãããšãåŒæ°ã«ããŸããŸãªãªãã·ã§ã³ãæž¡ããšã©ããªãããã©ã®ãããªçµæãåŸ ã€ãã§ãã phpã§ã¯ãé¢æ°ã¯æ®éçã§ãããèšå€§ãªéã®æ©èœã1ã€ã®é¢æ°ã«è©°ã蟌ãŸããŠããããããã®ãããªé¢æ°ã®å®è£ ãéåžžã«è€éã«ãªã£ãŠããŸãã
ããæç¹ã§ãããšãã°wordpressãsymfonyãJPHPã§èµ·åã§ãããããªã¬ãã«ã§ãããã®é¢æ°ãå®è£ ããŠããªãããšã«æ°ä»ããŸããããããŠãå€éšããã®ãããžã§ã¯ãã«å¯Ÿããæ 床ã¯æ¬¡ã®ããã«ãªããŸãã
ä¿å®çãªéçºè ïŒããã¹ãŠã®zendã©ã€ãã©ãªãå®è£ ãããšãã«ãwordpressãsymfonyãyiiããŸãã¯ãã®ä»ã®æåãªãããžã§ã¯ããå®è¡ã§ããªãã®ã«ããªãJPHPãå¿ èŠãªã®ãèããŠã¿ãŸãããããŸã§ã®éã¯ãHHVMãã芧ãã ãããã
ããã°ã¬ãã·ãéçºè ïŒãJPHPãå®è£ ããPHPã«ãŒãå šäœãšruntimeãã©ã³ã¿ã€ã ãäžè²«æ§ã®ãªããã¹ãŠã®é¢æ°ãšã¯ã©ã¹ãç¹°ãè¿ããŸããããªãããã«æéãè²»ããå¿ èŠãããã®ã§ããïŒã
Zend RuntimeãæŸæ£ããããšã¯éåžžã«è¯ãèãã§ããããšã«æ°ä»ããŸãããPHPã¯ãã«ãŒãã©ã³ã¿ã€ã ãã«ãŒããããã³äžè²«æ§ã®ãªãæ©èœã®ããã«ãã°ãã°scãããŸããããããŠãã©ã³ã¿ã€ã ãäœæããããšã決å®ãããŸãããäœãæ°ããããšãè©ŠããŠå®éšãããã¢ã¯ãã£ããªéçºè ã¯ããããžã§ã¯ãã«èãåããªãã§ãããã
Zend Runtimeã眮ãæããæ°ããæ©èœãšã¯ã©ã¹
php
ã°ããŒãã«ãªåå空éãè©°ãŸãããªãããã«ãJPHPã®ããã¯ã¹ããå¿ ãåºãŠãããã¹ãŠã®ã³ã¢ã¯ã©ã¹ãšé¢æ°ãå¥ã®åå空éã«å²ãåœãŠãããšã«ããŸããããã®äžã«ã¯æ¬¡ã®ãã®ããããŸãã
-
php\lang\Module
-includeããã³requireãªãã§ãœãŒã¹ãããŒãããããã®ã¡ã«ããºã ãïŒã€ã³ã¯ã«ãŒããªã©ïŒãã¡ã€ã«ãããŠã³ããŒãã§ããŸãããããã«å®è¡ããã®ã§ã¯ãªããããã°ã©ããŒã®èŠæ±ãããå Žåã«ã®ã¿å®è¡ã§ããŸããããã«ãã¯ã©ã¹ã¯ãã©ã®ã¯ã©ã¹ãšé¢æ°ãå éšã«ãããã«é¢ããæ å ±ãååŸããæ©èœãæäŸããŸãã圌ã¯ãä»»æã®Streamãªããžã§ã¯ããããœãŒã¹ãããŠã³ããŒãã§ããŸãã
ã¯ã©ã¹ãªãŒãããŒãã¡ã«ããºã ã®åºçŸã«ãããã¯ã©ã¹ããŒããŒãã³ãã©ãŒãé€ããincludeãšrequireã䜿çšããçç±ã¯ãããŸããã -
php\io\Stream
â fopen, fwrite, .. , typehinting , Stream , , .. -
php\lang\Thread, php\lang\ThreadGroup
â . , 2 . -
php\io\File
â , , File Java, - Java , , , , java Java
-
php\lang\Environment
ã³ãŒããµããŒããªãã·ã§ã³ãå®è¡ããããã®éé¢ãããç°å¢ïŒHOT_RELOAD
ãããã¹ã¯ããã³ãŒãããã³CONCURRENT
è€æ°ã®ã¹ã¬ããã§åãç°å¢ã䜿çšããããã
ãã®ãªã¹ãã¯ãŸã å®å šã§ã¯ãããŸãããé©åã«èããæéããªããããã¯ã©ã¹ã¯ã»ãšãã©ãããŸããã
JPHPãã¹ã
å€ãã®äººã¯ããã®ãããªè€éãªãããžã§ã¯ããã©ã®ããã«åç¬ã§è¡ãããšãã§ããéçºããŠãäœãå£ããªãã®ã§ã¯ãªãããšèããŠããŸããåäœãã¹ãã¯ããã®åé¡ãã»ãŒ100ïŒ è§£æ±ºããŸããããã°ã©ãã³ã°èšèªãšã³ãžã³ã®ãã¹ãã¯éåžžã«ç°¡åã§ãããã¹ãã®å¯Ÿè±¡ãšæ¹æ³ãããã«ç¢ºèªã§ããŸãã
æåã¯èªåã§ç°¡åãªãã¹ããäœæããŸããããåœæã¯èšèªã®è€éãªzendãã¹ãã䜿çšã§ããŸããã§ãããããããJPHPãé²åããã«ã€ããŠãPHPèªäœã®ãœãŒã¹ã³ãŒãã«ããzendãã¹ããåŸã ã«å°å ¥ãå§ããŸããããŸãããã¹ãã§ã¯ãµãŒãããŒãã£ã®æ©èœã䜿çšãããŠãããããå®å šã§ã¯ãªããä¿®æ£ããå¿ èŠãããå ŽåããããŸãããããªãã¯ç解ããã§ããããããã«äŸããããŸãïŒãã¹ãã®ããã®ãã¹ã
set_error_handler
ãé¢æ°ã¯ãã¹ãå ã§äœ¿çšãããŸã
fopen
ãç§ã®æèŠã§ã¯ãããã¯éåžžã«ééã£ãŠããŸãããªãæ¡åŒµæ©èœã¯èšèªã®åºæ¬éšåã®ãã¹ãã«åå ãã¹ããªã®ã§ããããïŒå žåçãªzendãŠããããã¹ãã¯ã次ã®ãããªããã€ãã®ã»ã¯ã·ã§ã³ã§æ§æãããŠããŸãã
ç¹æ§ã®åäœãã¹ã
ããªããèŠãããšãã§ããããã«ãããã€ãã®ã»ã¯ã·ã§ã³ããããŸãïŒ
ã
ã
-ãã¹ãã®èšè¿°ã¯ãã³ãŒããå®è¡ãããšããã®çµæã¯ãšæåŸ ãããŠããŸãã
--TEST-- Use instead to solve a conflict. --FILE-- <?php error_reporting(E_ALL); trait Hello { public function saySomething() { echo 'Hello'; } } trait World { public function saySomething() { echo 'World'; } } class MyHelloWorld { use Hello, World { Hello::saySomething insteadof World; } } $o = new MyHelloWorld(); $o->saySomething(); ?> --EXPECTF-- Hello
ããªããèŠãããšãã§ããããã«ãããã€ãã®ã»ã¯ã·ã§ã³ããããŸãïŒ
--TEST--
ã
--FILE--
ã
--EXPECTF--
-ãã¹ãã®èšè¿°ã¯ãã³ãŒããå®è¡ãããšããã®çµæã¯ãšæåŸ ãããŠããŸãã
Zendãã¹ãã®å©ããåããŠãç¹ã«OOPã§ã®èšå€§ãªæ°ã®ãã°ãšPHPèšèªãšã®ççŸãä¿®æ£ããããšãã§ããŸããïŒãããŠãä¿¡ããããªãã»ã©ã®å€ãã®åäœïŒãç¹æ§ãzendãã¹ãã®å®è£ ã䜿çšããŠå®è£ ãããŸããããã®ãããªæ©èœãå®è£ ãããããšãæžãããšããjphpããã³zendãŠããããã¹ãã«åæ Œããããšãæå³ããŸãã
AndroidãšDalvik
Dalvikã¯JVMãšã¯ãŸã£ããç°ãªãã¿ã€ãã®ä»®æ³ãã·ã³ã§ãããç°ãªããã€ãã³ãŒã圢åŒã§å®è¡ãããããèªäœãã¹ã¿ãã¯ã§ã¯ãªãã¬ãžã¹ã¿ã§ããJPHPã¯JVMãã·ã³çšã®ã³ã³ãã€ã©ã§ãããåœç¶ãDalvikãšäºææ§ã®ãªããã€ãã³ãŒããã³ã³ãã€ã«ããŸãããã ããGoogleã¯JVMãã€ãã³ãŒããDalvikãã€ãã³ãŒãã«å€æããèå³æ·±ããŠãŒãã£ãªãã£ãéçºè ã«èŠªåã«æäŸããŠãããŸãããJRubyã®Rubotoãããžã§ã¯ãããããŸããããã¯ã¬ã€ãã©ã€ã³ã«ã圹ç«ã¡ãŸã-ã©ããžè¡ããã
Androidã¯ç¢ºãã«ææãªåéã§ãããJPHPããã®ãã©ãããã©ãŒã ã«ç§»æ€ããæãæ¥ããŸã§ã¯ããããžã§ã¯ããããŒãžã§ã³1.0ã«éããŠåããŠå®å®ããããã«ãªã£ããšãã®ã¿ãç§ã¯ãããçã«ããªã£ãŠãããšæããŸãã
次ã¯ã©ããžè¡ããŸããïŒ
WEB
ã¯ããå¯èœã§ãã JPHPã䜿çšãããšãNode.jsãRubyããã®ä»ã®èšèªã§èšè¿°ãããŠããæ¹æ³ãšåæ§ã«ãWebãµãŒããŒãå®å šã«phpã§èšè¿°ã§ããŸããåæã«ãããã«äœ¿çšã§ããã³ãŒãããããã¹ã¯ããããããã®ãæè»ã§ã«ã¹ã¿ãã€ãºå¯èœãªããããªããŒãã¢ãŒããæäŸããŸãã
JPHPã䜿çšãããšãéåžžã«çç£çãªãµãŒããŒãäœæããŠãèŠæ±éã§å ±æã¡ã¢ãªã«ã¢ã¯ã»ã¹ããã¡ã«ããºã ãæäŸã§ããŸããããã«ããããŸã£ããç°ãªãèšç»ã®phpãã¬ãŒã ã¯ãŒã¯ãäœæã§ããŸãã Phalconã®ããšãèããããšããããªããããã¯äŒŒããããªãã®ã§ãCã§ã®ã¿æžãããŠããŸãã JPHPã¯ãCãŸãã¯C ++ã®è€éãªæ¡åŒµãšããŠã§ã¯ãªããè€éãªããžãã¯ãPHPã§ã®é«ãããã©ãŒãã³ã¹ãåããããã®ãããªãã¬ãŒã ã¯ãŒã¯ãäœæããæ©äŒãæäŸããŸããæåŸã®æ段ãšããŠãããã«ããã¯ã®Javaæ¡åŒµæ©èœãäœæã§ããŸããããã¯ãCãŸãã¯C ++ã§æ¡åŒµæ©èœãäœæãããããã¯ããã«ç°¡åã§ãã
GUI
ã¯ããå€ãã®äººããã¹ã¯ãããããªãã«æžããŸãããªããªãããã¹ãŠããŠã§ãã«è¡ããŸãããããããã®åéã¯äŸç¶ãšããŠé¢é£ããŠãããéèŠããããŸããJPHPã䜿çšãããšãGUIã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããæ¢ã«èš±å¯ãããŠããŸããSwingã«ã¯æ¡åŒµæ©èœããããå°æ¥çã«ã¯HTML5ããã³CSS3ããµããŒãããJavaFXã«ã衚瀺ãããå¯èœæ§ããããŸãã
Android
ãã¡ãããããã¯ãŸã é ãèŠéãã§ãããããã§ããããã«ãJPHPã¯ãRaspberry Piãªã©ãOracle VMãååšããARMããã€ã¹ã§æ¢ã«å®è¡ã§ããŸãã
ãããã«
PHPã¯ããæ°ãŸãããªæ£è ã§ããããšãå€æããŸããããæçµçã«æäœã¯æåããŸãã=ïŒãå€ãã®ãµãŒãããŒãã£éçºè ã¯ãã®èšèªã奜ãŸãªãããšããã°ãã°æ¹å€ãããããšãç解ããŠããŸãããå察åŽãããã®èšèªãèŠã䟡å€ããããŸããäœãã®ããã³ããšã³ãã§ãããããã¿ã€ãããã°ããäœæããæ©èœãã¹ããäœæããããã«é »ç¹ã«äœ¿çšããå¿ èŠãããå Žåãç§èªèº«ã¯PHPã䜿çšããŸãã
ãæž èŽããããšãããããŸããã