1<?php 2/** 3 * Copyright 2014 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * http://www.gnu.org/copyleft/gpl.html 19 * 20 * @file 21 */ 22 23/** 24 * A Config instance which stores all settings as a member variable 25 * 26 * @since 1.24 27 */ 28class HashConfig implements Config, MutableConfig { 29 30 /** 31 * Array of config settings 32 * 33 * @var array 34 */ 35 private $settings; 36 37 /** 38 * @return HashConfig 39 */ 40 public static function newInstance() { 41 return new HashConfig; 42 } 43 44 /** 45 * @param array $settings Any current settings to pre-load 46 */ 47 public function __construct( array $settings = [] ) { 48 $this->settings = $settings; 49 } 50 51 /** 52 * @inheritDoc 53 */ 54 public function get( $name ) { 55 if ( !$this->has( $name ) ) { 56 throw new ConfigException( __METHOD__ . ": undefined option: '$name'" ); 57 } 58 59 return $this->settings[$name]; 60 } 61 62 /** 63 * @inheritDoc 64 * @since 1.24 65 */ 66 public function has( $name ) { 67 return array_key_exists( $name, $this->settings ); 68 } 69 70 /** 71 * @see MutableConfig::set 72 * @param string $name 73 * @param mixed $value 74 */ 75 public function set( $name, $value ) { 76 $this->settings[$name] = $value; 77 } 78} 79