<?php

if(isset($_GET['show_source'])) {
    
show_source(__FILE__);
    die();
}

require_once(
'Enum.php');

class 
Fruit extends Enum {
    const 
Apple 1;
    const 
Orange 2;
    const 
Banana 3;
    const 
Pear 40;
    const 
Melon 5;
}

$fruit Fruit::Pear();

// Echo type Fruit
echo get_class($fruit);
echo 
PHP_EOL PHP_EOL;

// Echo string value 'Pear'
echo $fruit;
echo 
PHP_EOL PHP_EOL;
// Echo int value 40
echo $fruit();
echo 
PHP_EOL PHP_EOL;

// Echo 'true'
echo $fruit == Fruit::Pear()? 'true''false';
echo 
PHP_EOL PHP_EOL;

// Echo 'false'
echo $fruit == Fruit::Apple()? 'true''false';
echo 
PHP_EOL PHP_EOL;

// Echo Fruit count
echo count(Fruit::getValues());
echo 
PHP_EOL PHP_EOL;

// Loops over the Fruit enum and echoes every defined fruit
foreach(Fruit::getValues() as $fruit) {
    echo 
$fruit PHP_EOL;
}
echo 
PHP_EOL;

// Tries to parse the string to a Fruit Enum, echoes parse result and result Fruit
var_dump(Fruit::tryParse('Orange'$fruit));
echo 
$fruit;
echo 
PHP_EOL PHP_EOL;

// Tries to parse the string to a Fruit Enum, echoes parse result and result Fruit ($fruit == null)
var_dump(Fruit::tryParse('orange'$fruit));
var_dump($fruit);
echo 
PHP_EOL;

// Parses the string to a Fruit Enum, echoes result Fruit
echo Fruit::parse('Banana');
echo 
PHP_EOL PHP_EOL;

// Parses the string to a Fruit Enum, throws a ParseException
try {
    echo 
Fruit::parse('banana');
} catch (
ParseException $e) {
    echo 
$e->getMessage();
}
echo 
PHP_EOL PHP_EOL;

// Try to initialize Peach, throws an InvalidArgumentException
try {
    echo 
Fruit::Peach();
} catch (
InvalidArgumentException $e) {
    echo 
$e->getMessage();
}
echo 
PHP_EOL PHP_EOL;

// Cast an int to a fruit
$fruit Fruit::cast(5);
echo 
$fruit;
echo 
PHP_EOL PHP_EOL;

// Cast an int to a non-defined fruit
try {
    echo 
Fruit::cast(8);
} catch (
CastException $e) {
    echo 
$e->getMessage();
}
echo 
PHP_EOL PHP_EOL;