Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * ILLI
- *
- * @category ILLI_System
- * @package ILLI
- * @subpackage System
- * @link http://illi.be
- * @license http://l.illi.be
- * @copyright ILLI Conference
- */
- NAMESPACE ILLI\System;
- USE ReflectionClass AS __INTERNAL_REFLECTIONCLASS;
- USE ReflectionMethod AS __INTERNAL_REFLECTIONMETHOD;
- USE Exception AS __INTERNAL_EXCEPTION;
- /**
- * ILLI System Datatype Scalar
- *
- * common scalar functions
- *
- * @category ILLI_System
- * @package ILLI
- * @subpackage System
- * @namespace ILLI\System
- * @link http://illi.be
- * @license http://l.illi.be
- * @copyright ILLI Conference
- * @since 2.0.0-1
- * @version 2.0.0-1
- * @abstract
- */
- INTERFACE iDataTypeScalar EXTENDS iDataType
- {
- public function toUpper();
- public function toLower();
- public function toTitle();
- public function toArray();
- }
- /**
- * ILLI System Trait DataTypeScalar
- */
- TRAIT tDataTypeScalar
- {
- public function toUpper()
- {
- $this->__value = mb_convert_case($this->__value, MB_CASE_UPPER, DataType::ENCODING);
- return $this;
- }
- public function toLower()
- {
- $this->__value = mb_convert_case($this->__value, MB_CASE_LOWER, DataType::ENCODING);
- return $this;
- }
- public function toTitle()
- {
- $this->__value = mb_convert_case($this->__value, MB_CASE_TITLE, DataType::ENCODING);
- return $this;
- }
- }
- /**
- * ILLI System Trait DataTypeScalarDelegate
- */
- TRAIT tDataTypeScalarDelegate
- {
- public function toUpper()
- {
- MemberMethod::each($this, __FUNCTION__);
- return $this;
- }
- public function toLower()
- {
- MemberMethod::each($this, __FUNCTION__);
- return $this;
- }
- public function toTitle()
- {
- MemberMethod::each($this, __FUNCTION__);
- return $this;
- }
- }
- /**
- * ILLI System Abstract Datatype Scalar
- *
- * generic functions for all scalar types
- *
- * @category ILLI_System
- * @package ILLI
- * @subpackage System
- * @namespace ILLI\System
- * @link http://illi.be
- * @license http://l.illi.be
- * @copyright ILLI Conference
- * @since 2.0.0-1
- * @version 2.0.0-1
- * @abstract
- * @todo priority (setter)
- */
- CLASS DataTypeScalar EXTENDS DataType IMPLEMENTS iSerializable, iDataTypeScalar
- {
- USE tDataTypeScalar;
- USE tSerializable;
- /**
- * original scalar value
- * @var scalar
- */
- private $__init = NULL;
- private $__value = NULL;
- /**
- * serializable private properties
- * @var array
- * @static
- */
- private static $__serializable =
- [
- '__value'
- ];
- public function __construct($value = NULL, Bits $BITS = NULL)
- {
- if(NULL !== $value
- && FALSE === is_scalar($value))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_SCALAR);
- self::$__tSerializableProperties = self::$__serializable;
- $this->__init = $value;
- $this->set($value);
- }
- public function reset()
- {
- $this->set($this->__init);
- return $this;
- }
- public function set($value)
- {
- if(NULL === $value)
- return $this;
- $this->__value = (TRUE === is_string($value))
- ? $this->normalizeEncoding($value)
- : $value;
- return $this;
- }
- public function get()
- {
- return $this->__value;
- }
- public static function isMultiByte($value)
- {
- return mb_strlen($value) !== strlen($value);
- }
- public static function detectEncoding($value)
- {
- return mb_detect_encoding($value);
- }
- public static function normalizeEncoding($value)
- {
- return (self::detectEncoding($value) !== DataType::ENCODING)
- ? mb_convert_encoding($value, DataType::ENCODING)
- : $value;
- }
- public function __toString()
- {
- return $this->get();
- }
- public function width()
- {
- return mb_strwidth($this->__value, DataType::ENCODING);
- }
- public function length()
- {
- return mb_strlen($this->__value, DataType::ENCODING);
- }
- public function toArray()
- {
- $strlen = $this->length();
- $value = $this->__value;
- $result = [];
- while($strlen > 0)
- {
- $result[] = mb_substr($value, 0, 1, DataType::ENCODING);
- $value = mb_substr($value, 1, $strlen, DataType::ENCODING);
- $strlen = mb_strlen($value);
- }
- return $result;
- }
- }
- /**
- * ILLI System Datatype ScalarArray
- *
- * typesafe/autocast values to DatatypeScalar
- *
- * @category ILLI_System
- * @package ILLI
- * @subpackage System
- * @namespace ILLI\System
- * @link http://illi.be
- * @license http://l.illi.be
- * @copyright ILLI Conference
- * @since 2.0.0-1
- * @version 2.0.0-1
- * @abstract
- * @todo priority (setter)
- */
- CLASS DataTypeScalarArray EXTENDS DataTypeArray IMPLEMENTS iDataTypeScalar
- {
- USE tDataTypeScalarDelegate;
- /**
- * @param array|DataTypeArray $array initial value
- */
- public function __construct($array = [], Bits $BITS = NULL)
- {
- if(NULL === $array)
- $array = [];
- if($array instanceOf DataTypeScalarArray
- || $array instanceOf DataTypeScalarArraySegment)
- $array = $array->toArray();
- if(FALSE === is_array($array))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_ARRAY);
- foreach($array as $index => $value)
- {
- try
- {
- if(FALSE === is_scalar($value)
- && FALSE === ($value instanceOf DataTypeScalar))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'DataTypeScalar']);
- }
- catch(ArgumentException $e)
- {
- throw new ArgumentOutOfRangeException(E::ARGUMENT_DATATYPE_OUT_OF_RANGE, $e, [
- 'key' => $index,
- 'type' => gettype($value)
- ]);
- }
- if(TRUE === is_scalar($value))
- $array[$index] = new DataTypeScalar($value);
- }
- parent::__construct($array, $BITS);
- }
- // ArrayAccess
- public function offsetSet($offset, $value)
- {
- if(TRUE === is_scalar($value))
- return parent::offsetSet($offset, new DataTypeScalar($value));
- if(TRUE === ($value instanceOf DataTypeScalar))
- return parent::offsetSet($offset, $value);
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'DataTypeScalar']);
- }
- // IndexAccess
- public function indexSet($index, $value)
- {
- if(TRUE === is_scalar($value))
- return parent::indexSet($offset, new DataTypeScalar($value));
- if(TRUE === ($value instanceOf DataTypeScalar))
- return parent::indexSet($offset, $value);
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'DataTypeScalar']);
- }
- public function merge($array)
- {
- if(FALSE === is_array($array)
- && FALSE === ($array instanceOf DataTypeScalarArray))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_ARRAY);
- if(FALSE === (bool) $array)
- return $this;
- foreach($array as $k => $v)
- {
- try
- {
- if(FALSE === is_scalar($v)
- && FALSE === ($v instanceOf DataTypeScalar))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'DataTypeScalar']);
- }
- catch(ArgumentException $e)
- {
- throw new ArgumentOutOfRangeException(E::ARGUMENT_DATATYPE_OUT_OF_RANGE, $e, [
- 'key' => $index,
- 'type' => gettype($value)
- ]);
- }
- if(TRUE === is_scalar($v))
- $array[$k] = new DataTypeScalar($v);
- }
- return parent::merge($array);
- }
- /**
- * append or prepend offset by IT_MODE_FI
- */
- public function insert($index, $value)
- {
- if(FALSE === is_scalar($value)
- && FALSE === ($value instanceOf DataTypeScalar))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'DataTypeScalar']);
- if(TRUE === is_scalar($value))
- $value = new DataTypeScalar($value);
- return parent::insert($index, $value);
- }
- }
- /**
- * ILLI System Datatype ScalarArraySegment
- *
- * typesafe/autocast array to DatatypeScalarArray
- *
- * @category ILLI_System
- * @package ILLI
- * @subpackage System
- * @namespace ILLI\System
- * @link http://illi.be
- * @license http://l.illi.be
- * @copyright ILLI Conference
- * @since 2.0.0-1
- * @version 2.0.0-1
- * @abstract
- */
- CLASS DataTypeScalarArraySegment EXTENDS DataTypeArraySegment IMPLEMENTS iDataTypeScalar
- {
- USE tDataTypeScalarDelegate;
- public function __construct($DTA, $startIndex = NULL, $length = NULL)
- {
- if(FALSE === ($DTA instanceOf DataTypeScalarArray)
- && FALSE === is_array($DTA))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'DataTypeScalarArray']);
- $DTA = ($DTA instanceOf DataTypeScalarArray)
- ? $DTA
- : new DataTypeScalarArray($DTA);
- parent::__construct($DTA, $startIndex, $length);
- }
- }
- /**
- * ILLI System Member Method Delegation
- *
- * @category ILLI_System
- * @package ILLI
- * @subpackage System
- * @namespace ILLI\System
- * @link http://illi.be
- * @license http://l.illi.be
- * @copyright ILLI Conference
- * @since 2.0.0-1
- * @version 2.0.0-1
- * @abstract
- */
- ABSTRACT CLASS MemberMethod EXTENDS Member
- {
- public static function each($memberList, $method, $args = [])
- {
- if(FALSE === ($memberList instanceOf iIterator))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_INSTANCE, ['instance' => 'iIterator']);
- $result = [];
- foreach($memberList as $index => $member)
- try
- {
- $result[] = MemberMethod::call($member, $method, $args);
- }
- catch(MemberMethodRuntimeException $e)
- {
- throw new MemberMethodRuntimeStackException($e, [
- 'memberlist' => get_class($memberList),
- 'key' => $index,
- 'exception' => get_class($e)]);
- }
- return $result;
- }
- public static function call($member, $method, $args = [])
- {
- if(NULL === $member)
- throw new ArgumentNullException;
- if(FALSE === is_object($member))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_MEMBER);
- if(NULL === $method)
- throw new ArgumentNullException;
- if(FALSE === is_string($method))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_STRING);
- if($method === '')
- throw new ArgumentException(E::ARGUMENT_EXPECTED_STRING_EMPTY);
- if(FALSE === is_array($args))
- throw new ArgumentException(E::ARGUMENT_EXPECTED_ARRAY);
- if(FALSE === method_exists($member, $method))
- throw new MemberMethodNotFoundException(
- ['member' => get_class($member), 'method' => $method]);
- if(FALSE === is_callable(array($member, $method)))
- throw new MemberMethodNotCallableException(
- ['member' => get_class($member), 'method' => $method]);
- $result = NULL;
- try
- {
- switch(sizeOf($args)):
- case 0:
- $result = $member->$method();
- break;
- case 1:
- $result = $member->$method
- (
- $args[0]
- );
- break;
- case 2:
- $result = $member->$method
- (
- $args[0], $args[1]
- );
- break;
- case 3:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2]
- );
- break;
- case 4:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3]
- );
- break;
- case 5:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4]
- );
- break;
- case 6:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]
- );
- break;
- case 7:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6]
- );
- break;
- case 8:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7]
- );
- break;
- case 9:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8]
- );
- break;
- case 10:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9]
- );
- break;
- case 11:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10]
- );
- break;
- case 12:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11]
- );
- break;
- case 13:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12]
- );
- break;
- case 14:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13]
- );
- break;
- case 15:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14]
- );
- break;
- case 16:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15]
- );
- break;
- case 17:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16]
- );
- break;
- case 18:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17]
- );
- break;
- case 19:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18]
- );
- break;
- case 20:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19]
- );
- break;
- case 21:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20]
- );
- break;
- case 22:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21]
- );
- break;
- case 23:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22]
- );
- break;
- case 24:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23]
- );
- break;
- case 25:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24]
- );
- break;
- case 26:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25]
- );
- break;
- case 27:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25], $args[26]
- );
- break;
- case 28:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25], $args[26], $args[27]
- );
- break;
- case 29:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25], $args[26], $args[27], $args[28]
- );
- break;
- case 30:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25], $args[26], $args[27], $args[28], $args[29]
- );
- break;
- case 31:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25], $args[26], $args[27], $args[28], $args[29],
- $args[30]
- );
- break;
- case 32:
- $result = $member->$method
- (
- $args[0], $args[1], $args[2], $args[3], $args[4], $args[5],
- $args[6], $args[7], $args[8], $args[9], $args[10], $args[11],
- $args[12], $args[13], $args[14], $args[15], $args[16], $args[17],
- $args[18], $args[19], $args[20], $args[21], $args[22], $args[23],
- $args[24], $args[25], $args[26], $args[27], $args[28], $args[29],
- $args[30], $args[32]
- );
- break;
- default:
- $result = call_user_func_array([$member, $method], $args);
- endswitch;
- }
- catch(__INTERNAL_EXCEPTION $e)
- {
- throw new MemberMethodRuntimeException($e, [
- 'exception' => get_class($e),
- 'member' => get_class($member),
- 'method' => $method
- ]);
- }
- return $result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement