Return to Snippet

Revision: 4706
at January 16, 2008 21:23 by Cory


Initial Code
<?php
	class Collection {
		private $items;
		private $attributes;
		
		public function __construct() {
			$this->items = array();
			$this->attributes = array();
			$this->attributes['Count'] = 0;
			$this->attributes['IsFixedSize'] = false;
			$this->attributes['FixedSize'] = 0;
			$this->attributes['IsReadOnly'] = false;
		}
		
		public function __get($var) {
			if(key_exists($var, (array)$this->attributes)) {
				return $this->attributes[$var];
			}
			else {
				throw new Exception("The property {$var} does not exist", 0);
			}
		}
		
		public function __set($var, $value) {
			if(key_exists($var, (array)$this->attributes)) {
				$this->attributes[$var] = $value;
			}
			else {
				throw new Exception("The property {$var} cannot be set as it does not exist", 0);
			}
		}
		
		public function Add($item) {
			if($this->IsFixedSize) {
				if($this->Count < $this->FixedSize) {
					$this->items[] = $item;
					$this->Count += 1;
				}
				else {
					throw new Exception("Cannot not add more items to collection. Max size is {$this->FixedSize}", 0);
				}
			}
			else if($this->IsReadOnly) {
				throw new Exception("Cannot add item to a read only collection", 0);
			}
			else {
				$this->items[] = $item;
				$this->Count += 1;
			}
		}
		
		public function AddRange(array $items) {
			foreach($items as $item) {
				self::Add($item);
			}
		}
		
		public function Contains($item) {
			foreach($this->items as $i) {
				if($i == $item) {
					return true;
				}
			}
			return false;
		}
		
		public function Get($index) {
			if(key_exsits($index, $this->items)) {
				return $this->items[$index];
			}
			return false;
		}
		
		public function GetCollectionAsArray() {
			return $this->items;
		}
		
		public function GetCollectionAsString() {
			return implode(", ", $this->items);
		}
		
		public function IndexOf($item, $startIndex = 0) {
			for($i = $startIndex; $i < $this->Count; $i++) {
				if($this->items[$i] == $item) {
					return $i;
					break;
				}
			}
			return -1;
		}
		
		public function LastIndexOf($item) {
			$lastIndex = -1;
			
			for($i = 0; $i < $this->Count; $i++) {
				if($this->items[$i] == $item) {
					$lastIndex = $i;
				}
			}
			return $lastIndex;
		}
		
		public function Insert($index, $item) {
			if($this->IsFixedSize) {
				if($index < $this->FixedSize) {
					$this->items[$index] = $item;
					$this->Count += 1;
				}
				else {
					throw new Exception("Cannot insert item at {$index}. Max size is {$this->FixedSize}", 0);
				}
			}
			else if($this->IsReadOnly) {
				throw new Exception("Cannot insert an item into a read only collection", 0);
			}
			else {
				$this->items[$index] = $item;
				$this->Count += 1;
			}
		}
		
		public function Remove($item) {
			$index = self::IndexOf($item);
			self::RemoveAt($index);
		}
		
		public function RemoveAt($index) {
			if(!$this->IsReadOnly) {
				if(key_exists($index, $this->items)) {
					unset($this->items[$index]);
					$this->Count -= 1;
				}
				else {
					throw new Exception("Index out of range. The index {$index} is out of range of the collection", 0);
				}
			}
			else {
				throw new Exception("Cannot remove item from read only collection", 0);
			}
		}
		
		public function RemoveRange($startIndex, $endIndex) {
			for($i = $startIndex; $i < $endIndex; $i++) {
				self::RemoveAt($i);
			}
		}
		
		public function Sort() {
			sort($this->items, SORT_STRING);
		}
	}
?>

Initial URL


Initial Description


Initial Title
Collection class

Initial Tags
class, php, array

Initial Language
PHP