# Неделя #2 Работа с данными из PHP. ООП и приемы работы в ООП стиле.
# Подготовка к выполнению задания
Изучить все материалы второй недели курса в Личном кабинете.
# Что нужно сделать?
# Выполнить домашнее задание #3
Задание выполняется в двух файлах. Файл src/functions.php
содержит все функции. Функции именуются task1
, task2
, task3
, с маленькой буквы, слитно. Файл с именем index.php
содержит require(src/‘functions.php’);
и вызов всех функций.
Задание #3.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. Регистрация или “авторизация” пользователя.
Регистрация происходит по полю email, в эту же таблицу записывается имя и телефон. В случае если пользователь уже заказывал - происходит “авторизация”. Никаких паролей нет!
Фаза 2. Оформление заказа.
Записывается в отдельную таблицу с указанием идентификатора пользователя, адреса и деталей для доставок.
Фаза 3. Письмо или запись в файл
После записи данных в БД высылается письмо с контактами. Заголовок - заказ №{id}, где id - это уникальный номер записи заказа. Под заголовком: “Ваш заказ будет доставлен по адресу”. Адрес содержит данные из БД или формы. Содержимое заказа всегда одинаковое - DarkBeefBurger за 500 рублей, 1 шт, нигде в базе не хранится, только высылается в письме. Внизу, под заказом идет дополнительная строка - “Спасибо - это ваш первый заказ” или “Спасибо! Это уже 555 заказ”, где 555 - это кол-во разов, сколько пользователь заказал. Письмо высылается функцией mail
или записывается с помощью функции file_put_contents
в отдельную папку с временем отправки. Красивая верстка не требуется, достаточно разделения строк.
- Предусмотреть простейшую административную панель. В админ-панели выводится:
- 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
- Дополнительные услуги реализовываются с помощью механизма трейтов. Они доступны по умолчанию, но не активированы. Активация происходит путем передачи аргументов в конструктор класса.
Пример вызова:
Тариф базовый(5 км, 1 час, 20 лет, без доп. услуг) = (5 _ 10 + 60 _ 3) _ 1.1 = 253 руб;
(5 км по 10 рублей плюс 60 минут по 3 рубля) _ коэффициент молодежный 1.1 = 253
Альтернативный вариант:
Опишите несложный, но вполне конкретный автомобиль с помощью ООП.
- Автомобиль должен иметь функцию движения с заданным расстоянием и скоростью и направлением. Например “Автомобиль->Двигаться(200 метров, 10 м\с, вперед)”. При начале движения автомобиля:
- вы включаете двигатель
- включаете нужную передачу (вперед\назад)
- двигаетесь в соответствии с параметрами двигателя, при необходимости включая охлаждения.
- выключаете двигатель и коробку передач
- Ваш автомобиль должен иметь двигатель. Двигатель должен иметь функцию включения, выключения и охлаждения. Считается что двигатель мгновенно разгоняется до указанной скорости и двигается равномерно все это время. Охлаждение может быть включено ТОЛЬКО двигателем. Параметры двигателя:
- кол-во лошадиных сил. 1 лошадиная сила позволяет развивать 2м\с.
- температура. Каждые пройденные 10 метров повышают температуру на 5 градусов. При достижении 90 градусов, двигатель нужно охладить с помощью включения вентилятора. Каждое включение вентилятора охлаждает на 10 градусов.
- Ваш автомобиль может поддерживать одну из двух коробок передач - автоматическую или ручную. Необязательно: добавить нейтральную передачу
- Автоматическая имеет два состояния:
- Режим езды вперед
- Режим езды назад
- Ручная коробка передач имеет:
- передачи от 1 до 2. При скорости от 0 до 20 используется передача №1, в противном случае передача №2. Т.к. характеристика разгона в данной задаче отсутствует - как только передана скорость больше 20 - всегда используется передача №2. Переключение между передачами внутри программы не требуется
- задняя
- Автоматическая имеет два состояния:
- Остальные опции автомобиля остаются на ваши усмотрение, например, вы можете установить сиденье для водителя или руль.
Пример структуры:
- NIVA наследуется от класса
- Car использует механизм trait и содержит
- Engine
- TransmissionAuto, TransmissionManual
- используют общий трейт который позволяет ехать назад Какая именно коробка передач будет использована в конечном классе выбираются в конструкторе конечного класса (в данном случае NIVA). Каждое действие выводится на экран с указанием расстояния, на котором находится автомобиль в данный момент.
- Car использует механизм trait и содержит
Отправьте выполненое ДЗ на проверку наставнику
Дедлайн: 31.07.2019 в 12.00.
# Как всё успеть?
Данный план является примерным ориентиром. Вы всегда можете работать в удобном для себя темпе.
# 🗓 Понедельник
Отправляем домашнее задание 2 на проверку наставнику.
Изучаем материалы по теме "Работа с данными из PHP".
Приступаем к выполнению домашнего задания 3.
# 🗓 Вторник
Продолжаем изучать материалы по теме "Работа с данными из PHP".
Работаем над домашним заданием 3.
# 🗓 Среда
Работаем над домашним заданием 3.
Изучаем материалы по теме "ООП и приемы работы в ООП стиле".
# 🗓 Четверг
Изучаем материалы по теме "ООП и приемы работы в ООП стиле".
Подготовьте вопросы и запишитесь на консультацию к наставнику.
# 🗓 Пятница
Продолжаем изучать материалы по теме "ООП и приемы работы в ООП стиле".
Пиступаем к выполнению выпускного проекта №1.
Подготовьте вопросы для канала #practice
.
# 🗓 Суббота
В 12:00 посетить вебинар "Практика".
Работаем над Выпускным проектом №1.