code: 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.
  				}
  			}
  		})();
  	}
docs: Required by the IteratorAggregate interface.
  Every value is checked for change during iteration.
  
  @return \Traversable