summaryrefslogtreecommitdiffstats
path: root/vendor/ipl/stdlib/src/Properties.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 11:30:08 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 11:30:08 +0000
commit4ce65d59ca91871cfd126497158200a818720bce (patch)
treee277def01fc7eba7dbc21c4a4ae5576e8aa2cf1f /vendor/ipl/stdlib/src/Properties.php
parentInitial commit. (diff)
downloadicinga-php-library-4ce65d59ca91871cfd126497158200a818720bce.tar.xz
icinga-php-library-4ce65d59ca91871cfd126497158200a818720bce.zip
Adding upstream version 0.13.1.upstream/0.13.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/ipl/stdlib/src/Properties.php')
-rw-r--r--vendor/ipl/stdlib/src/Properties.php205
1 files changed, 205 insertions, 0 deletions
diff --git a/vendor/ipl/stdlib/src/Properties.php b/vendor/ipl/stdlib/src/Properties.php
new file mode 100644
index 0000000..5726af3
--- /dev/null
+++ b/vendor/ipl/stdlib/src/Properties.php
@@ -0,0 +1,205 @@
+<?php
+
+namespace ipl\Stdlib;
+
+use OutOfBoundsException;
+use Traversable;
+
+/**
+ * Trait for property access, mutation and array access.
+ */
+trait Properties
+{
+ /** @var array */
+ private $properties = [];
+
+ /**
+ * Get whether this class has any properties
+ *
+ * @return bool
+ */
+ public function hasProperties()
+ {
+ return ! empty($this->properties);
+ }
+
+ /**
+ * Get whether a property with the given key exists
+ *
+ * @param string $key
+ *
+ * @return bool
+ */
+ public function hasProperty($key)
+ {
+ return array_key_exists($key, $this->properties);
+ }
+
+ /**
+ * Set the given properties
+ *
+ * @param array $properties
+ *
+ * @return $this
+ */
+ public function setProperties(array $properties)
+ {
+ foreach ($properties as $key => $value) {
+ $this->setProperty($key, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the property by the given key
+ *
+ * @param string $key
+ *
+ * @return mixed
+ *
+ * @throws OutOfBoundsException If the property by the given key does not exist
+ */
+ protected function getProperty($key)
+ {
+ if (array_key_exists($key, $this->properties)) {
+ return $this->properties[$key];
+ }
+
+ throw new OutOfBoundsException("Can't access property '$key'. Property does not exist");
+ }
+
+ /**
+ * Set a property with the given key and value
+ *
+ * @param string $key
+ * @param mixed $value
+ *
+ * @return $this
+ */
+ protected function setProperty($key, $value)
+ {
+ $this->properties[$key] = $value;
+
+ return $this;
+ }
+
+ /**
+ * Iterate over all existing properties
+ *
+ * @return Traversable
+ */
+ public function getIterator(): Traversable
+ {
+ foreach ($this->properties as $key => $value) {
+ yield $key => $value;
+ }
+ }
+
+ /**
+ * Check whether an offset exists
+ *
+ * @param mixed $offset
+ *
+ * @return bool
+ */
+ public function offsetExists($offset): bool
+ {
+ return isset($this->properties[$offset]);
+ }
+
+ /**
+ * Get the value for an offset
+ *
+ * @param mixed $offset
+ *
+ * @return mixed
+ */
+ #[\ReturnTypeWillChange]
+ public function offsetGet($offset)
+ {
+ return $this->getProperty($offset);
+ }
+
+ /**
+ * Set the value for an offset
+ *
+ * @param mixed $offset
+ * @param mixed $value
+ */
+ public function offsetSet($offset, $value): void
+ {
+ $this->setProperty($offset, $value);
+ }
+
+ /**
+ * Unset the value for an offset
+ *
+ * @param mixed $offset
+ */
+ public function offsetUnset($offset): void
+ {
+ unset($this->properties[$offset]);
+ }
+
+ /**
+ * Get the value of a non-public property
+ *
+ * This is a PHP magic method which is implicitly called upon access to non-public properties,
+ * e.g. `$value = $object->property;`.
+ * Do not call this method directly.
+ *
+ * @param mixed $key
+ *
+ * @return mixed
+ */
+ public function __get($key)
+ {
+ return $this->getProperty($key);
+ }
+
+ /**
+ * Set the value of a non-public property
+ *
+ * This is a PHP magic method which is implicitly called upon access to non-public properties,
+ * e.g. `$object->property = $value;`.
+ * Do not call this method directly.
+ *
+ * @param string $key
+ * @param mixed $value
+ */
+ public function __set($key, $value)
+ {
+ $this->setProperty($key, $value);
+ }
+
+ /**
+ * Check whether a non-public property is defined and not null
+ *
+ * This is a PHP magic method which is implicitly called upon access to non-public properties,
+ * e.g. `isset($object->property);`.
+ * Do not call this method directly.
+ *
+ * @param string $key
+ *
+ * @return bool
+ */
+ public function __isset($key)
+ {
+ return $this->offsetExists($key);
+ }
+
+ /**
+ * Unset the value of a non-public property
+ *
+ * This is a PHP magic method which is implicitly called upon access to non-public properties,
+ * e.g. `unset($object->property);`. This method does nothing if the property does not exist.
+ * Do not call this method directly.
+ *
+ * @param string $key
+ */
+ public function __unset($key)
+ {
+ $this->offsetUnset($key);
+ }
+}