<?php
 
/**
 
 * File for the PHONEvaluator class.
 
 * @package PHON
 
 */
 
 
require_once 'PHONValidator.php';
 
 
/**
 
 * Singleton class that safely evaluates PHON data into PHP values.
 
 * @package PHON
 
 */
 
final class PHONEvaluator {
 
    /**
 
     * Singleton instance.
 
     * @var PHONEvaluator
 
     */
 
    private static $instance;
 
    
 
    /**
 
     * Singleton access.
 
     * @return PHONEvaluator Singleton instance.
 
     */
 
    public static function getInstance() {
 
        if (!self::$instance) {
 
            self::$instance = new PHONEvaluator();
 
        }
 
        return self::$instance;
 
    }
 
    
 
    /**
 
     * A reference to the validator singleton.
 
     * @var PHONValidator
 
     */
 
    private $validator;
 
    
 
    /**
 
     * Constructor.
 
     */
 
    private function __construct() {
 
        $this->validator = PHONValidator::getInstance();
 
    }
 
    
 
    /**
 
     * Evaluates the provided PHON data.
 
     * @param string $phon The PHON data.
 
     * @return mixed The PHP values represented by the PHON data.
 
     */
 
    public function evaluate($phon) {
 
        if (!$this->validator->isSecure($phon)) {
 
            require_once 'InvalidPHON.php';
 
            throw new InvalidPHON('PHON data found to be unsecure and evaluation was halted', $phon);
 
        }
 
        $data = null;
 
        if (@eval("\$data = $phon;") === false) {
 
            require_once 'InvalidPHON.php';
 
            throw new InvalidPHON('PHON evaluation halted due to invalid data format', $phon);
 
        }
 
        return $data;
 
    }
 
}
 
 
 |