class Test {

	public void goto_test1() {
		int $i = 0;
		a:
		print("Foo $i\n");
		if($i > 5)
			goto b;
		$i++;
		goto a;
		b:
		print("Bar $i\n\n");
	}

	public void goto_test2(int $a = 2) {
		switch($a) {
			case 1:
				print("\$a is 1\n\n");
				goto out;
			case 2:
				print("\$a is 2\n\n");
				goto out;
			case 3:
				print("\$a is 3\n\n");
				goto out;
			case 4:
				print("\$a is 4\n\n");
				goto out;
		}
		out:
	}

	public void goto_test3() {
		int $a = 10;
		a:
		$a--;
		print("$a\n");
		if($a > 5) {
			goto a;
		}
		print("\n");
	}

	public void goto_test4() {
		string[] $headers = {'subject', 'bcc', 'to', 'cc', 'date', 'sender'};
		int $pos = 0;
		int $c;
		hIterator: {
			$c = 0;
			print($headers[$pos], "\n");
			cIterator: {
				print(" ", $headers[$pos][$c], "\n");
				if(strlen($headers[$pos]) <= ++$c) {
					goto cIteratorExit;
				}
				goto cIterator;
			}
			cIteratorExit: {
				if(array_key_exists(++$pos, $headers)) {
					goto hIterator;
				}
			}
		}
	}
}

class Program {
	private object $test;

	public void __construct() {
		$this->test = new Test();
	}

	public void main() {
		$this->test->goto_test1();
		$this->test->goto_test2();
		$this->test->goto_test3();
		$this->test->goto_test4();
	}

}