58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Cron;
 | |
| 
 | |
| use InvalidArgumentException;
 | |
| 
 | |
| /**
 | |
|  * CRON field factory implementing a flyweight factory
 | |
|  * @link http://en.wikipedia.org/wiki/Cron
 | |
|  */
 | |
| class FieldFactory
 | |
| {
 | |
|     /**
 | |
|      * @var array Cache of instantiated fields
 | |
|      */
 | |
|     private $fields = array();
 | |
| 
 | |
|     /**
 | |
|      * Get an instance of a field object for a cron expression position
 | |
|      *
 | |
|      * @param int $position CRON expression position value to retrieve
 | |
|      *
 | |
|      * @return FieldInterface
 | |
|      * @throws InvalidArgumentException if a position is not valid
 | |
|      */
 | |
|     public function getField($position)
 | |
|     {
 | |
|         if (!isset($this->fields[$position])) {
 | |
|             switch ($position) {
 | |
|                 case 0:
 | |
|                     $this->fields[$position] = new MinutesField();
 | |
|                     break;
 | |
|                 case 1:
 | |
|                     $this->fields[$position] = new HoursField();
 | |
|                     break;
 | |
|                 case 2:
 | |
|                     $this->fields[$position] = new DayOfMonthField();
 | |
|                     break;
 | |
|                 case 3:
 | |
|                     $this->fields[$position] = new MonthField();
 | |
|                     break;
 | |
|                 case 4:
 | |
|                     $this->fields[$position] = new DayOfWeekField();
 | |
|                     break;
 | |
|                 case 5:
 | |
|                     $this->fields[$position] = new YearField();
 | |
|                     break;
 | |
|                 default:
 | |
|                     throw new InvalidArgumentException(
 | |
|                         $position . ' is not a valid position'
 | |
|                     );
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $this->fields[$position];
 | |
|     }
 | |
| }
 |