visitInfo = $visitInfo; $this->visitInfoImmutableProperties = $visitInfo; } /** * Returns a visit property, or `null` if none is set. * * @param string $name The property name. * * @return mixed */ public function getProperty($name) { return isset($this->visitInfo[$name]) ? $this->visitInfo[$name] : null; } /** * Returns all visit properties by reference. * * @return array */ public function &getProperties(): array { return $this->visitInfo; } /** * Sets a visit property. * * @param string $name The property name. * @param mixed $value The property value. */ public function setProperty($name, $value): void { $this->visitInfo[$name] = $value; } /** * Unsets all visit properties. */ public function clearProperties(): void { $this->visitInfo = []; } /** * Sets all visit properties. * * @param array $properties */ public function setProperties(array $properties): void { $this->visitInfo = $properties; } /** * Set the initial values of a property. * The immutable value remains unchanged throughout request processing and can be access with getImmutableProperty() * The mutable value can be updated at any time with setProperty() and accessed via getProperty() * * @param mixed $value */ public function initializeProperty(string $name, $value): void { if (isset($this->visitInfoImmutableProperties[$name])) { throw new \Exception(sprintf('The property %s has already been initialized', $name)); } $this->visitInfoImmutableProperties[$name] = $value; $this->setProperty($name, $value); } /** * Returns a visit property, unmodified by request processors. Returns `null` if not set. * * @param string $name The property name. * * @return mixed|null */ public function getImmutableProperty(string $name) { return $this->visitInfoImmutableProperties[$name] ?? null; } /** * Returns all immutable visit properties * * @return array */ public function getImmutableProperties(): array { return $this->visitInfoImmutableProperties; } }