PHP ООП

PHP ООП разработка — набор заданий для PHP-разработчика по использованию объектно-ориентированного подхода

Задание  1: PHP  ООП

Повторите материал по ООП (https://www.youtube.com/playlist?list=PLOQDek48BpZGsfx_7Z6sofqF3YRtM-VC4), вспомните работу с пространствами имён (https://www.youtube.com/watch?v=UUDOjOXA-d8)

  1. Создайте класс Goods (свойства: title, manufactured, price, color; методы: show, export)
  2. Создайте класс GoodsCollection (свойство: collection; методы: show, push, add, item)
  3. Создайте файл autoload.php, которые будет заниматься автоподгрузкой существующих классов
  4. Создайте файл php3-task1.php — основной файл задания; создайте экземпляры классов и выведите товары на странице
  5. [
     [ "title" => "Lenovo Vibe Shot", "manufacturer" => "Lenovo", "price" => 9e3, "color" => "black"],
     [ "title" => "Apple iPhone 7 128GB", "manufacturer" => "Apple", "price" => 9e4, "color" => "white" ],
     [ "title" => "Samsung Galaxy S8", "manufacturer" => "Samsung", "price" => 5e4, "color" => "grey" ],
     [ "title" => "Lenovo P2", "manufacturer" => "Lenovo", "price" => 2e4, "color" => "grey" ],
     [ "title" => "Xiaomi Mi6 128GB", "manufacturer" => "Xiaomi", "price" => 7e3, "color" => "white" ],
     [ "title" => "Xiaomi Mi Note 3 64Gb", "manufacturer" => "Xiaomi", "price" => 2e4, "color" => "black" ],
    ]
  6. Использование пространства имён — обязательно

Задание  2: Заполнение связанных таблиц

Создайте две, связанные в MySQL  как «один ко многим» таблицы: категории (category) и товары (catalog). Создайте php-скрипт, который будет выводить товары из каталога с указанием категории, добавлять новые категории, добавлять новые товары с указанием категории

  1. при добавлении товара должен быть доступен элемент <select> с перечнем категорий (они выбираются из таблицы category)

Задание  3: Поиск данных по базе

Создайте одну таблицу catalog. Товары в каталоге должны содержать поля: название, описание,  категория, цена. Напишите скрипт, который будет принимать данные из HTML-формы и выводить отфильтрованные данные из таблицы. Форма должна содержать <select> с перечнем категорий и три текстовых поля фильтрации (название, описание,  цена).

Нужно получить HTML форму приблизительно такого содержания:

<h2>Поиск товара</h2>
<form action="">
<input type="text" name="title"/>
<input type="text" name="description"/>
<select name="category" id="">
  <option value="">Lorem.</option>
  <option value="">Nesciunt!</option>
  <option value="">Cumque.</option>
  <option value="">Reprehenderit.</option>
</select>
<input type="text" name="price"/>
</form>

Задание  4: Паджинация

Создайте таблицу catalog. Напишите PHP код, который при выводе товаров из базы реализует постраничное разбиение материала (http://htmllab.ru/php-pagination/).

Задание  5: Аутентификация

Создайте таблицу user с полями id, user, pass, status. Заполните её несколькими строками данных. Реализуйте форму входа на сайт: при совпадении имен пользователя и хэша вводимого пароля с значением хэша в таблице, в сессионную переменную отмечать о корректной аутентификации и создавать ссылку «Выход» на странице. При некорректном вводе отмечать, что данные введены некорректно и выводить фразу «Некорректный ввод». Подсказка: логин: John, пароль: qwerty.

Задание  6: Заполнение данными сторонней таблицы

Дана MySQL-таблица. Написать php-скрипт, который будет заполнять таблицу данными.


DROP TABLE IF EXISTS `wp_posts`;
CREATE TABLE IF NOT EXISTS `wp_posts` (
  `ID` bigint(20) unsigned NOT NULL,
  `post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
  `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content` longtext NOT NULL,
  `post_title` text NOT NULL,
  `post_excerpt` text NOT NULL,
  `post_status` varchar(20) NOT NULL DEFAULT 'publish',
  `comment_status` varchar(20) NOT NULL DEFAULT 'open',
  `ping_status` varchar(20) NOT NULL DEFAULT 'open',
  `post_password` varchar(20) NOT NULL DEFAULT '',
  `post_name` varchar(200) NOT NULL DEFAULT '',
  `to_ping` text NOT NULL,
  `pinged` text NOT NULL,
  `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content_filtered` longtext NOT NULL,
  `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
  `guid` varchar(255) NOT NULL DEFAULT '',
  `menu_order` int(11) NOT NULL DEFAULT '0',
  `post_type` varchar(20) NOT NULL DEFAULT 'post',
  `post_mime_type` varchar(100) NOT NULL DEFAULT '',
  `comment_count` bigint(20) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=2068 DEFAULT CHARSET=utf8;

Примечания:

  1. Эта таблица из БД WordPress; в процессе выполнения этого упражнения познакомитесь со структурой
  2. Рассмотреть варианты вставки данных через форму (по одной записи, при этом HTML-форму сделать минимальной, чтобы при проверке и работе не вводить 100-500 полей), а также пакетно, через LOAD DATA
  3. Не нужно уточнять у меня, что значит то или иное поле — пользуйтесь инетом

Задание  7: Содержимое сайта

Создайте простую таблицу для хранения страниц сайта. Реализуйте добавление, просмотр, удаление страниц сайта.

Примечания:

  1. Основной материал страниц должен добавляться через произвольный визивиг-редактор
  2. Адреса страниц должны быть реализованы в виде «чистых ссылок»

Задание  8: Игры на PHP

Это задание для отдыха и отвлечения от трудностей квеста. Нужно выполнить минимум одно задание из перечня

  1. Создайте на PHP игру пользователя с компьютером — «Крестики-нолики» (пример игры на JavaScript). Это задание для разминки и не требует работы с БД. Используйте сессию.
  2. Создайте игру «Угадай слово». Правила: есть база с таблицей слов и описаний этих слов. При старте игры, из базы  выбирается произвольное слово и описание. Пользователю показывается описание и поля ввода для ввода букв слова. Все правильно введенные буквы учитываются, а неправильно введённые не показываются при проверке, чтобы пользователь продолжал ввод. Чем меньше ходов у пользователя — тем лучше
  3. Создать произвольную (от крестиков-ноликов, до монополии с шахматами) игру в двухпользовательском режиме. Для совместной игры нужно генерировать уникальный код и присылать партнеру по игре
  4. Создать игру морской бой. Режим работы с компьютером или парный
  5. Создайте игру, в которой нужно периодически заходит на страницу и «прокачивать» уровень игрового персонажа (героя или здания, или тому подобное). После каждого повышения уровня, должно требоваться больше времени на последующее улучшение. Используйте header() для обновления страницы после истечения требуемого времени. По-хорошему, игра должна использовать базу, но можно и на сессиях. Присмотритесь к Travian и Ogame
  6. Создайте игру по аналогии с Монополией. Будьте аккуратны, это затягивает 🙂 Предусмотрите многопользовательский режим.

Задание  9: Хранение переписки

Создать две таблицы users и messages для хранения переписки между пользователями. Реализовать возможность закрытой переписки между  отдельными пользователями по аналогии с vk.com/fb.com (но без JS и AJAX — с ними можно экспериментировать после выполнения задания или прохождения квеста). Предусмотреть аутентификацию пользователей. При проверке задания — пришлите мне логин и пароль, для переписки с вами.

Задание  10: Автозамена слов

Есть таблица words, в которой хранятся слова и некоторые URL (создать самостоятельно). Создать простую форму из <textarea> и кнопки отправки формы. Написать скрипт, который будет заменять все слова полученные из многострочного текстового поля на те же слова, но с гиперссылкой на URL из базы.