ãã®æçš¿ã§ã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
- PHPã§ã®ãªããžã§ã¯ãã³ã¬ã¯ã·ã§ã³ã®èšèšãšå®è£ ã
- ããã©ãŒãã³ã¹ãã¹ãã
- æåã®åäœãã¹ããæžããå°è±¡ã
- PHPãªããžã§ã¯ãã®ã»ããã®æäœã«é¢ããèå³æ·±ãæ å ±ã
äœããããŸãããïŒ
æåŸã®æçš¿ã®å ¬éãšãã®è°è«ã®çµäºåŸãç§ã¯ãããªãéçºã®èšç»ãç«ãŠãŸããã
- foreachïŒïŒã䜿çšããŠã³ã¬ã¯ã·ã§ã³ãå埩åŠçããæ©èœãå®è£ ããŸãã
- ãã䟿å©ã«äœ¿çšããããã®ã³ã¬ã¯ã·ã§ã³ã®äž»èŠãªå®è£ ã®å°éåã
- åäžã®PHPé åã«åºã¥ããŠããããã€ã³ã¿ãŒãã§ã€ã¹ã®æ°ããå®è£ ãäœæããŸãã
- ããã·ã¥ã¢ã«ãŽãªãºã ã®æ¹åã
- ã«ãŒãã®äžéšã®ã¿ã€ãã®ããŒã¿ã®æåŠã ãµããŒããããã¿ã€ãã®æçµãªã¹ãã¯ãintãstringãobjectã®ããã«ãªããŸãã
- æ©èœãã¹ãã
- ããã©ãŒãã³ã¹ãã¹ãã
äžèšã®ãªã¹ãã«å ããŠãçŸåšã®ãªãªãŒã¹èšç»ã«å«ãŸããŠããªãåè£è ãããŸããã
- ãã£ã«ã¿ãªã³ã°ããã³ãœãŒãæ©èœã
- ã³ã¬ã¯ã·ã§ã³ã®å®çšçãªæ©èœã
åéã€ã³ã¿ãŒãã§ãŒã¹
以åã«éçºãããã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãæ°ããéçºèšç»ã«éåžžã«çå®ã«å¯Ÿå¿ããŠããŸãã çŸåšã®ããŒãžã§ã³ã®ã€ã³ã¿ãŒãã§ãŒã¹å³ã¯æ¬¡ã®ããã«ãªããŸãã
å³ãããããããã«ããã¹ãŠã®ã³ã¬ã¯ã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã¯IteratorAggregateã€ã³ã¿ãŒãã§ã€ã¹ãç¶æ¿ããŸããããã«ãããforeachïŒïŒã䜿çšããŠã³ã¬ã¯ã·ã§ã³ããã©ããŒã¹ã§ããŸãã foreachïŒïŒã䜿çšããŠ<object-object>ããããåŠçãããšãã«ãããã¢ããããèŠåã®åé¡ã¯äŸç¶ãšããŠæ®ã£ãŠããŸããããã®ãããªç¶æ³ã¯éåžžã«ãŸããªã®ã§ãç§ã¯ããã«ç®ãéããããšã«ããŸããã
ã«ãŒãã®å®è£
ãããã¯ãHashMapãHashSetãããã³HashTableã®å®è£ ã«ãã£ãŠè¡šãããŸãã ãããã®åå®è£ ã«ã¯ã䜿çšãç°¡çŽ åããããã®ç¬èªã®ç¹æ®åããããŸãã
ããã·ã¥ããŒãã«
HashTableãããã®å éšæ§é ã¯ãåäžã®PHPé åã«åºã¥ããŠããŸãã ããã«ãããOïŒ1ïŒããŒããã°ããæäœã§ããŸãããéåžžã®OïŒnïŒå埩ã«ãã£ãŠå®è¡ãããå€ãæäœããæ©èœã«æªåœ±é¿ãåãŒããŸãã
HashTableã«ãŒãã®ããŒã¯äžæã§ãã HashTableãããã®å€ã¯äžæã§ã¯ãªããããåäžã®å€ãè€æ°ã®ããŒã«é¢é£ä»ããããšãã§ããŸãã
HashTableãããã¯ãããŒãšæååã®æååãšæŽæ°ãå€ã®æŽæ°ãšãªããžã§ã¯ãããµããŒãããŸãã
ããŒãšå€ã®ããã·ã¥ã¯å®è¡ãããŸããã getKeyHashïŒïŒããã³getValueHashïŒïŒã¡ãœããã¯äŸå€ãã¹ããŒããŸãã
HashTableã¯ã©ã¹å³ã
ããã·ã¥ããããšããã·ã¥ã»ãã
HashMapããã³HashSetãããã®å éšæ§é ã¯ãé£æ³ãªã³ã¯ã®ãããã¯ãŒã¯ã«åºã¥ããŠããŸãã ããã«ãããé£æ³ãµã³ãã«ã䜿çšããŠãã¹ãŠã®ãããæäœãå®è£ ã§ããŸãã ãããã¢ã«ãŽãªãºã ã®äœæ¥ã®è€éãã¯OïŒ1ïŒã§ããããã¯ããªããžã§ã¯ãã®ã€ã³ã¹ããŒã«/ååŸæéãã«ãŒãã®ãµã€ãºã«å¿ããŠå€åããªãããšãæå³ããŸãã
HashMapã«ãŒãã®ããŒã¯äžæã§ãã HashMapãããã®å€ã¯äžæã§ã¯ãªããããåäžã®å€ãè€æ°ã®ããŒã«é¢é£ä»ããããšãã§ããŸãã
HashSetãããã®ããŒãšå€ã¯äžæã§ãããããäžæã®é¢é£ä»ãã®ãªããžããªãæŽçã§ããŸãã
HashMapããã³HashSetã«ãŒãã¯ãæååãæŽæ°ãããã³ããŒãšå€ã®ãªããžã§ã¯ãããµããŒãããŠããŸãã
HashMapã¯ã©ã¹å³ã
HashSetã¯ã©ã¹å³ã
ã»ããããªã¹ããããã³ãã¥ãŒã®å®è£
ã»ããã®å®è£ ã«ã¯ãããã€ãã®è¡šé¢çãªå€æŽãå ããããŠãããåçŽåããã䜿çšã®ããã®å°éåã倧ãããªã£ãŠããŸãã
ãã£ãŒãã¯ã©ã¹å³ã
ãªã¹ããšãã¥ãŒã®å®è£ ã¯ã»ãšãã©å€æŽãããŠããŸããã
ãªã¹ããšãã¥ãŒã®ã¯ã©ã¹å³ã
æ©èœãã¹ã
éä¿¡ããããã¹ãŠã®ã³ãŒãã¯ã PHPUnitãã¹ãã§ã«ããŒãããŸãã
ãããã¯ç§ã®æåã®ãŠããããã¹ãã§ããããã®çµéšã«éåžžã«æºè¶³ããŠããŸãã ãã®ã¿ã€ãã®ãã¹ãã«ãããå®è£ ãå€æŽããå¿ èŠããã£ãä¿®æ£ã®ããã«ãçŽ10ã®ã¿ã€ããã¹ãš1ã€ã®åºæ¬çãªãšã©ãŒããã£ããã§ããŸããã
次ã®3ã€ã®ããšã«æ³šæããŠãã ããã
- ãŠããããã¹ãããŸã 䜿çšããŠããªãå Žåã¯ãä»ããéå§ããŸãã å人çã«ã¯ãèå³æ·±ãç¶æ³ããããŸãããå€ãã®ã³ãŒããçæãããµããŒãããå¿ èŠãããããµããŒãããªããã°ãªããŸããã§ããã ãªãã§ïŒ -ãã å§ããã®ãæãã ä»ã«ãªã£ãŠãããããèªåã®äººçããã£ãšæ¥œã«ãªãåŸãããšã«æ°ã¥ããŸããã
- æåã®ããã€ãã®ãã¹ããæžããåŸãç§ã¯å€§ããªãæªéæã®ïŒç§ã«ãšã£ãŠïŒäžçãå éšã«ããããšã«æ°ä»ããŸããã ããŸããŸãªassert *ã®ãã¡ã䜿çšããã®ã¯ã»ãã®ãããã§ãã å€ãã®å Žåããã¹ãã³ãŒãã¯å¹ççã§ãªããéè€ããŠããŸãã PHPUnitã®ããã¥ã¡ã³ããäžç®èŠãã ãã§ãäœæãããã¹ãããããã¹ãã®æ¹ãã¯ããã«åªããŠããããšãããããŸããã
- ãŠããããã¹ãã¯ãã¹ãŠã®ç æ°ãæ²»ãããã§ã¯ãããŸããã ã¡ãœããããã®äžã®ãã¹ãŠã®ããžãã¯ããã¹ãã§ããŸããç¹å®ã®å°ããªã·ããªãªããã¹ãããããã®äŸ¿å©ãªãã©ãããã©ãŒã ããããŸãããä»ã®ãã¹ãæ¹æ³ãå¿ããªãã§ãã ããã é©åã«èªååã§ãããã®ãããè¿œå ã®ãã¹ããªãã·ã§ã³ãšããŠåäœãã¹ããéžæããŸãã
æ§èœè©Šéš
ç§ã«ãšã£ãŠæãèå³æ·±ãã®ã¯ãã³ã¬ã¯ã·ã§ã³ã®çç£æ§ã§ãã ã»ãããšã·ãŒã±ã³ã·ã£ã«ãªã¹ãã®å®è£ ã¯ç Žæ£ãããããã®ãã¹ãã«çŠç¹ãåãããŸããã
ãã¹ããªããžã§ã¯ãïŒ
- éåžžã®PHPé åã
- ArrayObjecté åã®SPLå®è£ ã
- HashTableãããã®å®è£ ã
- HashSetã«ãŒãã®å®è£ ã
- HashMapãããã®å®è£ ã
ãã¹ãåºæºïŒ
- ããŒ/å€ã®ãã¢ã®å¹³åã€ã³ã¹ããŒã«æéã
- ããŒã®å¹³åååŸæéã
- å€ããšã®å¹³åããŒååŸæéã
- æ¶è²»ãããRAMã®éã
ãã¹ããã©ãããã©ãŒã ã®è©³çŽ°ã«ã€ããŠã¯èª¬æããŸãããããã¯ããŸãæå³ããªãããã§ãã å®éããããã®ãã¹ãã¯å®éçç¹æ§ã決å®ããããšãç®çãšããŠãããããããæ¯çã瀺ãããšãç®çãšããŠããŸãã ãã¹ãçµæã®æ¯çã¯ãç°ãªãããŒããŠã§ã¢ãŸãã¯ç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯å®éã«ã¯å€åããŸããã§ããã
ãã®æçš¿ã®ãã¹ãçµæã¯ãWindows Vista 32ãããã®ã©ãããããããæ®åœ±ããŸããã
ããŒ/å€ãã¢ã®ã€ã³ã¹ããŒã«æéã®ãã¹ã
ãã£ãŒãïŒ
ãã¹ããã¡ã€ã«ïŒ
- éåžžã®PHPé åããã¹ããã
- ArrayObjectãã¹ã
- HashTableãã¹ã
- ããã·ã¥ã»ãããã¹ã
- HashMapãã¹ã
ããŒååŸæéã®ãã¹ã
ãã£ãŒãïŒ
ãã¹ããã¡ã€ã«ïŒ
- éåžžã®PHPé åããã¹ããã
- ArrayObjectãã¹ã
- HashTableãã¹ã
- ããã·ã¥ã»ãããã¹ã
- HashMapãã¹ã
å€ã«ããããŒååŸæéã®ãã¹ã
ãã£ãŒãïŒ
ãã¹ããã¡ã€ã«ïŒ
- éåžžã®PHPé åããã¹ããã
- ArrayObjectãã¹ã
- HashTableãã¹ã
- ããã·ã¥ã»ãããã¹ã
- HashMapãã¹ã
æ¶è²»ãããRAMã®éããã¹ããã
ãã£ãŒãïŒ
ãã¹ããã¡ã€ã«ïŒ
- éåžžã®PHPé åããã¹ããã
- ArrayObjectãã¹ã
- HashTableãã¹ã
- ããã·ã¥ã»ãããã¹ã
- HashMapãã¹ã
ããã€ãã®èå³æ·±ãäºå®
ãã®éçšã§ãå ±æãããèå³æ·±ãäºå®ãããã€ãæµ®äžããŸããã
äžæŽåspl_object_hashïŒïŒ
å€ãã®äººãspl_object_hashïŒïŒé¢æ°ã«ç²ŸéããŠãããšæããŸãã
ç§ã®æèŠã§ã¯ã圌女ã«ã¯éåžžã«åªããæ©èœã§ã¯ãªããã®ããããŸã-ããã·ã¥äžæŽåã
äžæŽåãã¹ãspl_object_hastïŒïŒïŒ
<?php $object1 = new stdClass(); $hash1 = spl_object_hash($object1); unset($object1); $object2 = new stdClass(); $hash2 = spl_object_hash($object2); var_dump($hash1); var_dump($hash2); var_dump($hash1 === $hash2); //string '000000004974d03c000000005560c408' (length=32) //string '000000004974d03c000000005560c408' (length=32) //boolean true
ããããäœãèµ·ããããªããã®æ©èœãäžå¿«ãªã®ã§ããïŒ
- ããã»ã¹å ã§ãã£ãŠãããªããžã§ã¯ãã®äžæã®èå¥åãšããŠspl_object_hashïŒïŒã«äŸåããããšã¯ã§ããŸããã
- éã·ãªã¢ã«åäžã«ããã·ã¥ãæŽæ°ããªããšãspl_object_hashïŒïŒããã·ã¥ãæ ŒçŽããããŒã¿æ§é ãã·ãªã¢ã«åã§ããŸããã
ç§ãšç§ã®ä»äºã«ãšã£ãŠããã®åäœã¯é©åã§ã¯ãããŸããã§ããããªããžã§ã¯ãã®é«éããã·ã¥ã®ãœãŒã¹ãšããŠãã®é¢æ°ã«æ£ç¢ºã«äŸåããŠããããã§ãã
é åããŒã®å éšããã·ã¥
ç§ã®æåŸã®æçš¿ã®ã³ã¡ã³ãã§ã Athariã¯è²Žéãªã³ã¡ã³ããæ®ããŸããããã®äžéšãåŒçšããŸãã
ãªãæååã®md5ãèšç®ããã®ã§ããïŒ Pokhashnyé å-ããã·ã¥ããŒãã«ãªã®ã§ã2ã€ã®ã¬ãã«ã§ããã·ã¥ãèšç®ããå¿ èŠã¯ãããŸããã ã¡ã¢ãªãšã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ã®ã¿ãç¡é§ã«ãªããŸãã
ããã«ã¯æ¬åœã«å€ãã®æå³ããããŸãããããã§ã確èªããããšã«ããŸããã
çµæïŒ
- æååããŒãå°ããïŒ100æåãªã©ïŒå Žåãmd5ããã·ã¥ã®èšç®ã¯å®éã«ãªãœãŒã¹ãæ¶è²»ããã ãã§ãã
- æååããŒãååãªé·ãïŒããšãã°20kæåïŒã§ããå Žåãé åã§æ¶è²»ãããRAMã®ãµã€ãºã¯ãmd5ã§ããã·ã¥åããããã®ãšæ¯èŒããŠã70ïŒ å¢å ããŸãã åæã«ãã€ã³ã¹ããŒã«æéãšã¢ã¯ã»ã¹æéã¯é£ãåããåãããŸãŸã§ããããã¡ããããã¯ãªãŒã³ãªãããŒãæ¯æããŸãã
é åã®ããã·ã¥å
åãAthariãŠãŒã¶ãŒãæåŸã®æçš¿ã«å¥ã®è³¢æãªã³ã¡ã³ããæ®ããŸããã
ã·ãªã¢ã©ã€ãºåŒã³åºãã¯é¢çœãã§ãã ãã¹ãŠã®ã¿ã€ãããµããŒãããããšã¯ãå¿ èŠãã§ãããåãäŸ¡æ Œã§ã¯ãªãããšãç解ããŠããŸãã
ã³ã³ããã¹ããåäœæããã«ã¯ãã³ã¬ã¯ã·ã§ã³ã®ããŒã®ããŒã¿åãšããŠé åããµããŒãããå¿ èŠããããšããäºå®ã«ã€ããŠè©±ããŠããããšãæãåºãããŠãã ããã ãããè¡ãããã«ãæååã«ãã£ã¹ãããããã«ã·ãªã¢ã«åãããmd5ïŒïŒã䜿çšããŠãã®æååãããã·ã¥ããŸããã
æ¬åœã«ãé«äŸ¡ãªãäŸ¡æ Œã çŸåšã®å®è£ ã§ã¯ãé åããããããŒãšããŠãµããŒãããããšãå®å šã«æåŠããŸããã
é åã®ãµããŒããæåŠããçç±ïŒ
- ããã©ãŒãã³ã¹ããé«äŸ¡ãã
- ããŸãéèŠããããŸããã
- å®å šã§ãªã
ç¹ã«ãå®å šã§ã¯ãªãããšããé ç®ã§åæ¢ããããšæããŸãããã€ã³ãã¯ãããŒã¿ãšããã·ã¥ã®éã®ãã£ãŒãããã¯ãäžè¶³ããŠããããšã§ãïŒãé«äŸ¡ãã«é¢ä¿ãªãïŒã ã¯ã©ã€ã¢ã³ãã³ãŒãããããã·ã¥ããé åãžã®åç §ãä¿æãããããå€æŽãããšãããã·ã¥ã¯å»æ¢ãããŸãã ããã¯åãæ©äŒã®é åã§ã¯ãªããšããæ å ±ãå ¥æããŠãã ããã åãããšãä»ã®ã¹ã«ã©ãŒããŒã¿åã«ãåœãŠã¯ãŸããŸãã
æãéã¯ãããŸããïŒ é ã«æµ®ãã¶ã®ã¯ããªããžã§ã¯ãã©ãããŒïŒArrayObjectãªã©ïŒãä»ããŠé åã䜿çšããããšã ãã§ãã ãã®å Žåãå°ãªããšã "fickle"ã®spl_object_hashïŒïŒãååŸã§ããŸãã
ãããã«
ãããããçããå¿ èŠãããæãéèŠãªè³ªåã¯ãããã®ãœãªã¥ãŒã·ã§ã³ã®çç£æ§ã®èŠ³ç¹ãããã®ãããªäŸ¡æ Œãæ¯æãæºåãã§ããŠããŸããïŒãã§ãã 誰ãæºåãã§ããŠããªããšç¢ºä¿¡ããŠããŸãã ãããŠç§ãå«ããŠã ããã©ãŒãã³ã¹ãã¹ãã®çµæã®ã°ã©ããäœæãããšããç§ã¯é©ããŸããã æšæºçãªå®è£ ãšæ¯èŒããŠã¯ããã«äœãæ¯çãæåŸ ããŠããŸãããããã®åŽé¢ã§ã¯ãã®ãœãªã¥ãŒã·ã§ã³ãæããã«å€±ãããããšãå®å šã«ç解ããŠããŸããã æåã¯åé¡ã®è§£æ±ºçãèŠã€ããããšããããŸããããæ®å¿µãªãããäœãèµ·ãããŸããã§ããã äž»ãªåé¡ã¯ããã®å Žåãã¡ãœããåŒã³åºãã§ãããé«äŸ¡ãªãæäœã§ãããšããããšã§ãã æ¶è²»ãããRAMã®éã«é¢ããŠã¯ãç§ã¯ãããããã»ã©å€ãã®ãªãœãŒã¹ãå¿ èŠãšãããããŸã ç解ããŠããŸããã å¯äžã®æçšãªé©æ°ã¯ãã«ãŒãã®åæ¹åããã·ã¥ã§ããããã«ãããOïŒ1ïŒã®ãã¬ãŒã ã¯ãŒã¯å ã®å€ã§éžæã§ããŸãã
äžè¬ã«ãç§ã¯ãã®ãããžã§ã¯ãã倱æãããšä¿¡ããŠããããã®çç±ã¯ããã©ãŒãã³ã¹ã®é¢ã«ãããŸãã
éçº
ç§ã®åæã«åºã¥ããŠããã®ãããªãœãªã¥ãŒã·ã§ã³ã¯ä»åŸã衚瀺ãããŸãã 圌ã«ãšã£ãŠæé©ãªå Žæã¯SPLããã±ãŒãžã§ãã SPLã§ã¯ãªããä»ã®PECLã¢ãžã¥ãŒã«ã§ãããæçµçã«ã¯æšæºã®PHPã¢ã»ã³ããªã®äžéšã«ãªãã§ãããã ãããã«ãããCã§ã®æèœãªå®è£ ã«ãã£ãŠã®ã¿æºè¶³ã®ãããã®ãåŸãããŸããã¡ãªã¿ã«ã誰ãããã®ãããžã§ã¯ãã«èå³ããããPECLã¢ãžã¥ãŒã«ãšããŠã®å®è£ ãæ¯æŽãããå Žåã¯ãåãã§ååããŸãã
次ã«äœãããïŒ
ãã¶ããç§ãã¡ãä»æã£ãŠãããã®ã«æºè¶³ããŠåŸ ã£ãŠãã ããã çµå±ã®ãšãããä»ã§ããã¹ãŠãããªãè¯ãã§ãã
å人çã«ã¯ãæ¥åžžç掻ã§å°ã圹ç«ã€ã ãã§ãæšæºã®PHPé å以äžã®è»œéãªå®è£ ãäœæããããšã«ããŸããã ãã§ã«ããã€ãã®ãã©ããããããŸãïŒ
ã¯ã©ã¹å³ïŒ
MixedArrayããã³ObjectArray UMLå³
ãœãŒã¹ã³ãŒãïŒ
MixedArray
ObjectArray
ããã誰ãã«ãšã£ãŠèå³æ·±ãå Žåã¯ãæžããŠãç§ã¯ãã詳现ã«ã¢ã€ãã¢ã«ã€ããŠè©±ããŸãã
ãœãŒã¹ã³ãŒã
https://github.com/rmk135/Rmk-Framework
è¬èŸ
ååã®æçš¿ã«å¯Ÿãã建èšçãªã³ã¡ã³ãã«æè¬ããŸãã 圌ãã¯ãšãŠã圹ã«ç«ã¡ãŸããã ããäžåºŠãæèŠããèãããã ããã
æåŸãŸã§èªãã§ãããŠããããšããè±å¯ãªã°ã©ãã£ãã¯ã¹ã§ããããªãããç§ã¯ãããå¿ èŠãªå Žæã«ã®ã¿é 眮ããããšããŸããã