* new ArrayData(array( * "ClassName" => "Page", * "AddAction" => "Add a new Page page", * )); * * * @package sapphire * @subpackage view */ class ArrayData extends ViewableData { /** * @var array * @see ArrayData::_construct() */ protected $array; /** * @param object|array $value An associative array, or an object with simple properties. * Converts object properties to keys of an associative array. */ public function __construct($value) { if (is_object($value)) { $this->array = get_object_vars($value); } elseif (ArrayLib::is_associative($value)) { $this->array = $value; } elseif (is_array($value) && count($value) === 0) { $this->array = array(); } else { $message = 'Parameter to ArrayData constructor needs to be an object or associative array'; throw new InvalidArgumentException($message); } parent::__construct(); } /** * Get the source array * * @return array */ public function getArray() { return $this->array; } /** * Gets a field from this object. * * @param string $field * * If the value is an object but not an instance of * ViewableData, it will be converted recursively to an * ArrayData. * * If the value is an associative array, it will likewise be * converted recursively to an ArrayData. */ public function getField($f) { $value = $this->array[$f]; if (is_object($value) && !$value instanceof ViewableData) { return new ArrayData($value); } elseif (ArrayLib::is_associative($value)) { return new ArrayData($value); } else { return $value; } } /** * Add or set a field on this object. * * @param string $field * @param mixed $value */ public function setField($field, $value) { $this->array[$field] = $value; } /** * Check array to see if field isset * * @param string Field Key * @return bool */ public function hasField($f) { return isset($this->array[$f]); } /** * @deprecated Use get_object_vars($obj) * Converts an object with simple properties to * an associative array. * * @param obj $obj * @return array */ protected static function object_to_array($obj) { return get_object_vars($obj); } /** * Converts an associative array to a simple object * * @param array * @return obj $obj */ public static function array_to_object($arr = null) { $obj = new stdClass(); if ($arr) foreach($arr as $name => $value) $obj->$name = $value; return $obj; } /** * This is pretty crude, but it helps diagnose error situations */ function forTemplate() { return var_export($this->array, true); } }