Browse Source

implement abstract class for ArrayAccess interface

Frank Nägler 11 years ago
parent
commit
a921d0bb69
4 changed files with 113 additions and 43 deletions
  1. 1 0
      index.php
  2. 107 0
      lib/Pico/Model/AbstractModel.php
  3. 5 22
      lib/Pico/Model/Meta.php
  4. 0 21
      lib/Pico/Model/Page.php

+ 1 - 0
index.php

@@ -9,6 +9,7 @@ define('THEMES_DIR', ROOT_DIR .'themes/');
 define('CACHE_DIR', LIB_DIR .'cache/');
 
 require(ROOT_DIR .'vendor/autoload.php');
+require_once LIB_DIR . 'Pico/Model/AbstractModel.php';
 require_once LIB_DIR . 'Pico/Model/Meta.php';
 require(LIB_DIR .'pico.php');
 $pico = new Pico();

+ 107 - 0
lib/Pico/Model/AbstractModel.php

@@ -0,0 +1,107 @@
+<?php
+
+namespace Pico\Model;
+
+/**
+ * Abstract model which implements the ArrayAccess interface
+ *
+ * @author Frank Nägler
+ * @link http://pico.dev7studios.com
+ * @license http://opensource.org/licenses/MIT
+ * @version 0.1
+ */
+class AbstractModel implements \ArrayAccess {
+	protected $data  = array();
+
+	public function get($key) {
+		return (isset($this->data[$key])) ? $this->data[$key] : null;
+	}
+
+	public function set($key, $value) {
+		$this->data[$key] = $value;
+	}
+
+	public function __get($name) {
+		return $this->get($name);
+	}
+
+	public function __set($name, $value) {
+		$this->set($name, $value);
+	}
+
+	public function __call($name, $args) {
+		if (strpos($name, 'get') !== false) {
+			$name = substr($name, 3);
+			return $this->get($name);
+		}
+		if (strpos($name, 'set') !== false) {
+			$name = substr($name, 3);
+			return $this->set($name, $args[0]);
+		}
+
+	}
+
+	/**
+	 * (PHP 5 &gt;= 5.0.0)<br/>
+	 * Whether a offset exists
+	 *
+	 * @link http://php.net/manual/en/arrayaccess.offsetexists.php
+	 * @param mixed $offset <p>
+	 *                      An offset to check for.
+	 *                      </p>
+	 * @return boolean true on success or false on failure.
+	 *                      </p>
+	 *                      <p>
+	 *                      The return value will be casted to boolean if non-boolean was returned.
+	 */
+	public function offsetExists($offset) {
+		return (isset($this->data[$offset]));
+	}
+
+	/**
+	 * (PHP 5 &gt;= 5.0.0)<br/>
+	 * Offset to retrieve
+	 *
+	 * @link http://php.net/manual/en/arrayaccess.offsetget.php
+	 * @param mixed $offset <p>
+	 *                      The offset to retrieve.
+	 *                      </p>
+	 * @return mixed Can return all value types.
+	 */
+	public function offsetGet($offset) {
+		return $this->get($offset);
+	}
+
+	/**
+	 * (PHP 5 &gt;= 5.0.0)<br/>
+	 * Offset to set
+	 *
+	 * @link http://php.net/manual/en/arrayaccess.offsetset.php
+	 * @param mixed $offset <p>
+	 *                      The offset to assign the value to.
+	 *                      </p>
+	 * @param mixed $value  <p>
+	 *                      The value to set.
+	 *                      </p>
+	 * @return void
+	 */
+	public function offsetSet($offset, $value) {
+		$this->set($offset, $value);
+	}
+
+	/**
+	 * (PHP 5 &gt;= 5.0.0)<br/>
+	 * Offset to unset
+	 *
+	 * @link http://php.net/manual/en/arrayaccess.offsetunset.php
+	 * @param mixed $offset <p>
+	 *                      The offset to unset.
+	 *                      </p>
+	 * @return void
+	 */
+	public function offsetUnset($offset) {
+		if ($this->offsetExists($offset)) {
+			unset($this->data[$offset]);
+		}
+	}
+}

+ 5 - 22
lib/Pico/Model/Meta.php

@@ -10,12 +10,10 @@ namespace Pico\Model;
  * @license http://opensource.org/licenses/MIT
  * @version 0.1
  */
-class Meta {
-	protected $headers  = array();
-
+class Meta extends AbstractModel {
 	public function __construct($rawData = null) {
 		if ($rawData !== null) {
-			$this->parseRawData($rawData);
+			$this->setRawData($rawData);
 		}
 	}
 
@@ -23,28 +21,13 @@ class Meta {
 		$this->parseRawData($rawData);
 	}
 	
-	public function get($key) {
-		return (isset($this->headers[$key])) ? $this->headers[$key] : null;
-	}
-
 	public function getFormattedDate() {
 		global $config;
-		if (isset($this->headers['date'])) {
-			return date($config['date_format'], strtotime($this->headers['date']));
+		if (isset($this->data['date'])) {
+			return date($config['date_format'], strtotime($this->data['date']));
 		}
 		return null;
 	}
-	
-	public function __get($name) {
-		return $this->get($name);
-	}
-
-	public function __call($name, $args) {
-		if (strpos($name, 'get') !== false) {
-			$name = substr($name, 3);
-			return $this->get($name);
-		}
-	}
 
 	protected function parseRawData($rawData) {
 		$metaPart   = substr($rawData, 0, strpos($rawData, '*/'));
@@ -55,7 +38,7 @@ class Meta {
 				$parts  = explode(':', $line);
 				$key    = array_shift($parts);
 				$val    = implode($parts);
-				$this->headers[$key]    = trim($val);
+				$this->set($key, trim($val));
 			}
 		}
 	}

+ 0 - 21
lib/Pico/Model/Page.php

@@ -1,21 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: franae
- * Date: 23.10.13
- * Time: 21:10
- */
-
-namespace Pico\Model;
-
-
-class Page {
-	protected $title;
-	protected $url;
-	protected $author;
-	protected $date;
-#	protected $date_formatted;
-	protected $content;
-	protected $excerpt;
-	protected $meta;
-}