LoginSignup
3
3

More than 5 years have passed since last update.

PHPによるステートパターン(Wikipediaを参照した)

Last updated at Posted at 2013-07-05

ソースは Wikipedia: State パターン

上記記事の「JAVAによる例」をコピペし、PHPで動作するように書き換えてみました。

ただ読んだだけではわからないので、とりあえず今後いじって理解するためのテンプレと思って作りました。

<?php
/*
* PHPによるステートパターンの例
* 
*/

interface State { 
        public function writeName($stateContext, $name);
} 

class StateA implements State { 
        public function  writeName($stateContext, $name) { 
                print(strtolower($name)); 
                $stateContext->setState(new StateB()); 
        } 
} 

class StateB implements State { 
        private  $count=0; 
        public function writeName($stateContext, $name){ 
                print(strtoupper($name)); 
                // StateBのwriteName()が2度呼び出された後に状態を変化させる
                if(++$this->count>1) { 
                        $stateContext->setState(new StateA()); 
                }
        }
}
class StateContext {
        private $myState; 
        public function __construct() { 
                $this->setState(new StateA()); 
        } 

        // 通常は、Stateインタフェースを実装しているクラスによってのみ呼び出される
        public function setState($newState) { 
                $this->myState = $newState; 
        }

        public function writeName($name) { 
                $this->myState->writeName($this, $name); 
        } 
}

/*
*
* 実際に実行してみる
*
*/
$sc = new StateContext(); 
$sc->writeName("<p>Monday</p>"); 
$sc->writeName("<p>Tuesday</p>"); 
$sc->writeName("<p>Wednesday</p>"); 
$sc->writeName("<p>Thursday</p>"); 
$sc->writeName("<p>Saturday</p>"); 
$sc->writeName("<p>Sunday</p>"); 

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3