PDA

Просмотр полной версии : php enumeration


Minimajack
16.05.2011, 12:49
В общем вопрос:
кто как организовывает?
иногда ну просто необходимо(удобно что ли :pardon:) организовать подобное, но нет аналога.
родилась идея заменить на
class Enumeration{
private $flag=null;
function __construct($numb=0){
$this->flag = $numb;
}
function hasFlag($flag){
return (boolean)( $this->flag & $flag );
}
function getFlag($flag){
return $this->flag;
}
function setFlag($flag){
$this->flag = $numb;
}
}
class FlagsEnumeration extends Enumeration{
function __toString(){
$obname = get_class($this);
$r = new ReflectionObject($this);
$const = $r->getConstants();
unset($r);
$s='';
foreach ($const as $k => $v) {
if($this->hasFlag($v)) {
$s.= $obname.'::'.$k.'|';
}
};
return rtrim($s,'|');
}
}
и использовать:
final class UpdateFlags extends FlagsEnumeration
{
const UPDATEFLAG_NONE = 0x00;
const UPDATEFLAG_SELFTARGET = 0x01;
const UPDATEFLAG_TRANSPORT = 0x02;
const UPDATEFLAG_TARGET_GUID = 0x04;
const UPDATEFLAG_LOWGUID = 0x08;
const UPDATEFLAG_HIGHGUID = 0x10;
const UPDATEFLAG_LIVING = 0x20;
const UPDATEFLAG_HAS_POSITION = 0x40;
const UPDATEFLAG_VEHICLE = 0x80;
const UPDATEFLAG_GO_POSITION = 0x100;
const UPDATEFLAG_GO_ROTATION = 0x200;
const UPDATEFLAG_UNK1 = 0x400;
}
$fl = new UpdateFlags(UpdateFlags::UPDATEFLAG_GO_POSITION|Up dateFlags::UPDATEFLAG_HIGHGUID);
print $fl.PHP_EOL;
и в дебаге удобно...да и увереность какая то появляется...
зы для огромного кол-ва значений не факт, что правильно отработает, но такого еще не встречалось