return $color; } } $colors = new Colors(); // Get next available item function function getNextAvailable($params) { global $colors; return $colors->getNextColor(); } // Test code $dispatch = new Dispatch(); $dispatch->register('getNextAvailable'); $dispatch->init(array('colors' => $colors)); echo "Getting next item: "; $color = $dispatch->next(); echo $color ? $color : 'end of list'; echo "\nGetting next item: "; $color = $dispatch->next(); echo $color ? $color : 'end of list'; echo "\nGetting next item: "; $color = $dispatch->next(); echo $color ? $color : 'end of list'; echo "\nGetting next item: "; $color = $dispatch->next(); echo $color ? $color : 'end of list'; echo "\nGetting next item: "; $color = $dispatch->next(); echo $color ? $color : 'end of list'; echo "\nGetting next item: "; $color = $dispatch->next();