Login   Register  
PHP Classes
elePHPant
Icontem

File: examples/enum_advanced.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Oliver Anan  >  PHP One Line Enum  >  examples/enum_advanced.php  >  Download  
File: examples/enum_advanced.php
Role: Example script
Content type: text/plain
Description: advanced example script
Class: PHP One Line Enum
Create enumerated types from arrays of values
Author: By
Last change:
Date: 2011-04-23 12:50
Size: 1,754 bytes
 

Contents

Class file image Download
<?php
/**
 * This script demonstarates how to use bitwise operations
 * on enum objects.
 */

require '../class/Co3/CodeGen/Enum.php';
use 
Co3\CodeGen\Enum as Enum;
//Using Enums with bitflags
//create the Enum Role
Enum::create(
    
'Role',
    array(
        
'Administrator',
        
'Editor',
        
'Programmer',
        
'Manager',
        
'Monkey'
    
),
    
true //If the third parameter is true all genrated keys are powers of 2
);
 
//combine roles keys with |. The result is an integer
$bobosRoles =
    
Role::get(Role::Programmer)->getKey()
    | 
Role::get(Role::Monkey)->getKey()
    | 
Role::get(Role::Administrator)->getKey();

//test if a bit is set
foreach(Role::toArray() as $role){
    if(
$role->getKey() & $bobosRoles){
        echo 
"Bobo is a {$role} <br/>";
    } else {
        echo 
"Bobo is no {$role}<br/>";
    }
}

/*Output:
Bobo is a Administrator 
Bobo is no Editor
Bobo is a Programmer 
Bobo is no Manager
Bobo is a Monkey
 */

//create a enum with custom keys in a namespace
Enum::create(
    
'Social\Contact',
    array(
        
1=>'Personal',
        
3=>'Friend',//3 = 1|2
        
5=>'Family',//5 = 1|4
        
13=>'Parent',//13 = 5|8
        
16=>'Business',
        
48=>'CoWorker',//48 = 6|32
    
)
);

$michael 
    
Social\Contact::get('CoWorker')->getKey()
    | 
Social\Contact::get('Friend')->getKey();
    
foreach(
Social\Contact::toArray() as $contactType){
    if( (
$contactType->getKey() & $michael) == $contactType->getKey()){
        echo 
"Michael is a '{$contactType}' contact <br/>";
    } else {
        echo 
"Michael is no '{$contactType}' contact <br/>";
    }
}    
/*Output:
Michael is a 'Personal' contact 
Michael is a 'Friend' contact 
Michael is no 'Family' contact 
Michael is no 'Parent' contact 
Michael is a 'Business' contact 
Michael is a 'CoWorker' contact 
 */

?>