validateValue($value); if (!empty($value) && !$this->isValueInArray($value)) { $return = TRUE; $this->addItemToSet($value); } return $return; } /** * Returns the set * * @return array */ public function getItems(){ return $this->items; } /** * Checks if a value always in the set * * @param mixed $value * @return boolean */ protected function isValueInArray($value){ $return = FALSE; $items = & $this->getItems(); foreach ($items as $itemValue) { if ($this->compareTwoValues($itemValue, $value)) { $return = TRUE; break; } } return $return; } /** * Adds one item to the set directly * * @param unknown_type $value */ private function addItemToSet($value){ $this->items[] = $value; } /** * Abstract method * Must be implemented * * Validates the incomming value for the set * * @param mixed $value */ protected abstract function validateValue($value); /** * Abtract method * Must be implemented * * Compares two values * * @param mixed $value1 * @param mixed $value2 */ protected abstract function compareTwoValues($value1, $value2); } /** * Set of type 'int' * */ class intSet extends Set { protected function validateValue($value){ $value = intval($value); return $value; } protected function compareTwoValues($value1, $value2){ $return = FALSE; if ($value1 === $value2) { $return = TRUE; } return $return; } } /** * Set of type 'array' * */ class arraySet extends Set { protected function validateValue($value){ if (!is_array($value)) { $value = array($value); } return $value; } protected function compareTwoValues($value1, $value2){ $return = FALSE; $arrayDiff = array_diff($value1, $value2); if (empty($arrayDiff)) { $return = TRUE; } return $return; } } /** * Set of type 'string' * */ class stringSet extends Set { protected function validateValue($value){ // String checken if (!is_string($value)) { $value = (string) $value; } return $value; } protected function compareTwoValues($value1, $value2){ $return = FALSE; if ($value1 === $value2) { $return = TRUE; } return $return; } } /** * Example code */ echo 'Begin: intSet
-------
'; $intSet = new intSet(); $intSet->addItem("Test String"); $intSet->addItem(5); $intSet->addItem(5); $intSet->addItem(array("Test String", 5)); echo '
'.print_r($intSet->getItems(), 1).'

'; echo 'Begin: arraySet
-------
'; $arraySet = new arraySet(); $arraySet->addItem("Test String"); $arraySet->addItem(5); $arraySet->addItem(array("Test String", 5)); $arraySet->addItem(array("Test String", 5)); echo '
'.print_r($arraySet->getItems(), 1).'

'; echo 'Begin: stringSet
-------
'; $stringSet = new stringSet(); $stringSet->addItem("Test String"); $stringSet->addItem("Test String"); $stringSet->addItem(5); $stringSet->addItem(array("Test String", 5)); echo '
'.print_r($stringSet->getItems(), 1).'

'; ?>