/** * @param array $clonedPropertiesNames * @param array $newProperties * @return Props */ public final function create($clonedPropertiesNames = [], $newProperties = []) { $props = new self($newProperties); foreach ($clonedPropertiesNames as $propName) { if ($this->hasComputed($propName)) { if ($props->hasProp($propName)) { throw new PropExistsException($propName, $props->props, $props->computed); } $props->computed($propName, $this->computed[$propName]); } else { $props->set($propName, $this->get($propName)); } } return $props; }