<?php
 
/**
 
 * This scripts demonstates some basic operations with enum objects.
 
 */
 
require '../class/Co3/CodeGen/Enum.php';
 
use Co3\CodeGen\Enum as Enum;
 
//create a the enum Direction in the globsl namespace
 
Enum::create('Direction',array('Up','Down','Left','Right'));
 
 
//get an instance using a class constant
 
$up = Direction::get(Direction::Up);
 
$down = Direction::get(Direction::Down);
 
 
//get an instance using a string
 
$upToo = Direction::get('Up');
 
 
//$up == $upToo is true
 
echo '$up == $upToo is ';
 
echo ($up == $upToo)? 'true' : 'false';
 
echo '<br/>';
 
 
//$up === $upToo is true
 
echo '$up === $upToo is ';
 
echo ($up === $upToo)? 'true' : 'false';
 
echo '<br/>';
 
 
//$up == 'Up' is true
 
echo '$up == \'Up\' is ';
 
echo ($up == 'Up')? 'true' : 'false';//$up is castet to string
 
echo '<br/>';
 
 
//$up === 'Up' is false
 
echo '$up === \'Up\' is ';
 
echo ($up === 'Up')? 'true' : 'false';//type strict comparison
 
echo '<br/>';
 
 
//$up === $down is false
 
echo '$up == $down is ';
 
echo ($up == $down)? 'true' : 'false';
 
echo '<br/>';
 
 
//cast Direction to string
 
echo 'going ' . $up . '.<br/>';
 
echo "going $up and {$down}<br/>";
 
 
//type hinting and switch
 
function getOpposit (Direction $d){
 
    //switch does not work with objects so $d is implicitly casted to a string
 
    switch($d){
 
        case 'Up':
 
            return Direction::get('Down'); break;
 
        case 'Down':
 
            return Direction::get('Up'); break;
 
        case 'Left':
 
            return Direction::get('Right'); break;
 
        case 'Right':
 
            return Direction::get('Left'); break;
 
    } 
 
}
 
 
//cast to array
 
foreach(Direction::toArray() as $direction){
 
    echo "The opposit of {$direction} is ";
 
    echo getOpposit($direction);
 
    echo '<br/>'; 
 
}
 
 
 |