5 implements \ArrayAccess, \Iterator, \Countable
14 private $originalValues = array();
17 private $customFields = array();
35 return isset($this->changedValues[$name]);
44 public function get($name)
46 if (isset($this->values[$name]))
48 return $this->values[$name];
59 $this->customFields[$field] =
true;
68 if (!isset($this->customFields[$field]))
73 return $this->customFields[$field];
81 $this->customFields[$field] =
false;
89 public function set($name, $value)
93 $this->values[$name] = $value;
107 public function init($name, $value)
109 $this->values[$name] = $value;
116 $this->values = array();
122 $this->changedValues = array();
123 $this->originalValues = array();
131 return $this->values;
140 return $this->originalValues;
148 foreach ($values as $name => $value)
149 $this->
set($name, $value);
157 $this->values = array();
158 if ($values !==
null)
159 $this->values = $values;
169 $originalValuesIndex = array();
170 if (!empty($this->originalValues))
172 foreach(array_keys($this->originalValues) as $originalKey)
174 $originalValuesIndex[$originalKey] =
true;
178 $oldValue = $this->
get($name);
179 if ($oldValue != $value || ($oldValue ===
null && $value !==
null))
181 if (!isset($originalValuesIndex[$name]))
183 $this->originalValues[$name] = $this->
get($name);
185 elseif ($this->originalValues[$name] == $value)
187 unset($this->changedValues[$name]);
188 unset($this->originalValues[$name]);
192 $this->changedValues[$name] =
true;
204 return array_keys($this->changedValues);
213 foreach ($this->values as $k => $v)
215 if (isset($this->changedValues[$k]))
224 #[\ReturnTypeWillChange]
241 #[\ReturnTypeWillChange]
244 return key($this->values);
253 return ($key !=
null);
261 reset($this->values);
273 return isset($this->values[$offset]) || array_key_exists($offset, $this->values);
283 #[\ReturnTypeWillChange]
286 return $this->
get($offset);
297 $this->
set($offset, $value);
307 unset($this->values[$offset]);
308 if (isset($this->changedValues[$offset]))
309 unset($this->changedValues[$offset]);
317 return count($this->values);
328 if ($this->
isClone() && $cloneEntity->contains($this))
330 return $cloneEntity[$this];
333 $fieldsClone = clone $this;
336 if (!$cloneEntity->contains($this))
338 $cloneEntity[$this] = $fieldsClone;
349 return $this->isClone;
isMarkedCustom(string $field)
resetValues(array $values)
createClone(\SplObjectStorage $cloneEntity)
__construct(array $values=null)
unmarkCustom(string $field)
markCustom(string $field)
markChanged($name, $value)
offsetSet($offset, $value)