1: <?php
2:
3: /**
4: * PhpOptions
5: * @link https://github.com/masicek/PhpOptions
6: * @author Viktor Mašíček <viktor@masicek.net>
7: * @license "New" BSD License
8: */
9:
10: namespace PhpOptions\Types;
11:
12: /**
13: * Abstract type with default functions
14: *
15: * @author Viktor Mašíček <viktor@masicek.net>
16: */
17: abstract class AType
18: {
19:
20: /**
21: * Flag of using filer on value
22: *
23: * @var bool
24: */
25: protected $useFilter = TRUE;
26:
27:
28: /**
29: * Set object
30: *
31: * @param array $setting Array of setting of object
32: */
33: public function __construct(&$settings = array())
34: {
35: if ($this->settingsHasFlag('notFilter', $settings))
36: {
37: $this->useFilter = FALSE;
38: }
39: }
40:
41:
42: /**
43: * Check type of value.
44: *
45: * @param mixed $value Checked value
46: *
47: * @return bool
48: */
49: public function check($value)
50: {
51: return TRUE;
52: }
53:
54:
55: /**
56: * Return uppercase name of type
57: *
58: * @return string
59: */
60: public function getName()
61: {
62: $className = get_class($this);
63: $start = strrpos($className, '\\') + 1;
64: $name = substr($className, $start, -4);
65: return strtoupper($name);
66: }
67:
68:
69: /**
70: * Return modified value, if flag useFiletr is set on TRUE.
71: *
72: * @param mixed $value Filtered value
73: *
74: * @return mixed
75: */
76: final public function filter($value)
77: {
78: if ($this->useFilter)
79: {
80: return $this->useFilter($value);
81: }
82: else
83: {
84: return $value;
85: }
86: }
87:
88:
89: /**
90: * Return modified value
91: *
92: * @param mixed $value Filtered value
93: *
94: * @return mixed
95: */
96: protected function useFilter($value)
97: {
98: return $value;
99: }
100:
101:
102: /**
103: * Return that settings has set flag (case insensitive).
104: *
105: * @param type $flag Searched flag
106: * @param array $settings Array of setting of object
107: *
108: * @return boolean
109: */
110: protected function settingsHasFlag($flag, &$settings)
111: {
112: $flag = strtolower($flag);
113: $settingsLower = $settings;
114: array_walk($settingsLower, function (&$item, $key) {
115: if (is_string($item))
116: {
117: $item = strtolower($item);
118: }
119: });
120: $flagIdx = array_search($flag, $settingsLower);
121: if ($flagIdx !== FALSE)
122: {
123: $hasFlag = TRUE;
124: // remove flag
125: unset($settings[$flagIdx]);
126: // reset indexing
127: $settings = array_values($settings);
128: }
129: else
130: {
131: $hasFlag = FALSE;
132: }
133:
134: return $hasFlag;
135: }
136:
137:
138: }
139: