# Неделя #2 Работа с данными из PHP. ООП и приемы работы в ООП стиле.


# Подготовка к выполнению задания

Изучить все материалы второй недели курса в Личном кабинете.

# Что нужно сделать?

# Выполнить домашнее задание #3

Задание выполняется в двух файлах. Файл src/functions.php содержит все функции. Функции именуются task1, task2, task3, с маленькой буквы, слитно. Файл с именем index.php содержит require(src/‘functions.php’); и вызов всех функций.

Задание #3.1

  1. Дан XML файл. Сохраните его под именем data.xml:
<?xml version="1.0"?>
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
  <Address Type="Shipping">
    <Name>Ellen Adams</Name>
    <Street>123 Maple Street</Street>
    <City>Mill Valley</City>
    <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </Address>
  <Address Type="Billing">
    <Name>Tai Yee</Name>
    <Street>8 Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
  </Address>
  <DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes>
  <Items>
    <Item PartNumber="872-AA">
      <ProductName>Lawnmower</ProductName>
      <Quantity>1</Quantity>
      <USPrice>148.95</USPrice>
      <Comment>Confirm this is electric</Comment>
    </Item>
    <Item PartNumber="926-AA">
      <ProductName>Baby Monitor</ProductName>
      <Quantity>2</Quantity>
      <USPrice>39.98</USPrice>
      <ShipDate>1999-05-21</ShipDate>
    </Item>
  </Items>
</PurchaseOrder>

Написать скрипт, который выведет всю информацию из этого файла в удобно читаемом виде. Представьте, что результат вашего скрипта будет распечатан и выдан курьеру для доставки, разберется ли курьер в этой информации?

Задача #3.2

Создайте массив, в котором имеется как минимум 1 уровень вложенности. Преобразуйте его в JSON. Сохраните как output.json.

Откройте файл output.json. Случайным образом, используя функцию rand(), решите изменять данные или нет. Сохраните как output2.json.

Откройте оба файла. Найдите разницу и выведите информацию об отличающихся элементах.

Задача #3.3

Программно создайте массив, в котором перечислено не менее 50 случайных чисел от 1 до 100. Сохраните данные в файл csv. Откройте файл csv и посчитайте сумму четных чисел.

Задача #3.4

С помощью PHP запросить данные по этому адресу Вывести title и page_id

Отправьте выполненое ДЗ на проверку наставнику.

Дедлайн: 26.07.2019 в 12.00.

# Выполнить Выпускной проект №1 - "Бургерная"

  1. Скачайте верстку для ВП1

  2. Ваша задача к данной верстке добавить обработку формы заказа.

Обработка заказа делится на три фазы:

Фаза 1. Регистрация или “авторизация” пользователя.

Регистрация происходит по полю email, в эту же таблицу записывается имя и телефон. В случае если пользователь уже заказывал - происходит “авторизация”. Никаких паролей нет!

Фаза 2. Оформление заказа.

Записывается в отдельную таблицу с указанием идентификатора пользователя, адреса и деталей для доставок.

Фаза 3. Письмо или запись в файл

После записи данных в БД высылается письмо с контактами. Заголовок - заказ №{id}, где id - это уникальный номер записи заказа. Под заголовком: “Ваш заказ будет доставлен по адресу”. Адрес содержит данные из БД или формы. Содержимое заказа всегда одинаковое - DarkBeefBurger за 500 рублей, 1 шт, нигде в базе не хранится, только высылается в письме. Внизу, под заказом идет дополнительная строка - “Спасибо - это ваш первый заказ” или “Спасибо! Это уже 555 заказ”, где 555 - это кол-во разов, сколько пользователь заказал. Письмо высылается функцией mail или записывается с помощью функции file_put_contents в отдельную папку с временем отправки. Красивая верстка не требуется, достаточно разделения строк.

  1. Предусмотреть простейшую административную панель. В админ-панели выводится:
  • Cписок всех зарегистрированных пользователей.
  • Cписок всех заказов.

Авторизации и паролей для доступ в админ панель НЕТУ, доступ только по URL. Информацию об URL запишите в readme.md в проекте.

Отправьте выполненое ДЗ на проверку наставнику.

Дедлайн: 29.07.2019 в 12.00.

# Выполнить домашнее задание #4

Задание #4.1. Практика с ООП

Представьте что вы создаете сайт для компании сдающих автомобили поминутно (каршеринг). У компании есть ряд тарифов. Вам необходимо реализовать каждый тариф в своем классе. У каждого тарифа две основные характеристики - цена за 1 км, цена за 1 минуту. Каждый тариф обязан иметь метод для подсчета цены поездки. В некоторых тарифах возможно использование дополнительных услуг, которые могут быть объявлены с помощью механизма trait. Минимальный возраст водителя - 18 лет, максимальный - 65 лет. В случае возраста от 18 до 21 года, тариф повышается на 10%. Ваша задача - посчитать цену, которую получит пользователь, если проедет Х км и Y минут по тарифу Z.

Тариф базовый

  • Цена за 1 км = 10 рублей
  • Цена за 1 минуту = 3 рубля

Тариф почасовой

  • Цена за 1 км = 0
  • Цена за 60 минут = 200 рублей
  • Округление до 60 минут в большую сторону

Тариф суточный

  • Цена за 1 км = 1 рубль
  • Цена за 24 часа = 1000 рублей
  • Округление до 24 часов в большую сторону, но не менее 30 минут. Например 24 часа 29 минут = 1 сутки. 23 часа 59 минут = 1 сутки. 24 часа 31 минута = 2 суток.

Тариф студенческий

  • Цена за 1 км = 4 рубля
  • Цена за 1 минуту = 1 рубль
  • Возраст водителя не может быть более 25 лет

Дополнительные услуги (трейты):

  • Gps в салон - 15 рублей в час, минимум 1 час. Округление в большую сторону. Доступно на всех тарифах
  • Дополнительный водитель - 100 рублей единоразово, доступен на всех тарифах кроме базового и студенческого

Ожидаемая реализация:

  1. Создать интерфейс, который будет содержать описание метода подсчета цены и другие необходимые функции.
  2. Реализовать абстрактный класс, который будет описывать основные методы и заниматься определением возраста и имплементировать описанный в п. 1 интерфейс
  3. Все тарифы должны наследоваться от абстрактного тарифа из п. 2
  4. Дополнительные услуги реализовываются с помощью механизма трейтов. Они доступны по умолчанию, но не активированы. Активация происходит путем передачи аргументов в конструктор класса.

Пример вызова:

Тариф базовый(5 км, 1 час, 20 лет, без доп. услуг) = (5 _ 10 + 60 _ 3) _ 1.1 = 253 руб;
(5 км по 10 рублей плюс 60 минут по 3 рубля) _ коэффициент молодежный 1.1 = 253

Альтернативный вариант:

Опишите несложный, но вполне конкретный автомобиль с помощью ООП.

  1. Автомобиль должен иметь функцию движения с заданным расстоянием и скоростью и направлением. Например “Автомобиль->Двигаться(200 метров, 10 м\с, вперед)”. При начале движения автомобиля:
    • вы включаете двигатель
    • включаете нужную передачу (вперед\назад)
    • двигаетесь в соответствии с параметрами двигателя, при необходимости включая охлаждения.
    • выключаете двигатель и коробку передач
  2. Ваш автомобиль должен иметь двигатель. Двигатель должен иметь функцию включения, выключения и охлаждения. Считается что двигатель мгновенно разгоняется до указанной скорости и двигается равномерно все это время. Охлаждение может быть включено ТОЛЬКО двигателем. Параметры двигателя:
    • кол-во лошадиных сил. 1 лошадиная сила позволяет развивать 2м\с.
    • температура. Каждые пройденные 10 метров повышают температуру на 5 градусов. При достижении 90 градусов, двигатель нужно охладить с помощью включения вентилятора. Каждое включение вентилятора охлаждает на 10 градусов.
  3. Ваш автомобиль может поддерживать одну из двух коробок передач - автоматическую или ручную. Необязательно: добавить нейтральную передачу
    • Автоматическая имеет два состояния:
      • Режим езды вперед
      • Режим езды назад
    • Ручная коробка передач имеет:
      • передачи от 1 до 2. При скорости от 0 до 20 используется передача №1, в противном случае передача №2. Т.к. характеристика разгона в данной задаче отсутствует - как только передана скорость больше 20 - всегда используется передача №2. Переключение между передачами внутри программы не требуется
      • задняя
  4. Остальные опции автомобиля остаются на ваши усмотрение, например, вы можете установить сиденье для водителя или руль.

Пример структуры:

  1. NIVA наследуется от класса
    • Car использует механизм trait и содержит
      • Engine
      • TransmissionAuto, TransmissionManual
        • используют общий трейт который позволяет ехать назад Какая именно коробка передач будет использована в конечном классе выбираются в конструкторе конечного класса (в данном случае NIVA). Каждое действие выводится на экран с указанием расстояния, на котором находится автомобиль в данный момент.

Отправьте выполненое ДЗ на проверку наставнику

Дедлайн: 31.07.2019 в 12.00.

# Как всё успеть?

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

# 🗓 Понедельник

Отправляем домашнее задание 2 на проверку наставнику.

Изучаем материалы по теме "Работа с данными из PHP".

Приступаем к выполнению домашнего задания 3.

# 🗓 Вторник

Продолжаем изучать материалы по теме "Работа с данными из PHP".

Работаем над домашним заданием 3.

# 🗓 Среда

Работаем над домашним заданием 3.

Изучаем материалы по теме "ООП и приемы работы в ООП стиле".

# 🗓 Четверг

Изучаем материалы по теме "ООП и приемы работы в ООП стиле".

Подготовьте вопросы и запишитесь на консультацию к наставнику.

# 🗓 Пятница

Продолжаем изучать материалы по теме "ООП и приемы работы в ООП стиле".

Пиступаем к выполнению выпускного проекта №1.

Подготовьте вопросы для канала #practice.

# 🗓 Суббота

В 12:00 посетить вебинар "Практика".

Работаем над Выпускным проектом №1.