class StringTokenizer {
	private string $token;
	private string $delim;

	public void __construct(string $str, string $delim = ' ') {
		$this->token = strtok($str, $delim);
		$this->delim = $delim;
	}

	public void __destruct() {
		unset($this);
	}

	public bool hasMoreTokens() {
		return ($this->token != NULL);
	}

	public string nextToken() {
		string $current = $this->token;
		$this->token = strtok($this->delim);
		return $current;
	}

}

class Program {
	void main() {
		string $str = "This is:@\t\n a TEST!";
		string $delim = " !@:\t\n";
		object $st = new StringTokenizer($str, $delim);
		while ($st->hasMoreTokens()) {
			print($st->nextToken(), "\n");
		}
		unset($st);
	}
}