function Core_Std_DefaultObject___trait_IDefaultObject_shallowCopy() { $A = new SPLReflectionObject($this); $B = new SPLReflectionClass(static::class); $C = $B->newInstanceWithoutConstructor(); $propertiesA = $A->getProperties(); $propertiesB = $B->getProperties(); foreach(array_keys($propertiesB) as $k) { if($propertiesB[$k]->isStatic()) //! it's PHP... http://stackoverflow.com/questions/15783984/reflection-properties-filter continue; $propertiesA[$k]->setAccessible(TRUE); $propertiesB[$k]->setAccessible(TRUE); $value = $propertiesA[$k]->getValue($this); $value = $this->__Core_Std_DefaultObject___trait_IDefaultObject___copyRecursive($C, FALSE, $value); $propertiesB[$k]->setValue($C, $value); } return $C; } private function __Core_Std_DefaultObject___trait_IDefaultObject___copyRecursive(IDefaultObject $__Context, $__isDeep = FALSE, $__data) { if($__data === $__Context) return $__data; if(is_array($__data)) { foreach($__data as $k => $value) $__data[$k] = $this->{__FUNCTION__}($__Context, $__isDeep, $value); return $__data; } if(FALSE === is_object($__data)) return $__data; if(TRUE === $__isDeep) { switch(TRUE): case $__data instanceOf IDefaultObject: $__data = $__data->deepCopy(); break; case $__data instanceOf SPLClosure: $__data = $__data->bindTo($__Context, $__Context); break; case $__data instanceOf Fn: $__data = $__data->bind($__Context, $__Context); break; default: $__data = clone $__data; endswitch; } else { switch(TRUE): case $__data instanceOf SPLClosure: $__data = $__data->bindTo($__Context, $__Context); break; case $__data instanceOf Fn: $__data = $__data->bind($__Context, $__Context); break; endswitch; } return $__data; }