src/TypedClass.php
public function getIterator(): Traversable
	{
		return (function &() {
			foreach ($this->_defaultValues as $k => &$vDefault) {
				if ($vDefault instanceof AtomicInterface) {
					$v     = $this->{$k}->get();
					$vOrig = $v;

					yield $k => $v;

					if ($v !== $vOrig) {
						$this->{$k}->set($v);
					}
				}
				else {
					yield $k => $this->{$k};

					//	Cast if not the same type.
					if (!is_object($this->{$k}) || get_class($this->{$k}) !== get_class($vDefault)) {
						$this->_setByName($k, $this->{$k});
					}
					//	Null property types don't get checked.
				}
			}
		})();
	}
public function getIterator(): Traversable
	{
		return (function &() {
			foreach ($this->_defaultValues as $k => &$vDefault) {
				if ($vDefault instanceof AtomicInterface) {
					$v     = $this->{$k}->get();
					$vOrig = $v;

					yield $k => $v;

					if ($v !== $vOrig) {
						$this->{$k}->set($v);
					}
				}
				else {
					yield $k => $this->{$k};

					//	Cast if not the same type.
					if (!is_object($this->{$k}) || get_class($this->{$k}) !== get_class($vDefault)) {
						$this->_setByName($k, $this->{$k});
					}
					//	Null property types don't get checked.
				}
			}
		})();
	}
Required by the IteratorAggregate interface.
Every value is checked for change during iteration.

@return \Traversable