ããããå ãPHPã§æŠãããã«ããªã«ã䜿ãããªã«ãåŠã¶ã¹ãã - 廣å·é¡ã«èãPHPåŠç¿ã«å€§äºãªããš
Webã¢ããªã±ãŒã·ã§ã³éçºèšèªãšããŠåºã䜿ãããPHPã黿æããæµžéããŠãããŸã§ã®éçšããããŠãããããå ãPHPãæŽ»çšããŠããããã«å¿ èŠãªããšãããšãã¹ããŒãã®å»£å·é¡ããã«èããŸããã
æ¬èšäºã¯2020幎3æã«å®æœããé éåæãããšã«æ§æããŠããŸãã
1995幎ã®å ¬é以éãPHPã¯å€ãã®äŒæ¥ããµãŒãã¹ã§æ¡çšããããšã³ã·ã¹ãã ãæ¡å€§ããŠããŸãããèšèªã®æŽå²ã«æ¯äŸããããã«ãããŸããŸãªãµãŒãã¹ã®ãªãã§ç©ã¿éãªã£ãŠããPHPã®ã·ã¹ãã ããããã«ããŠæç¶/çºå±å¯èœãªãã®ãšãããããããããå€ãã®PHPãŠãŒã¶ãæããçåããšãã¹ããŒãã«ã¶ã€ããŸãã
ä»åã話ã䌺ã£ã廣å·é¡ïŒ ã²ãããã»ãã ïŒããã¯ãæ¬æ¥ã¯å¶åŸ¡é¢é£ã®ãšã³ãžãã¢ã§ãããPHPãžã®é¢ããã¯ãããããŸã§åäººã®æŽ»åããšè¡šçŸããŸãããããããã®æŽ»åã¯è¶£å³ã®ç¯å²ãè¶ ããæ¥æ¬PHPãŠãŒã¶äŒã®ç«ã¡äžããããŸããŸãªäŒæ¥ã®PHPã«ãŠã³ã»ãªã³ã°ãªã©ãPHPã®æèãšååãçŽèŠããŠããŸãããçŸç¶ãèã§ç¥ããšãã¹ããŒãã«ãããããã®PHPã®çåæŠç¥ã䌺ããŸããã
å»£å· é¡ããïŒã²ãããã»ããïŒ
- ã€ã¶ãã«èŠãŠãããæ¥æ¬ã®PHPã³ãã¥ããã£ã®èªçãšæé·
- èªåã§éçºãããã®ãäžçã«çºä¿¡ãããPHP4ãå©çšè ã®æèãå€ãã£ãPHP5.3/5.4
- é ãïŒæ©èœãäžååïŒPHPããããè³åŠã®æè
- PHPãæ±ããã®ã¯å éçãªæ©èœã§ã¯ãªããéçºè ã»ãŠãŒã¶ã®å©äŸ¿æ§ââRasmusã®ç念
- ä»çµã¿ãèªåã§çè§£ããæèããããŠãã€ãã«æ¥œããå¿ãããã°ã©ãã«ã¯ãããæ±ãããã
- ãã¬ãŒã ã¯ãŒã¯ãã©ã®ãããªèŠç¹ã§éžã¶ã¹ãã
- 次æããŒãžã§ã³ãPHP8ã¯ã©ããªãïŒ
- ããããPHPããã°ã©ãã³ã°ãå§ããæ¹ãã¡ãž
ã€ã¶ãã«èŠãŠãããæ¥æ¬ã®PHPã³ãã¥ããã£ã®èªçãšæé·
ââãŸãã¯å»£å·ãããšããã°ã©ãã³ã°ããããŠãPHPãšã®åºäŒãã«ã€ããŠæããŠãã ããã
廣å·ãç§ã¯ããšããšãWebããã°ã©ãã§ã¯ãªããèªç©ºå®å®ç³»ã®å¶åŸ¡é¢é£ã®éçºããããšã³ãžãã¢ã§ããã
ãããŠãæåã®ããã°ã©ãã³ã°ãšã®åºäŒãã¯ãã€ã³ã¿ãŒããã1996ã¯ãŒã«ããšãã¹ããžã·ã§ã³1ã®éå¬ã«äŒŽã£ãŠè¡ãããNTTã®åç·ã®ãã£ã³ããŒã³ã§ããããã®ãã£ã³ããŒã³ã§ã¯NTTã®ã€ã³ã¿ãŒãããåç·ã䜿ããç¹å žããããä»ã§èšãé£ã¹ãã°ã®ãããªå£ã³ãæ å ±ãæ±ããµãŒããç«ã¡äžããã®ãæåã ã£ããšæããŸãããã ãåœæã¯PHPã§ã¯ãªããPerl CGIïŒMini SQLïŒNCSA httpdã«ããWebïŒDBãµãŒãã§æ§ç¯ããŸããã
ãã®åŸãè² è·ãé«ããªãæµ·å€ã®ãµãŒããžã®ç§»è¡ãèããããã«ãªã£ãã®ã§ãããåœæã®FreshmeatïŒçŸFreecodeïŒãšããæ å ±ãµã€ãã§PHP/FIïŒForm InterpreterïŒããããŠãåºå§ããããã®MySQLã®ååšãç¥ããç§»è¡ããã®ããç§ãåããŠPHPã«è§Šãããã£ããã§ãã
ââ廣å·ãããšPHPã®é¢ããæ¹ã¯ãåºäŒãããä»ãŸã§ããã£ãšå人掻åãšããŠç¶ããŠããããã§ãããæ¥æ¬ã§ã¯ããã®åŸã2000å¹Žã«æ¥æ¬PHPãŠãŒã¶äŒãç«ã¡äžããã廣å·ãããèªèº«ãçºèµ·äººã®äžäººãšããŠé¢ãããŸããããã®åœæã®åœå ã®PHPçéã®æ§åã«ã€ããŠæããŠãã ããã
廣å·ãç§ãPHPãšåºäŒã£ãããã¯ãããã€ãã®å€§åŠãäŒæ¥ã§åŸã ã«ã€ã³ã¿ãŒããããæŽ»çšããå§ãããããã°é»ææã§ããŸã PHPïŒPHP/FIïŒã«é¢ããæ¥æ¬èªã®æ å ±ã¯å°ãªãã£ãã§ããã
ã§ããããèªåã®å匷ãšèª¿æ»ãå ŒããŠãæµ·å€ã®ããã¥ã¡ã³ã翻蚳ãã¹ã¿ãŒãããã®ã§ããããã£ããèš³ããã®ã ãããWebã§å ¬éãããã§ããããããæŽ»åããä»ã«ããããŸã§ã®èªåã®ç€ã«ãªã£ãŠãããšæããŸããPHP/FIã«éãããMySQLãã»ãšãã©æ å ±ããªãã£ãã®ã§ãåãããã«æ¥æ¬èªæ å ±ãå ¬éããŠãããŸããã
ââæ å ±ãç¬ãå ããããããšã¯èããªãã£ãã®ã§ããã
廣å·ãç§èªèº«ãå€§åŠæä»£ããæ°å€èšç®ãæé©åã«é¢ããåéãå°æ»ããäžã§ã€ã³ã¿ãŒãããã«è§Šããæ©äŒãå€ããåœæããã€ã³ã¿ãŒãããã«æ ¹ä»ããŠããããªãŒãœãããŠã§ã¢ã®æåã«ã¯èŠªãã¿ããããŸãããã§ãããæ å ±å ¬éã«æµæã¯ãããŸããã§ããããåãåãããæ¥ããšãã«å¯Ÿå¿ããããšãã£ãåæ¹åã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ãããã«éŠŽæããŸããã
ââæ¥æ¬ã®PHPã³ãã¥ããã£ã¯ã©ã®ããã«åœ¢æãããŠãã£ãã®ã§ããããã
廣å·ã1998ïœ1999幎ããæ¥æ¬ã§LinuxããŒã ãèµ·ãããã®åœ±é¿ããLinux以å€ã®OSSãå«ããŠã€ãã³ããã«ã³ãã¡ã¬ã³ã¹ãéå¬ãããããã«ãªããŸãããããããæµããããPHPã«èå³ãæã£ããšã³ãžãã¢ã»ããã°ã©ããéãŸãã2000幎4æã®æ¥æ¬PHPãŠãŒã¶äŒèšç«ã®å¥æ©ãšãªããç³äºé倫ãããå ç°å«è±ããã«ãäŒãããŠããã³ã¢ã¹æ¬ïŒãPHP4åŸ¹åºæ»ç¥âWebãšããŒã¿ããŒã¹ã®é£æºããã°ã©ãã³ã°ïŒãœãããã³ã¯ã¯ãªãšã€ãã£ã/2000ïŒãã®éç§°ïŒã®å·çãžãšã€ãªãã£ãŠãããŸããã
ããããŠæ¯ãè¿ã£ãŠã¿ããšãWebéçºèšèªã§ããPHPã¯ãç§ã«ãšã£ãŠã€ã³ã¿ãŒãããã®æåãšãšãã«æé·ããŠãããšæããŸããããŸããPHPã³ãã¥ããã£ã¯OSSã³ãã¥ããã£ãéžæãããŠããéçšãšéãªãããã«æããŸãã
èªåã§éçºãããã®ãäžçã«çºä¿¡ãããPHP4ãå©çšè ã®æèãå€ãã£ãPHP5.3/5.4
ââPHPã®èšèªã®é²åãã€ã¶ãã«èŠãŠããããŠãèšèªãšããŠã®PHPã®å°è±¡ãã¿ãŒãã³ã°ãã€ã³ããšæããããšãããã°æããŠãã ããã
廣å·ãèªåèªèº«ãéçºã«é¢ãã£ããšããç¹ã§ãæãèšæ¶ã«æ®ã£ãŠããã®ã¯PHP 4ã®ãªãªãŒã¹ã𿥿¬èªå¯Ÿå¿ã§ããPHP/FIããããŠPHP 3ãšãªãªãŒã¹ãç¶ããŠããããŸããããæ¥æ¬èªå¯Ÿå¿ã¯æ£åŒã«è¡ãããŠããŸããã§ãããããã§ãèªåã§äœã£ãŠã¿ãããšãjstringãšããPHPã§æ¥æ¬èªã®ãããªãã«ããã€ããæ±ããæ©èœãéçºãå§ããŸããã
ãããŠãPHP 4ã®ãªãªãŒã¹ã®ã¿ã€ãã³ã°ã«ãªããPHPã®çã¿ã®èŠªã§ããRasmus LerdorfïŒ
ââåœå ã®PHPãŠãŒã¶ã«ãã€ã³ãã¯ãããã£ãã§ããããã
廣å·ãèªåãéçºãããã®ããäžçã«åºãããçºä¿¡ã§ãããšããã®ã¯ãšã³ãžãã¢å¥å©ã«å°œããŸãããåœæãæ¯ãè¿ããšãããªãã®æéããããŠPHPã®éçºã«ã³ãããããŠããŸããããïŒçºå±éäžã®èšèªã ã£ããããã«ïŒPHPã®éçºãçŽç²ã«æ¥œããã§ããŸããã
æ¥åã§é¢ãã£ãŠããå¶åŸ¡ç³»ã»èªç©ºå®å®ç³»ã®éçºã¯ãæéããããã£ããåãçµãã±ãŒã¹ãå€ãã£ãã®ã§ãPHPãWebã®äžçã®ã¹ããŒãæã¯ãŸã£ããå¥ç©ã§ããããã®éããçµéšã§ããããšã¯ããšã³ãžã㢠/ ããã°ã©ããšããŠã®èªåã«éåžžã«ãã圱é¿ããã£ãããã«æããŸãã
ââéçºãšãšãã«èšèªã®æé·ããèªèº«ã®æé·ãšç §ããåãããŠæ¥œããŸããŠããã®ãäŒãããŸãã廣å·ãããèªèº«ãåããŠPHPã«ã³ããããããã®ã¯ã©ããã£ããã®ã§ããïŒ
廣å·ãæ¬åœã®æåããšããããšã§ããã°ãPHP Manualã§ããä»ãPHP.netã«ãããŸããç§ãããã¥ã¢ã«ã®å¶äœã«é¢ãã£ããšãã¯ãA4ãµã€ãºã§800æçšåºŠã®æ å ±éã ã£ããšèšæ¶ããŠããŸããä»ã¯ã©ã®ãããã§ããããâŠâŠãèå³ã®ããæ¹ã¯ãã²ç®ãéããŠã¿ãŠãã ããã
ä»ã«ã¯ãåè¿°ã®mbstringã¯ãæåæããéçºã«ã³ãããããŠããŸãããä»ãGitHubãªããžããªã®ã³ã³ããªãã¥ãŒã¿ãšããŠå€§éšåã«é¢ãã£ãŠããŸãã
é ãïŒæ©èœãäžååïŒPHPããããè³åŠã®æè
ââãšããã§ãPHPãšãããšä»ã®èšèªãšã®æ¯èŒãããããã®è³åŠãããã©ãè°è«ãããŠããå°è±¡ããããŸãã廣å·ãããèªèº«ã¯ãªã«ããæèŠã¯ãããŸããã
廣å·ããã£ããããšãããæ¥æ¬ã§ã¯ãPerl / Ruby / PythonãšäžŠãã§4倧LLïŒLightweight LanguageïŒãšããèŠç¹ã§æ¯èŒãããææããããŸããããŸããèšèªãšããŠã®ãã³ãããŒã¯ãé ãææã確ãã«ãã£ãã®ã§ãå®è¡é床ã«é¢ããŠã¯è°è«ãåŒã³ãããã£ãã®ã§ã¯ããšæããŸãã
PHP4ãç»å Žããããã¯ããšãã«PHPã®å®è¡é床ã®é
ããææãã声ãèããå°è±¡ããããŸãããã®åŸã®PHP 4.3ã§ãã³ã¢éçºè
ã§ããAndrei ZmievskiïŒ
ããã§ãAndi GutmansïŒ
ãã ãå®è¡é床ã®åªå£ã«é¢ããŠã¯èšèªã ãã§çµè«ã¥ããã®ã¯é£ãããšæããŸããCPUãªã©ããŒããŠã§ã¢ã«é©ããèšèªã¢ãŒããã¯ãã£ã§ãããã©ããââãããéåžžã«éèŠãªèŠç¹ã§ãããããŒããŠã§ã¢ããèªäœãé²åã»å€åããŠããã®ã§ãäžå®æ¡ä»¶ã®ã¿ã§èšèªã®åŠçé床ãè°è«ããããšã¯ãããã»ã©å€§åã§ã¯ãªããšèããŸãã
ãŸããå®éã®ãŠãŒã¹ã±ãŒã¹ãèãããšãããã°ã©ãã³ã°èšèªã®åŠçé床ãããããã®èšèªã䜿ã£ãã·ã¹ãã å šäœã®åŠçéåºŠã®æ¹ãéèŠã§ãããã®ããã«ã¯ãWebãµãŒããDBãµãŒããããã«ããã®äžã«ããã¢ããªã±ãŒã·ã§ã³ã®ãã¥ãŒãã³ã°ãªã©ãå šäœã§ã®æé©åãé«éåã«ç®ãåããã¹ãã§ãããã
ââæ©èœé¢ã§ã®è°è«ãéããããŠããå°è±¡ããããŸãã
廣å·ãPHPã«ã¯ãªããžã§ã¯ãæ©èœãåå空éãªã©ã®çŸä»£çãªããã°ã©ãã³ã°èšèªãåããŠããã¹ãæ©èœããµããŒããããŠããªãããšããé¡ã®æèŠãããèããŸããããPHP 5ã§ã¯ãªããžã§ã¯ãæ©èœãå€§å¹ ã«åŒ·åãããŠããŸãããã®åŸãPHP 6ãšããŠãªãªãŒã¹ãããäºå®ã ã£ãæ©èœããPHP 5.3 / 5.4ã§ããã¯ããŒãã®åœ¢ã§ãªãªãŒã¹ããããªã©ãèšèªãšããŠæçãããšãšãã«ãæ©èœçã«å£ã£ãŠãããšãã声ãèããªããªããŸããã
ââPHP 5.3 / 5.4ã§ã¯å ·äœçã«ã©ã®ãããªæ©èœã远å ãããã®ã§ããããã
廣å·ãPHP 5.3ã§ã¯ãåå空éãã¯ããŒãžã£ããªããžã§ã¯ãåŠçããã³ãªããžã§ã¯ãæåãªã©ãå®è£ ãããPHP 5.4ã§ã¯ãçµã¿èŸŒã¿WebãµãŒãã远å ãããŸããããããããããã°ã©ãã³ã°èšèªãšããŠå¿ èŠãªèŠçŽ ãæŽã£ãããã§ãã
ââããŒãžã§ã³ãç©ã¿éãªã£ãŠãããšãèšèªãšããŠã¯æŽç·ŽãããŠããŸãããåæã«ãŠãŒã¶ã«ãšã£ãŠã¯ã¬ã¬ã·ãŒåã®æžå¿µããããŸãã
廣å·ãã¬ã¬ã·ãŒåã®æžå¿µãšã¯ãæ§ããŒãžã§ã³ã®æ±ãã®ããšã§ããããã確ãã«ãé·æã§éçšããŠãããµã€ãããµãŒãã¹ã§ã¯ãããŸã ã«PHP 4ç³»ã5ç³»ã§åããŠãããã®ã倿°ãããŸãããããŠããããã®ããŒãžã§ã³ããã§ã«ãµããŒããçµäºããŠããŸãã
PHPã®ç¹åŸŽã®1ã€ã«ããµããŒããçµãããšãéçºåŽã§ã¯ãã¹ãŠå¯Ÿå¿ããªããªãç¹ãæããããŸããä»ã®èšèªã§èŠãããLTSïŒLong Term SupportïŒã®èãæ¹ã¯PHPã«ã¯ãªããã¢ããããŒããããšãå€ãããŒãžã§ã³ã®ãµããŒããçµããŸãã
ã§ãããããŠãŒã¶èªèº«ã責任ãæã£ãŠå¯Ÿå¿ããŠãããªããã°ãªããŸããã人ããããã§ã¯ãããŸããããµããŒããšããäœæ¥ã¯ãæ°èŠã®éçºã«æ¯ã¹ãŠã¢ãããŒã·ã§ã³ãäžãã¥ããã®ã§ãæ°ããããŒãžã§ã³ãåºãå Žåãã¢ããããŒãããŠããããšã1ã€ã®èãæ¹ã ãšç§ã¯æã£ãŠããŸãã
ããã§ããããšãã°ãå®è¡é床ã«é¢ããŠèšãã°PHP 4ããPHP 7ã®ã»ããæ Œæ®µã«æ©ãã«ãããããããã¢ããããŒãã§ããªãäºæ ããããµãŒãã¹ããããã¯ããããã§ãããããã®å Žåã¯ããããã¯ããªãŒããŒãªã©ã®è²¬ä»»è ãæ©ãã«æéãæ±ºãããã®å ãèããå¿ èŠãããã§ãããã
PHPãæ±ããã®ã¯å éçãªæ©èœã§ã¯ãªããéçºè ã»ãŠãŒã¶ã®å©äŸ¿æ§ââRasmusã®ç念
ââä»ã®ã話ãèããŠãPHPã¯ããã°ã©ãã³ã°èšèªãšããŠçªãè©°ãããšããããã¯ã䜿çšãããç¶æ³ããŸããéçºãæ ãããã°ã©ãã«ãšã£ãŠæé©ãªçµæãæäŸããããã®ããã°ã©ãã³ã°èšèªãšããŠãéçºãé²åããŠãããããªå°è±¡ãåããŸããã
廣å·ããŸãã«ãã®ãšããã§ããPHPã¯éçºè ã§ããRasmusã®é ã®äžãã®ãã®ãšèšã£ãŠããããããããŸããããRasmusãç®æããã®ã¯ããŠãŒã¶ã«ãšã£ãŠããã«äŸ¿å©ã§ãããããã®äžç¹ã§ããã§ãããããéçºããããããæ±ããããããšãã£ãããŒã¯ãŒããããšã«æ©èœã远å ãããŠããŸãããçŸåšã§ã¯ãŠãŒã¶ãå¢ããå€§èŠæš¡ãªãœãŒã¹ã³ãŒããæ±ããèšèªã«ãªããå€ãã®éçºè ãé¢ããããã«ãªããŸããããRasmusã®ææ³ã¯èžè¥²ãããŠããŸãã
ãããŠãéçºåœåã®ç®çéããPHPã¯Webã«ç¹åããŠãããããããã¬ãã«ç¶ç¶ãããŠããææ³ã§ãããã£ãšãããã®ææ³ã倧äºã«ããŠãããããWebéçºä»¥å€ã®ç®çãããšãã°ãæ©æ¢°åŠç¿ã ã£ãããå€§èŠæš¡ãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã«ã¯åããŸãããPythonãJavaãªã©ãçšéããšã«é©ããä»ã®èšèªããããŸãã®ã§ããã¡ãã䜿çšããã¹ãã§ãããã
ä»çµã¿ãèªåã§çè§£ããæèããããŠãã€ãã«æ¥œããå¿ãããã°ã©ãã«ã¯ãããæ±ãããã
ââPHPã®æŽå²ã蟌ããããææ³ãããããããŸãããã§ã¯ãããã°ã©ããšããŠPHPãåŠã¶ã¹ããšãã«æèããããšãæããŠãã ããã
廣å·ãç¹°ãè¿ãã«ãªããŸãããPHPã¯Webã«ç¹åããããã°ã©ãã³ã°èšèªã§ãã®ã§ãWebéçºãšããç®çã§äœ¿ã£ãŠãããããšã倧åæã§ãã
ãã®ããã§ãç§ããããŸã§ã©ã®ããã«åŠãã§ãããããŸããä»ãã©ã®ããã«åŠãã§ããããã話ããŸããåè¿°ã®éããç§ãPHPã«è§Šããå§ããããã¯æ¥æ¬èªæ å ±ããŸã£ãããªããè±èªã®ããã¥ã¡ã³ããããã¥ã¢ã«ãèªã¿ãªãããèšèªã®èšè¿°ãåŠã³ãŸããã
ä»ã¯å€ãã®ã¡ãã£ã¢ãåºç瀟ãéçºè ã®å°œåã§è±å¯ãªæžç±ãæç®ããããŸãããããŸãã¯ããããã£ããã®ãèªãããšãããã§ãããåããŠã§ããã°ãåå¿è åãã®è§£èª¬æžããã1ã€èžã¿èŸŒãã§ã¿ããã®ã§ããã°ãPHPã®ããã¥ã¢ã«ãèªã¿ããããããšããªã¹ã¹ã¡ããŸãã
ãããŠãããã«PHPã«ã€ããŠç¥ããããåŠã³ãããšããããšã§ããã°ãä»ã®æ¹ãæžããã³ãŒããèªãã®ãè¯ãã®ã§ã¯ãªãã§ããããã ããšãã°ãPHP Conferenceãšãããæ¥æ¬å šåœã®PHPerïŒPHPããã°ã©ãïŒãäžå ã«äŒããã€ãã³ãããããŸãããããã§çºè¡šãããŠããå 容ãè³æãèŠãããšãè¯ãã§ãããã
ââããæ·±ãPHPãåŠãŒããšæã£ãããã©ã®ãããªã¢ãããŒããããã§ããããã
廣å·ãPHPã®èšèªãšããŠã®ç¹æ§ã«ã€ããŠæ·±ãç¥ããããã¢ãŒããã¯ãã£ãåŠã³ãããšããããšã§ããã°ã2ã€æ¹æ³ããããŸãããŸãã¯ãPHPã«ä»å±ãããŠãããã¹ãã³ãŒãã»ãã¹ããã³ãããèªåã§å®è¡ããããšã§ãããšãã«PHPçšã®ãããã¬ãªã©ã䜿ã£ãŠãã¬ãŒã¹å®è¡ããªããåããŠããã³ãŒãã®æ§åãèŠãããšã¯ãèšèªã®è£åŽãèŠãããšãã§ããŸãã
âŒã¢ã«ãŽãªãºã ç³»ã®ã³ãŒããµã³ãã«ã ãã£ããããæ°åïŒZend/tests/generators/fibonacci.phptïŒ
<?php
function fib() {
list($a, $b) = [1, 1];
while (true) {
yield $b;
list($a, $b) = [$b, $a + $b];
}
}
foreach (fib() as $n) {
if ($n > 1000) break;
var_dump($n);
}
ãã1ã€ã¯ãWebäžã«ããããŸããŸPHPé¢é£ã®æ å ±ã§ããããšãã°ãPHP Internals Book ã¯ãPHPã®ã³ã¢éçºè ãäž»ã«é¢ãã£ãŠãããå éšã¢ãŒããã¯ãã£ãç¥ãããã§å€§å€åèã«ãªããŸãã
ââãªãã»ã©ããªã«ãã©ã®ããã«åããŠããã®ããç¥ãããšãéèŠãªã®ã§ãããããã§ã¯ãããå°ã俯ç°ãã質åã§ãããã°ã©ããšããŠå¿ èŠãªè³è³ªãèãæ¹ãããã°æããŠããããŸããã
廣å·ããããŸã§ç§å人ã®èãæ¹ã§ãããããã°ã©ãã«ã¯2çš®é¡ã®ã¿ã€ãããããšæããŸãããŸããç®çã解決ããããã«ããšã³ãžãã¢ã®åœ¹å²ãšããŠããã°ã©ãã³ã°ãè¡ãã¿ã€ããæ¬¡ã«ãããã°ã©ãã³ã°ãã®ãã®ã«èå³ãæã€ãããã°ã©ãã³ã°ããçµæã«å¯Ÿãããã®ããã»ã¹ãä»çµã¿ã«èå³ãæã€ã¿ã€ãã§ãã
ç§ã¯æ¥åã§PHPã䜿ã£ãŠããããã§ã¯ãªããPHPã«å¯ŸããŠã¯åŸè ã®èãæ¹ã§è§Šãç¶ããŠããŸãããPHPã®ä»çµã¿ãžã®èå³ãæã¡ãå®éã«ã³ãŒããèªã¿ãªããåŠãã§ããŸããããšãã«ããã¥ã¢ã«ãééã£ãŠããŠå ã«é²ãŸãªãããšããããŸãããïŒç¬ïŒãèå³ã®ãããããŸãŸã«åãçµãã§ããããšã§ãããæ·±ãçè§£ãåŸãããããã«æããŸãã
ã©ã¡ãã®ã¿ã€ããè¯ããæªããšããããšã§ã¯æ±ºããŠãããŸããããããã°ã©ãã³ã°ã«å¯ŸããŠããŸãä»çµã¿ãåŠã¶æèããããŠãèå³ãæã£ãŠæ¥œããããã©ãããããã¯ãšã³ãžãã¢ã»ããã°ã©ããšããŠãšãŠãéèŠãªè³è³ªã§ã¯ãªãã§ããããã
ãã¬ãŒã ã¯ãŒã¯ãã©ã®ãããªèŠç¹ã§éžã¶ã¹ãã
ââæ¬¡ã«ãå°ãè¶£åãå€ããŠã廣å·ããã2020幎ã®ä»ããªã¹ã¹ã¡ã§ããPHPãã¬ãŒã ã¯ãŒã¯ãããã°æããŠãã ããã
廣å·ãå ã»ã©ã®çããšã€ãªããã®ã§ãããç§ã¯ããšããšãä»çµã¿ãžã®èå³ããPHPã«è§ŠããŠããŸãããã§ãããããããªã質åãæœ°ããŠããŸãããã§ãããå®ã¯ãã¬ãŒã ã¯ãŒã¯ãããŸã奜ãã§ã¯ãããŸããïŒç¬ïŒããã¬ãŒã ã¯ãŒã¯ã¯ãç®çã«å¯ŸããŠå¹çåãæ±çšæ§ãé«ããããŒã«ã§ãããä»çµã¿ãåŠã¶ããã®ãã®ã§ã¯ãªããçããæçè·é¢ã§èŠã€ããããã®ãããã¯ãã ããã§ãã
æè¿ã§ã¯å€ãã®PHPãã¬ãŒã ã¯ãŒã¯ããããéåžžã«äŸ¿å©ã«ãªã£ãåé¢ããã®äžèº«ã¯ãã©ãã¯ããã¯ã¹ã«ãªããã¡ã§ããç§ã¯ã©ãããŠãä»çµã¿ãç¥ãããã®ã§ãäžèº«ãèŠããªããšäžå®ã«ãªã£ãŠããŸããã§ãããããã芳ç¹ãããç§ãäžçªè§Šããããªãã®ã¯ãã€ã¯ããã¬ãŒã ã¯ãŒã¯ã®ãSlimãã§ãã
Slimãåããã®ã¯ãå¿ èŠæäœéã®æ©èœã§ãããçæãããã³ãŒããå°ãªãããã¡ã€ã«ãµã€ãºãå°ãããããããã°ã©ã ã®åããçè§£ããããç¹åŸŽããããŸããå®éã«éçºãé²ããªããããããã¬ã䜿ãã°ããœãŒã¹ã³ãŒãã®èšè¿°ã«å¯ŸããåããèŠãããã§ãã
ââã§ã¯ã廣å·ããã®å¥œã¿ãšãã芳ç¹ã§ã¯ãªããéçºã«äŸ¿å©ãªãã¬ãŒã ã¯ãŒã¯ããšãã芳ç¹ã§ã¯ãã©ã®ãããªãã¬ãŒã ã¯ãŒã¯ãããããã§ããã§ããããã
廣å·ãå®åãå®éã®éçºã§ãããŸéžã¶ãšãããªãLaravelã§ããLaravelã¯CakePHPãªã©ãšåæ§ã«ãã«ã¹ã¿ãã¯ãã¬ãŒã ã¯ãŒã¯ã§ãå¿ èŠãªæ©èœãã»ãŒæã£ãŠãããæè»œã«é«æ©èœãªWebã¢ããªã±ãŒã·ã§ã³éçºãã§ããŸãã
ãã ãããã«ã¹ã¿ãã¯ãªãããäžèº«ã¯è€éã§ãã©ãã¯ããã¯ã¹ã«ãªãããããã§ããããåããåŠã¶ãåããç¥ããšããç®çã§ã¯ãªããéçºè ãæå³ããWebã¢ããªã»Webãµã€ãéçºããããšãã«äœ¿ãããã®ãLaravelã§ãããŸããLaravelã¯ãæžç±ãWebäžã®æ å ±ããŸããå€ãã®æ¹ãã€ãã³ããã»ãããŒã§çºè¡šãããŠããã®ã§ãåèãšãªããµã³ãã«ãæ¢ããããã¡ãªããããããŸãã
ãã£ãšããLaravelãããããã§ããã®ã¯éçºè ããŠãŒã¶ãè±å¯ã«ååšããçŸæç¹ã§ã®ããšã§ãããå°æ¥çã«ã¯ä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ä»£æ¿ãããå¯èœæ§ããããŸããLaravelã«ããã£ã話ã§ã¯ãããŸãããããªãããã®ãã¬ãŒã ã¯ãŒã¯ã®éçºãæ¢ãŸã£ããããããžã§ã¯ãã忢ããŠäœ¿ããªããªã£ãŠããŸã£ãéããã«ã¹ã¿ãã¯ãã¬ãŒã ã¯ãŒã¯ã®ããã«å€§èŠæš¡ãªãã®ã ãšããŠãŒã¶ãç¬èªã«ã¡ã³ããã³ã¹ãç¶ããã®ã¯å°é£ã ããã§ãã
ããã¯ãç§ããã€ã¯ããã¬ãŒã ã¯ãŒã¯ã奜ããã1ã€ã®çç±ã§ããããŸããä»®ã«ãã®ãã¬ãŒã ã¯ãŒã¯ã®éçºãæ¢ãŸã£ãŠããŸã£ãŠããã·ã³ãã«ãªãã€ã¯ããã¬ãŒã ã¯ãŒã¯ãªãã°ãé·æçãªéçºã»ä¿å®ããããããªããšèããŠããŸãã
次æããŒãžã§ã³ãPHP8ã¯ã©ããªãïŒ
ââPHPã®ããããã«ã€ããŠãã䌺ãããŸããæ¬¡æããŒãžã§ã³ã§ããPHP8ã®è©±ãèããå§ããŠããŸããããè¿å¹Žã®PHPã®æµããšãPHP 8ã«ãããã¢ããããŒãå 容ã屿ãæããŠãã ããã
廣å·ãPHP 5.3 / 5.4ã§ããçšåºŠã®æçãèŠããŸããããPHP 7ç³»ã«ãªããåŠçèœåã®é¢ã§å€§å¹ ãªæ¹åãè¡ãããŠããŸãã1ã€ã¯ããªã¯ãšã¹ãåŠçæ°ãå€§å¹ ã«å€§ãããªã£ãããšããããŠãæ¶è²»ã¡ã¢ãªãäžãã£ãããšã§ããçŸæç¹ïŒ2020幎3æã®åææïŒã§ã®ææ°ããŒãžã§ã³ãšãªã7.4ã§ã¯ä»ã«ãã¢ããŒé¢æ°ãé åã¹ãã¬ããæ§æã®å°å ¥ãè¡ãããŠããŸãã
ãããŠã次ã®ã¡ãžã£ãŒããŒãžã§ã³PHP 8ã§ã¯ãJITïŒJust In TimeïŒã³ã³ãã€ã©ã®å°å ¥ãäºå®ãããŠããŸããJITãå°å ¥ããèšèªã倿°ããäžã§ãããããPHPã§ãããšããç¶æ³ã«ãªã£ãŠããŸãããã§ãã
ââJITãšã¯ã©ã®ãããªæ©èœãªã®ã§ããããã
廣å·ãJITã¯ããã°ã©ã ã®å®è¡æã«ããããããäžéã³ãŒãããã€ãã£ãã³ãŒãã«ã³ã³ãã€ã«ããŠä¿æããããã䜿ããŸããããšã§ããã©ãŒãã³ã¹ãåäžãããæ©èœã§ãã
å€§å¹ ãªããã©ãŒãã³ã¹åäžãæåŸ ã§ããŸããããã§ã«PHPã®äžéã³ãŒãã®å®è¡å¹çã¯ååã«æé©åããéããªã£ãŠããããã³ãããŒã¯ã³ãŒããå€§å¹ ã«é«éåããããšã¯ã§ããŠããWordPressã®ããã«å®çšã¢ããªã±ãŒã·ã§ã³ã®äžã§å€§å¹ ã«é«éåããããšã¯å®¹æã§ã¯ãããŸããã
ã§ããããå®çšã¢ããªã±ãŒã·ã§ã³ã«ãããããã©ãŒãã³ã¹åäžã®æ°åã50ïŒ ãéæã§ããã®ã§ããã°ãããŒãžã§ã³ã¢ããããæå³ã¯ãããŸãããæ°ïŒ ïœ10ïŒ çšåºŠã§ããã°ããŒãžã§ã³ã¢ããã®æçŸ©ãèããŠããŸããŸãããã®ç¹ã¯ä»ãéçºé£ããšãã«æ³šåããŠèããŠããéšåã§ãã
廣å·ãããPHPã«ã³ãã¡ã¬ã³ã¹2019ã§çºè¡šããè³æãPHPã®ä»ãšãããã2019ãã§ãJITã«é¢ããèšåãããã
ââãŸãã«ãã£ã¬ã³ãžã®éäžããšããããšãªã®ã§ããã
廣å·ãã¡ãžã£ãŒããŒãžã§ã³ã¢ããã®ãããç®çã®æ©èœãæ±ããããŸãããJITã¯ããã«ååå€ããŸãã»ããããçŸæç¹ã§ã¯éçºé£ã課é¡ãæ±ããŠããŸãããæšä»ã®æ°åã³ãããŠã£ã«ã¹ã®éšåã¯ãPHPã®éçºã«ã圱é¿ãäžããŠããŸãã
ã¯ã£ãããšããããšã¯èšããŸããããã©ããã圢ã§PHP 8ããªãªãŒã¹ããããã«ã€ããŠã¯ãç¶ç¶ããŠãGitHubã®ç¶æ³ãéçºé£ããåºãããå ¬åŒæ å ±ã«æ³šç®ããŠãã ããã
ââJIT以å€ã«ã泚ç®ãã¹ãã¢ããããŒãã¯ãããŸããã
廣å·ãæ°æ©èœã§ããUnionã¯æ³šç®ãã¹ãã§ããããPHP7ã§ã¯ã¿ã€ããã³ãã£ã³ã°ã§åäžã®åã®ã¿ãæå®ã§ããŸããããPHP8ã§ã¯UnionãšããŠè€æ°ã®åãæå®ã§ããããã«ãªããŸãã
<?php
class Test {
private int|float $x;
public function setVal(int|float $in) {
$this->x = $in;
}
public function getVal() : int|float {
return $this->x;
}
}
$obj = new Test();
$obj->setVal(1.23);
echo $obj->getVal(); // åºå: 1.23
ããããPHPããã°ã©ãã³ã°ãå§ããæ¹ãã¡ãž
ââæåŸã«ãããããPHPããã°ã©ãã³ã°ãå§ããæ¹ãã¡ã«åããŠãã¹ãã«ã¢ããã®ããã®ã¢ããã€ã¹ããé¡ãããŸãã
廣å·ãååŒ·æ¹æ³ã¯ããŸããŸã§ããããã¯ãæ¬ãèªãããšã倧äºã§ãããŸããPHPãã©ããã£ãèšèªã§ããããç¥ãããã«èšèªä»æ§ã解説ããæžç±ããæ¬¡ã«ãå®éã®éçºã«åããŠã¯ããµã³ãã«ã倿°èŒã£ãŠãã解説æžããPHPã䜿ã£ãã·ã¹ãã éçºã®è§£èª¬æžããšãã«ãã»ãã¥ãªãã£ææ³ããã¥ãŒãã³ã°æ¹æ³ãæ²èŒãããŠãããã®ãæšèŠããŸãã
次ã«ãç¹°ãè¿ãã«ãªããŸããããœãŒã¹ã³ãŒããèªãããšããããæãããã°ã©ãã³ã°ã¹ãã«ãäžããã«ã¯é©ããŠãããšæããŸããããšãã°ãWordPressã®ãœãŒã¹ã³ãŒãããWordPressãå©çšããã·ã¹ãã ããããã¯ããã®ãã¥ãŒãã³ã°æ¹æ³ã®æ å ±ãåŠã¶ãšãPHPã䜿ã£ãå®è·µçãªããã°ã©ãã³ã°ãåŠã¹ãã¯ãã§ããã»ãã¥ãªãã£é¢é£ã§ã¯ãã¯ã埳䞞æ¬ããå§ãããŸãã
ãããŠãããã°ã©ãã³ã°ãããŠããããã§ã¯ãåé¡ãè§£ããããšã楜ããããã©ããã¯ãããè¯ãããã°ã©ãã«æ £ãããã©ããã倧äºãªçŽ é€ãšæã£ãŠããŸããPHPã®ããã°ã©ã ã¯èªã¿ãããã®ã§ãåé¡çºèŠãããããç¹åŸŽããããŸãããã®åé¡çºèŠã®ã¹ããããæ¥œãããã°ãããã°ã©ãããšã³ãžãã¢ãšããŠæ¥œããæé·ããŠããããšæããŸãã
ããã°ã©ãããšã³ãžãã¢ã«ãšã£ãŠã¯ã課é¡ãåé¡ã®è§£æ±ºã¯ãååšæçŸ©ããããšãèšããŸãããããæ¥œããããã¯ã1ã€ã®æèœãšèšããã§ãããããããããPHPããã°ã©ãã³ã°ãå§ããæ¹ã«ã¯ããã²ã解決ããããšã楜ããæ°æã¡ãã䌞ã°ããŠãã£ãŠãããããå¬ããã§ãã
ââããããšãããããŸããã
åæã»æã»æ§æïŒéŠ®å¯ä¹ ïŒæ ªåŒäŒç€Ÿæè¡è©è«ç€ŸïŒ
äžçã§åããŠã€ã³ã¿ãŒãããäžã§éå¬ãããäžåœå芧äŒâ©




