1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeaunamespace Cron; 4*37748cd8SNickeau 5*37748cd8SNickeauuse InvalidArgumentException; 6*37748cd8SNickeau 7*37748cd8SNickeau/** 8*37748cd8SNickeau * CRON field factory implementing a flyweight factory 9*37748cd8SNickeau * @link http://en.wikipedia.org/wiki/Cron 10*37748cd8SNickeau */ 11*37748cd8SNickeauclass FieldFactory 12*37748cd8SNickeau{ 13*37748cd8SNickeau /** 14*37748cd8SNickeau * @var array Cache of instantiated fields 15*37748cd8SNickeau */ 16*37748cd8SNickeau private $fields = array(); 17*37748cd8SNickeau 18*37748cd8SNickeau /** 19*37748cd8SNickeau * Get an instance of a field object for a cron expression position 20*37748cd8SNickeau * 21*37748cd8SNickeau * @param int $position CRON expression position value to retrieve 22*37748cd8SNickeau * 23*37748cd8SNickeau * @return FieldInterface 24*37748cd8SNickeau * @throws InvalidArgumentException if a position is not valid 25*37748cd8SNickeau */ 26*37748cd8SNickeau public function getField($position) 27*37748cd8SNickeau { 28*37748cd8SNickeau if (!isset($this->fields[$position])) { 29*37748cd8SNickeau switch ($position) { 30*37748cd8SNickeau case 0: 31*37748cd8SNickeau $this->fields[$position] = new MinutesField(); 32*37748cd8SNickeau break; 33*37748cd8SNickeau case 1: 34*37748cd8SNickeau $this->fields[$position] = new HoursField(); 35*37748cd8SNickeau break; 36*37748cd8SNickeau case 2: 37*37748cd8SNickeau $this->fields[$position] = new DayOfMonthField(); 38*37748cd8SNickeau break; 39*37748cd8SNickeau case 3: 40*37748cd8SNickeau $this->fields[$position] = new MonthField(); 41*37748cd8SNickeau break; 42*37748cd8SNickeau case 4: 43*37748cd8SNickeau $this->fields[$position] = new DayOfWeekField(); 44*37748cd8SNickeau break; 45*37748cd8SNickeau case 5: 46*37748cd8SNickeau $this->fields[$position] = new YearField(); 47*37748cd8SNickeau break; 48*37748cd8SNickeau default: 49*37748cd8SNickeau throw new InvalidArgumentException( 50*37748cd8SNickeau $position . ' is not a valid position' 51*37748cd8SNickeau ); 52*37748cd8SNickeau } 53*37748cd8SNickeau } 54*37748cd8SNickeau 55*37748cd8SNickeau return $this->fields[$position]; 56*37748cd8SNickeau } 57*37748cd8SNickeau} 58