<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

В начале курса у нас будет только идея, а в конце готовый продукт, который можно использовать в практических целях.

В рамках упражнений курса Вы параллельно со мной будете создавать свою большую программу на Java, что даст Вам необходимую практику, после которой для Вас уже не будет разницы, какого размера создавать программы.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Интерфейс ArrayAccess в PHP

Интерфейс ArrayAccess в PHP

Данная статья является продолжением предыдущей статьи, посвященной теме итераторов в PHP. В ней пойдет речь о PHP интерфейсе ArrayAccess. Он позволяет нам создавать объекты, доступ к содержимому которых может быть получен с использованием синтаксиса применяемого для работы с массивами.

Интерфейс ArrayAccess содержит четыре метода:

  • offsetSet - для установки значения в массиве по ключу
  • offsetGet - для получения значения из массива по ключу
  • offsetExists - проверка существования значения в массиве по указанному ключу
  • offsetUnset - удаление значения из массива по ключу

Теперь у нас есть возможность работать, например, с базами данных как с простыми массивами, легко добавляя или удаляя элементы - записи базы данных. Возможный пример:

<?php

    // получаем экземпляр базы данных
    $db = DB::getInstance();
    
    // добавили запись в базу данных без каких-либо SQL запросов
    // вся логика работы с SQL находится в классе базы данных
    // а у нас лишь удобный интерфейс наподобие массива
    $db[] = [
        "title" => "Новая статья",
        "date"  => date("d/M/Y",time()),
        "content" => "Привет всем!"
    ];
    
    
    // а здесь получаем запись по идентификатору 
    $postId = 100;
    $post = $db["{$postId}"];
    
    // проверяем, существует ли запись в базе данных
    if( isset($db["{$postID}"]) )
        print_r($post);
    
    // удаляем запись из базы
    unset($db["{$postId}"]);

?>

В коде выше показан пример того как может быть реализована работа с записями в базе данных. В качестве источников баз данных могут служить JSON, CSV файлы, тот же MySQL, например, все зависит от Ваших практических потребностей.

А вот уже более реальный код, который можно скопировать и запустить. В примере рассматривается класс HtmlPage, представляющий html-страницу. Он реализует интерфейс ArrayAccess, благодаря чему с объектом этого класса можно работать как с обычным массивом. Также в классе HtmlPage мы переопределяем метод __toString() для удобного преобразования в строку.

Вот код:

<?php

    // исключение, возникающее при попытке доступа к
    // значению, чей ключ не определен
    class OffsetNotFoundException extends Exception {}

    // пример объекта, работающего как массив
    class HtmlPage implements ArrayAccess
    {
      // внутренний массив к которому мы создаем интерфейс доступа
      private $storage = [];
   

      
      //Пример запуска из файла index.php:
      //
      //   require_once 'HtmlPage.php';
      //   HtmlPage::main($argv);
      public static function main(array $args = [] )
      {
      // Пример №1
      // создаем объект html-страницы
      $page = new HtmlPage();
        
      // добавляем элемент, (вызывается метод offsetSet)
      $page["title"]    = "Интерфейс ArrayAccess в PHP";
      $page["author"]   = "Михаил Русаков";
      $page["description"] = "Учимся использовать интерфейс ArrayAccess в PHP.";
      $page["keywords"] = "php, php arrayaccess";
      $page["preview"]  = "Введение";
      $page["content"]  = "Содержание";
        
      // распечатываем страницу
      print $page;
      self::separator();


      // Пример №2
      // получаем значения (вызывается метод offsetGet)
      try {
      $title  = $page["title"];
      $author = $page["author"];
          
      // оопс! такого значения не существует,
      // поэтому будет брошено исключение OffsetNotFoundException,
      // определенное нами раннее
      $tag = $page["tag"];
        
      } catch ( OffsetNotFoundException $e ) {
        print sprintf("Ошибка '%s' на  строке %d\n",$e -> getMessage(),$e -> getLine());
      }
        
        
      // проверяем наличие значения в объекте
      if( isset($page["preview"]) )
        print $page["preview"] . PHP_EOL;
      else
        print "Нет ключа" . PHP_EOL;

    }
    // вспомогательный метод, просто печатающий длинный разделитель
    public static function separator()
    {
      print PHP_EOL . '-----------------------------------------------' . PHP_EOL;
    }
      
    // существует ли ключ во внутреннем массиве
    public function offsetExists($offset)
    {
      return isset($this -> storage[$offset]);
    }
    
    // возвращает значение из внутреннего массива, если
    // существует ключ, соответствующий этому значению,
    // в противном случае выбрасывает исключение
    public function offsetGet($offset)
    {
    if( $this -> offsetExists($offset) )
      return $this -> storage[$offset];
    else
      throw new OffsetNotFoundException("Невозможно найти указанный ключ!");
    }

    // установка значения по указанному ключу
    // если такой ключ уже существует, то
    // значение, соответствующее этому ключу
    // будет перезаписано
    public function offsetSet($offset, $value)
    {
      $this -> storage[$offset] = $value;
    }
      
    // удаляет элемент во внутреннем массиве
    public function offsetUnset($offset)
    {
      unset($this -> storage[$offset]);
    }

    // преобразуем содержимое нашего массива в строку
    public function __toString()
    {
      return implode("\n",$this -> storage);
    }

    }

?>

Как видите вкупе с использованием итераторов, использование PHP интерфейса ArrayAccess дает нам возможность работать с объектами так, как будто они являются массивами. Таким образом, мы можем использовать интерфейс ArrayAccess для организации удобной работы с собственными классами.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.