All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s
127 lines
3.8 KiB
PHP
127 lines
3.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Kreait\Firebase\Database;
|
|
|
|
use Kreait\Firebase\Exception\InvalidArgumentException;
|
|
|
|
use function count;
|
|
use function is_array;
|
|
use function JmesPath\search;
|
|
use function str_replace;
|
|
use function trim;
|
|
|
|
/**
|
|
* A Snapshot contains data from a database location.
|
|
*
|
|
* It is an immutable copy of the data at a database location. It cannot be modified and will never
|
|
* change (to modify data, you always call the {@see Reference::set()}).
|
|
*
|
|
* You can extract the contents of the snapshot as a JavaScript object by calling
|
|
* the {@see getValue()} method.
|
|
*
|
|
* Alternatively, you can traverse into the snapshot by calling {@see getChild()}
|
|
* to return child snapshots (which you could then call {@see getValue()} on).
|
|
*/
|
|
class Snapshot
|
|
{
|
|
/**
|
|
* @internal
|
|
*/
|
|
public function __construct(private readonly Reference $reference, private readonly mixed $value)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Returns the key (last part of the path) of the location of this Snapshot.
|
|
*
|
|
* The last token in a database location is considered its key. For example, "ada" is the key for
|
|
* the /users/ada/ node. Accessing the key on any Snapshot will return the key for the
|
|
* location that generated it. However, accessing the key on the root URL of a database
|
|
* will return null.
|
|
*/
|
|
public function getKey(): ?string
|
|
{
|
|
return $this->reference->getKey();
|
|
}
|
|
|
|
/**
|
|
* Returns the Reference for the location that generated this Snapshot.
|
|
*/
|
|
public function getReference(): Reference
|
|
{
|
|
return $this->reference;
|
|
}
|
|
|
|
/**
|
|
* Returns another Snapshot for the location at the specified relative path.
|
|
*
|
|
* Passing a relative path to the child() method of a Snapshot returns another Snapshot for the location
|
|
* at the specified relative path. The relative path can either be a simple child name (e.g. "ada") or a
|
|
* deeper, slash-separated path (e.g. "ada/name/first"). If the child location has no data, an empty
|
|
* Snapshot (that is, a Snapshot whose value is null) is returned.
|
|
*
|
|
* @throws InvalidArgumentException if the given child path is invalid
|
|
*/
|
|
public function getChild(string $path): self
|
|
{
|
|
$path = trim($path, '/');
|
|
$expression = '"'.str_replace('/', '"."', $path).'"';
|
|
|
|
$childValue = search($expression, $this->value);
|
|
|
|
return new self($this->reference->getChild($path), $childValue);
|
|
}
|
|
|
|
/**
|
|
* Returns true if this Snapshot contains any data.
|
|
*
|
|
* It is a convenience method for `$snapshot->getValue() !== null`.
|
|
*/
|
|
public function exists(): bool
|
|
{
|
|
return $this->value !== null;
|
|
}
|
|
|
|
/**
|
|
* Returns true if the specified child path has (non-null) data.
|
|
*/
|
|
public function hasChild(string $path): bool
|
|
{
|
|
$path = trim($path, '/');
|
|
$expression = '"'.str_replace('/', '"."', $path).'"';
|
|
|
|
return search($expression, $this->value) !== null;
|
|
}
|
|
|
|
/**
|
|
* Returns true if the Snapshot has any child properties.
|
|
*
|
|
* You can use {@see hasChildren()} to determine if a Snapshot has any children. If it does,
|
|
* you can enumerate them using foreach(). If it does not, then either this snapshot
|
|
* contains a primitive value (which can be retrieved with {@see getValue()}) or
|
|
* it is empty (in which case {@see getValue()} will return null).
|
|
*/
|
|
public function hasChildren(): bool
|
|
{
|
|
return is_array($this->value) && $this->value !== [];
|
|
}
|
|
|
|
/**
|
|
* Returns the number of child properties of this Snapshot.
|
|
*/
|
|
public function numChildren(): int
|
|
{
|
|
return is_array($this->value) ? count($this->value) : 0;
|
|
}
|
|
|
|
/**
|
|
* Returns the data contained in this Snapshot.
|
|
*/
|
|
public function getValue(): mixed
|
|
{
|
|
return $this->value;
|
|
}
|
|
}
|