Read($key, $default); } /** * Читает значение ключа JSON. * * @param string $key Ключ JSON. * @param mixed $default Значение по умолчанию. * * @return mixed Значение ключа JSON или значение по умолчанию. */ public function Read (string $key, mixed $default = null): mixed { // Подготавливаем ключ $key = $this->PrepareKey($key); // Проверяем, существует ли ключ if (!$this->IsKeyExists($key)) // - если нет, то возвращаем значение по умолчанию return $default; // Разбиваем ключ на массив ключей $keys = $this->ParseKey($key); // Получаем текущий массив данных $current = $this->JsonData; // Для каждого ключа до предпоследнего for ($i = 0; $i < count($keys) - 1; $i++) // - переходим ко вложенному массиву $current = $current[$keys[$i]]; // Возвращаем значение последнего ключа и если его нет, то возвращаем значение по умолчанию return $current[$keys[count($keys) - 1]] ?? $default; } /** * Читает значение ключа JSON как вещественное число. * * @param string $key Ключ JSON. * @param float $default Значение по умолчанию. * * @return float Значение ключа JSON или значение по умолчанию. */ public function ReadFloat (string $key, float $default = 0.0): float { return (float)$this->Read($key, $default); } /** * Читает значение ключа JSON как логическое значение. * * @param string $key Ключ JSON. * @param bool $default Значение по умолчанию. * * @return bool Значение ключа JSON или значение по умолчанию. */ public function ReadBool (string $key, bool $default = false): bool { return (bool)$this->Read($key, $default); } /** * Читает значение ключа JSON как массив. * * @param string $key Ключ JSON. * @param array $default Значение по умолчанию. * * @return array Значение ключа JSON или значение по умолчанию. */ public function ReadArray (string $key, array $default = []): array { // Получаем значение ключа JSON $serializedDef = json_encode($default); // Читаем значение ключа JSON $value = $this->ReadString($key, $serializedDef); // Десериализуем значение ключа JSON return json_decode($value, true); } /** * Читает значение ключа JSON как строку. * * @param string $key Ключ JSON. * @param string $default Значение по умолчанию. * * @return string Значение ключа JSON или значение по умолчанию. */ public function ReadString (string $key, string $default = ""): string { return (string)$this->Read($key, $default); } /** * Читает значение ключа JSON как объект. * * @param string $key Ключ JSON. * @param object $default Значение по умолчанию. * * @return object Значение ключа JSON или значение по умолчанию. */ public function ReadObject (string $key, object $default): object { // Получаем значение ключа JSON $serializedDef = json_encode($default); // Читаем значение ключа JSON $value = $this->ReadString($key, $serializedDef); // Десериализуем значение ключа JSON return json_decode($value); } /** * Читает значение ключа JSON как объект, реализующий интерфейс ISerializable. * * @param string $key Ключ JSON. * @param string $serializableClassName Имя класса, реализующего интерфейс ISerializable, с namespace. * * @return ISerializable Инициализированный объект * @throws JsonException Если класс не реализует интерфейс ISerializable */ public function ReadSerializable (string $key, string $serializableClassName): ISerializable { // Создаем объект $instance = new $serializableClassName(); // Проверяем, что он реализует интерфейс ISerializable if (!$instance instanceof ISerializable) // - если нет, то выбрасываем исключение throw new JsonException(errorCode: JsonErrorCode::NotISerializable, errorMessage: "Class $serializableClassName is not implements ISerializable interface / Класс $serializableClassName не реализует интерфейс ISerializable"); // Получаем строку JSON из ключа $json = $this->ReadString($key, $instance->Serialize()); // Десериализуем строку JSON в объект $instance->UnSerialize($json); // Возвращаем объект return $instance; } }