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: 4 years ago
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
 */

?>