PHPã«ã¯ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¨ãããã®ãããã¾ãããã¨ãã話
ãªã«ãã¨PerlãPythonãRubyãJavaScriptçã®è¨èªã¨æ¯ã¹ã¦æ©è½ã®ä¸è¶³ãè¨åããããã¨ã®å¤ãPHPã§ããã
PHPã«ã¯éã«ãããã®è¨èªã«ã¯ãªãæ©è½ããããããã¯インターフェイスã ãã¨ãã話ã§ãã
ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¨ãã奴ã¯ãã¿ã¤ããã³ãã£ã³ã°ã¨å
±ã«ãPHPã¨ããè¨èªããã£ãæãããããªä»ã®è»½éè¨èªã¨ã¯éã£ãããã°ã©ãã³ã°ã¹ã¿ã¤ã«ãæã£ã¦ãããã¨ã象徴ãã¦ãã¾ãã
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã£ã¦ä½?
JavaãAS3ãªããããã£ã¦ãã人ã ã¨ããããã¨æãã¾ãããæä½ã«ããã°interfaceã¨ã¯ã¡ã½ããã®å®£è¨ãéãããã®ã§ãã
PHPããã¥ã¢ã«ãã説æãå¼ç¨ããã¨
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ãããããã¯ã©ã¹ãå®è£ ããå¿ è¦ãããã¡ã½ãã㮠種é¡ãã
ãããã®ã¡ã½ããã®å®ä½ãå®ç¾©ãããã¨ãªããæå®ããã³ã¼ããä½æã§ããããã«ãªãã¾ãã
(PHP: オブジェクト インターフェイス - Manual)
ã³ã¼ãã§è¨ãã¨ãããããã¤ã§ãã
<?php interface Car { public function run(); public function stop(); }
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯implementsæ¼ç®åã§å®è£
ã§ãã¾ãã
Carã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããMiraã¯ã©ã¹ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
<?php class Mira implements Car { public function run() { // ä½ããã®å¦ç } public function stop() { // ä½ããã®å¦ç } }
implementsããã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ãã宣è¨ããã¡ãã¨çä¼¼ããªãã¨ãPHPãã¨ã©ã¼ãåºãã¦ããã¾ãã
ããä½ãå¬ããã®?
ã¯ããã¦è¦ã人ã«ã¨ã£ã¦ã¯å¤åæå³ãããããªãã¨æãã¾ãã
åã¯åãã¦Javaã§ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«åºä¼ã£ãã¨ãããããçåãæ±ãã¾ããã
- ããªãããããåãã¡ã½ãã宣è¨ãç¹°ãè¿ãå¿ è¦ã?ã
- ãæ©è½ãå®è£ ãã¦ããã¯ã©ã¹ã ãã§ããã®ã§ã¯?ã
ããã¯å
¨ããã®éãã§ãã
äºå®ããªãã¸ã§ã¯ãæåã«ããã¦ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¨ããæ©è½ããªãã¦ãããã°ã©ã ã¯ãããã§ãããã¾ãã
ããã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ããã¨ã§å¾ãããã¡ãªãããããã¾ãã
ä¾ãã°ãã£ãã®Carã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ãã³ã¼ãã®å ´åã
<?php // Carã¤ã³ã¿ã¼ãã§ã¤ã¹ãéãã¦ä½ããã®å¦çãéè¡ããé¢æ°procedure function procedure(Car $somecar) { $somecar->run(); // ä½ããã®å¦ç $somecar->stop(); }
ãã®procedureé¢æ°ã§ã¯å¼æ°$somecarã®é¨åã§タイプヒンティングãã¦ãã¾ãã
å¼æ°ã¨ãã¦æ¸¡ããã$somecarã¯ãCarã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ãããã¨ãä¿éããã¦ãã¾ãã
ããprocedureé¢æ°ã«æååã渡ãã¦å¼ã³åºããå ´åããã¡ãã¨PHPã以ä¸ã®ããã«ã¨ã©ã¼ãåºãã¦ããã¾ãã
Argument 1 passed to procedure() must implement interface Car, string given, called in ...
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ããã«å®è£ ã¯ã©ã¹ã§ã¿ã¤ããã³ãã£ã³ã°ããã°ããã®ã§ã¯?
ããããã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ããã¨ãä¸è¨ã®ä¾ã§ã¯Miraã¯ã©ã¹ã§ã¿ã¤ããã³ãã£ã³ã°ããã°ããã§ã¯ãªãããã¨æã人ãããããããã¾ããã
<?php function procedure(Mira $mira) { $mira->run(); // ä½ããã®å¦ç $mira->stop(); }
ããã§ãè¯ãããããªãããã¨ãããã¨ã§ãããå¼æ°ã«Miraã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã®ã¿ããåãä»ããªãã®ãªãããã§ãè¯ãã®ã§ãã
ããããããã§ã¯procedureé¢æ°ã¯Miraã¯ã©ã¹ã®å®è£
ã«ä¾åããå½¢ã«ãªã£ã¦ãã¾ãã¾ãã
対ãã¦ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãã¿ã¤ããã³ãã£ã³ã°ããã°ãå®è£
ã交æã§ãã¾ãã
å®è£ ã®äº¤æ?
<?php class Copen implements Car { public function run() { // ... } public function stop() { // ... } }
ä¾ãã°æ°ããCarã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããCopenã¯ã©ã¹ãä½ãã¾ãã
Carã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ã¿ã¤ããã³ãã£ã³ã°ããã®ã§ããã°ããã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãprocedureé¢æ°ã«æ¸¡ããã¨ãã§ãã¾ãã
Miraã¯ã©ã¹ã§ã¿ã¤ããã³ãã£ã³ã°ããå ´åã¯Copenã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãå¼æ°ã«æ¸¡ãã¾ããã
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ããã¨ã§ç¹å®ã®ã¯ã©ã¹ã®å®è£
ã«ä¾åããªãã¿ã¤ããã³ãã£ã³ã°ãå¯è½ã«ãªãã¾ãã
ããããæ©è½(ã¡ã½ãã宣è¨)ã¨å®è£
ã®åé¢ã¨ãããã¤ã§ãã
ããã«ããåã®å®å
¨æ§ã¨æè»ããåæã«å¾ããã¨ãã§ãã¾ãã
ä»ã®è»½éè¨èªã«ã¤ã³ã¿ã¼ãã§ã¤ã¹ããªããPHPã«ã ãããçç±
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ããã¨ã¯ä¸é·ä¸çã§ãã
ã¨ããã®ããã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ã£ãå ´åãã³ã¼ãã®è¨è¿°éã¯å¢ããããã§ãç°¡æ½ãªè¨è¿°ã¨ã¯ç¨é ããã®ã«ãªããã¨ãããã¾ãã
ãã®ä»£ãããä¸è¨ã®ããã«ã¤ã³ã¿ã¼ãã§ã¤ã¹ãã¿ã¤ããã³ãã£ã³ã°ãããã¨ã§ãèªç±ã«ãã¸ãã¯ã®äº¤æãã§ããä¸ã«ãå¼æ°ã¯åãä¿éããã¾ãã
PHPã«ã¤ã³ã¿ã¼ãã§ã¤ã¹ãããçç±ã¨ã¯ã
ç°¡æ½ãªè¨è¿°ããããè¨è¿°ã®ãããããããåã®å®å
¨æ§ãéè¦ãã¦ããPHPã®è¨è¨ææ³ã®è¡¨ããªããã§ãã
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ããå ·ä½çãªä¾ãç¥ãããæ¹ã¯
ãã¶ã¤ã³ãã¿ã¼ã³é¢é£ã®ããã¥ã¡ã³ãã«ããããããã¾ãã
ãªã³ã¯ãããã¤ãæãã¦ããã¾ãã
- koshigoewiki:php:デザインパターン [KoshigoeWiki] - PHPã§ã®ãã¶ã¤ã³ãã¿ã¼ã³ã網ç¾
- デザインパターン (ソフトウェア) - Wikipedia - Javaã§ã®ä¾ããããã
æå¾ã«
ãªããããå¤ãããï¼ã¿ãããªã¨ããããã£ããçªã£è¾¼ã¿ãé¡ããã¾ãã
追è¨
ä¸å¿è¨ã£ã¦ããã¨ãããã¯ã¿ã¤ãã³ã°ãããã¤ã³ã¿ã¼ãã§ã¤ã¹ä½¿ã£ãæ¹ãè¯ããã£ã¦ãã話ããã¦ããããã§ã¯ãªãã¦ãPHPã«ã¯ããããã¹ã¿ã¤ã«ãããããã¨è¨ã£ã¦ãã ãã§ãã
ã¿ã¤ãã«ãã®ã¾ã¾ã®ãã¨ãè¨ã£ã¦ã¾ãã