<?php
////////////////////////////////////////////////
//
// File: abstract.WorkUnitDataType.php
//
////////////////////////////////////////////////
// Author: Adam Profitt
//
// Comments:
// Work unit enumeration sim class
//
////////////////////////////////////////////////
abstract class WorkUnitDataType {
//==============================================
// consts / vars
//==============================================
const NoneDataType = 0;
const BoolDataType = 1;
const NumericDataType = 2;
const StringDataType = 3;
const ArrayDataType = 4;
const JsonDataType = 5;
const UrlDataType = 6;
const FileDataType = 7;
private static $cachedConstantArr;
private $value;
private $name;
//==============================================
// construct
//==============================================
final public function __construct() {
$name = get_class($this);
$this->value = WorkUnitDataType::getValueFromName($name);
$this->name = $name;
}
//==============================================
// accessing
//==============================================
final public function getName() {
return $this->name;
}
final public function getValue() {
return $this->value;
}
//==============================================
// convenience
//==============================================
final public static function NoneDataType() { return new NoneDataType();}
final public static function BoolDataType() { return new BoolDataType();}
final public static function NumericDataType(){ return new NumericDataType();}
final public static function StringDataType() { return new StringDataType();}
final public static function ArrayDataType() { return new ArrayDataType();}
final public static function JsonDataType() { return new JsonDataType();}
final public static function UrlDataType() { return new UrlDataType();}
final public static function FileDataType() { return new FileDataType();}
//==============================================
// utility
//==============================================
final private static function getConstants() {
if (self::$cachedConstantArr == NULL) {
self::$cachedConstantArr = array();
}
$calledClass = get_called_class();
if (!array_key_exists($calledClass, self::$cachedConstantArr)) {
$reflect = new ReflectionClass($calledClass);
self::$cachedConstantArr[$calledClass] = $reflect->getConstants();
}
return self::$cachedConstantArr[$calledClass];
}
final public static function getNameFromValue($const) {
foreach (self::getConstants() as $name => $value) {
if ($value == $const) {
return $name;
}
}
return Null;
}
final public static function getValueFromName($text) {
foreach (self::getConstants() as $name => $value) {
if ($name == $text) {
return $value;
}
}
return -1;
}
}
class NoneDataType extends WorkUnitDataType {}
class BoolDataType extends WorkUnitDataType {}
class NumericDataType extends WorkUnitDataType {}
class StringDataType extends WorkUnitDataType {}
class ArrayDataType extends WorkUnitDataType {}
class JsonDataType extends WorkUnitDataType {}
class UrlDataType extends WorkUnitDataType {}
class FileDataType extends WorkUnitDataType {}
$a = WorkUnitDataType::NumericDataType();
var_dump($a);
echo "\n";
echo $a->getName() . "\n";
echo $a->getValue() . "\n";
echo "\n\n";
$a = WorkUnitDataType::BoolDataType();
var_dump($a);
echo "\n";
echo $a->getName() . "\n";
echo $a->getValue() . "\n";
Warning: Private methods cannot be final as they are never overridden by other classes in /in/fGVvo on line 78
object(NumericDataType)#1 (2) {
["value":"WorkUnitDataType":private]=>
int(2)
["name":"WorkUnitDataType":private]=>
string(15) "NumericDataType"
}
NumericDataType
2
object(BoolDataType)#2 (2) {
["value":"WorkUnitDataType":private]=>
int(1)
["name":"WorkUnitDataType":private]=>
string(12) "BoolDataType"
}
BoolDataType
1
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Warning: Private methods cannot be final as they are never overridden by other classes in /in/fGVvo on line 78
object(NumericDataType)#1 (2) {
["value":"WorkUnitDataType":private]=>
int(2)
["name":"WorkUnitDataType":private]=>
string(15) "NumericDataType"
}
NumericDataType
2
object(BoolDataType)#2 (2) {
["value":"WorkUnitDataType":private]=>
int(1)
["name":"WorkUnitDataType":private]=>
string(12) "BoolDataType"
}
BoolDataType
1