<?php //The actual implementation is just this file. Others are usage and tests. class TodoList extends ArrayObject { const CREATE = 'CREATE TABLE IF NOT EXISTS tasks (name VARCHAR(32) PRIMARY KEY, status INT)'; const SELECT = 'SELECT * FROM tasks'; const INSERT = 'INSERT INTO tasks VALUES (?,?)'; const UPDATE = 'UPDATE tasks SET status = ? WHERE name = ?'; const DELETE = 'DELETE FROM tasks WHERE name = ?'; protected $db; public function __construct(PDO $db) { $this->db = $db; $db->exec(static::CREATE); $data = $db->query(static::SELECT, PDO::FETCH_KEY_PAIR)->fetchAll(); parent::__construct($data, static::ARRAY_AS_PROPS); } public function offsetSet($task, $status) { if (!isset($this[$task])) $this->db->prepare(static::INSERT)->execute(array($task, $status)); else $this->db->prepare(static::UPDATE)->execute(array($status, $task)); parent::offsetSet($task, $status); } public function offsetUnset($task) { $this->db->prepare(static::DELETE)->execute($task); parent::offsetUnset($task); } }