55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 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;
 | 
						|
                default:
 | 
						|
                    throw new InvalidArgumentException(
 | 
						|
                        $position . ' is not a valid position'
 | 
						|
                    );
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->fields[$position];
 | 
						|
    }
 | 
						|
}
 |