Задания упражнения для php

Содержание
  1. Задачи на основы языка PHP
  2. Учебник PHP
  3. Практика
  4. Важное
  5. Регулярки
  6. Работа с htaccess
  7. Файлы, папки
  8. Сессии и куки
  9. Работа с БД
  10. Практика по работе с БД в PHP
  11. Практика
  12. Движок PHP
  13. Продвинутые БД
  14. Аутентификация
  15. Практика
  16. ООП и MVC
  17. Абстрактные классы и интерфейсы
  18. Трейты
  19. ООП Магия
  20. Практика
  21. Практика: классы как набор методов
  22. Примеры решения задач
  23. Задача
  24. Задача
  25. Задача
  26. Задачи для решения
  27. Работа с переменными
  28. Работа со строками
  29. Обращение к символам строки
  30. Практика
  31. Работа с присваиванием и декрементами
  32. Сборник практических задач PHP для подготовки к собеседованию
  33. Задачи на ООП в PHP. Часть 1
  34. Учебник PHP
  35. Практика
  36. Важное
  37. Регулярки
  38. Работа с htaccess
  39. Файлы, папки
  40. Сессии и куки
  41. Работа с БД
  42. Практика по работе с БД в PHP
  43. Практика
  44. Движок PHP
  45. Продвинутые БД
  46. Аутентификация
  47. Практика
  48. ООП и MVC
  49. Абстрактные классы и интерфейсы
  50. Трейты
  51. ООП Магия
  52. Практика
  53. Практика: классы как набор методов
  54. Задачи для решения
  55. Работа с классами и объектами
  56. На __construct
  57. Наследование
  58. Практика
  59. Программа самостоятельного изучения PHP
  60. Как это всё читать?
  61. Просто читать о технологиях, не практикуясь в их применении, бесполезно! Без практики можете сразу забыть об обучении и не тратить драгоценное время!
  62. Знакомство с языком. Первое приложение
  63. Часть 1. Введение и базовые понятия
  64. Часть 2. Переменные, типы
  65. Часть 3. Функции
  66. Часть 4. Ветвления
  67. Часть 5. Массивы
  68. Часть 6. Циклы
  69. Часть 7. Файлы
  70. Часть 8. Обработка форм
  71. Часть 9. Простая работа с базами данных
  72. Часть 10. Сессии и cookie
  73. Часть 11. Первое приложение
  74. Справились?

Задачи на основы языка PHP

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

Перед решением задач изучите теорию к данному уроку.

Примеры решения задач

Задача

Задача. Создайте переменную $var и присвойте ей значение ‘hello’. Обращаясь к отдельным символам этой строки выведите на экран символ ‘h’, символ ‘e’, символ ‘o’.

Решение: будем обращаться к отдельным символам этой строки, к примеру, буква ‘h’ имеет номер 0 и ее можно вывести так — $var[0], буква ‘e’ имеет номер 1 и так далее:

Задача

Задача. Напишите скрипт, который считает количество секунд в часе.

Решение: так как в минуте 60 секунд, а в часе — 60 минут, то умножив 60 на 60 мы получим количество секунд в часе:

Если нам нужно получить количество секунд в сутках, то умножим еще и на 24 (так как в сутках 24 часа):

Задача

Задача. Переделайте приведенный код так, чтобы в нем использовались операции +=, -=, *=, /=, ++, —. Количество строк кода при этом не должно измениться. Код для переделки:

Решение: заменим все подходящие места на сокращенную форму записи. К примеру, вместо $var = $var + 12 можно написать $var += 12, а вместо $var = $var + 1 будет $var++. Результат переделки будет выглядеть так:

Задачи для решения

Работа с переменными

Создайте переменную $a и присвойте ей значение 3. Выведите значение этой переменной на экран.

Создайте переменные $a=10 и $b=2. Выведите на экран их сумму, разность, произведение и частное (результат деления).

Создайте переменные $c=15 и $d=2. Просуммируйте их, а результат присвойте переменной $result. Выведите на экран значение переменной $result.

Создайте переменные $a=10, $b=2 и $c=5. Выведите на экран их сумму.

Создайте переменные $a=17 и $b=10. Отнимите от $a переменную $b и результат присвойте переменной $c. Затем создайте переменную $d, присвойте ей значение 7. Сложите переменные $c и $d, а результат запишите в переменную $result. Выведите на экран значение переменной $result.

Работа со строками

Создайте переменную $text и присвойте ей значение ‘Привет, Мир!’. Выведите значение этой переменной на экран.

Создайте переменные $text1=’Привет, ‘ и $text2=’Мир!’. С помощью этих переменных и операции сложения строк выведите на экран фразу ‘Привет, Мир!’.

Создайте переменную $name и присвойте ей ваше имя. Выведите на экран фразу ‘Привет, %Имя%!’. Вместо %Имя% должно стоять ваше имя.

Создайте переменную $age и присвойте ей ваш возраст. Выведите на экран ‘Мне %Возраст% лет!’.

Обращение к символам строки

Создайте переменную $text и присвойте ей значение ‘abcde’. Обращаясь к отдельным символам этой строки выведите на экран символ ‘a’, символ ‘c’, символ ‘e’.

Дана произвольная строка, например, ‘abcde’. Поменяйте первую букву (то есть букву ‘a’) этой строки на ‘!’.

Создайте переменную $num и присвойте ей значение ‘12345’. Найдите сумму цифр этого числа.

Практика

Напишите скрипт, который считает количество секунд в часе, в сутках, в месяце.

Создайте три переменные — час, минута, секунда. С их помощью выведите текущее время в формате ‘час:минута:секунда’.

Создайте переменную, присвойте ей число. Возведите это число в квадрат (это значит нужно умножить его само на себя). Выведите его на экран.

Работа с присваиванием и декрементами

Переделайте этот код так, чтобы в нем использовались операции +=, -=, *=, /=. Количество строк кода при этом не должно измениться.

Переделайте этот код так, чтобы в нем использовалась операция .=. Количество строк кода при этом не должно измениться.

Переделайте этот код так, чтобы в нем использовались операции ++ и . Количество строк кода при этом не должно измениться.

Переделайте этот код так, чтобы в нем использовались операции ++, — , +=, -=, *=, /=. Количество строк кода при этом не должно измениться.

Источник

Сборник практических задач PHP для подготовки к собеседованию

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

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

Для старта достаточно клонировать сборник себе и начать описывать реализацию, все оставльное уже есть. Есть готовые входящие данные для задач, есть FB класс, который позволяет уйти от var_dump() или print_r(). Все есть, поставил и сразу можно выполнять задачи — без лишней суеты. Надеюсь, кому-нибудь это окажется нужным.

Как пользоваться?
Для удобства, задачи представилены несколькими интерфейсами папка на Github. Возьмем интерфейс ITestSortInterface (/src/Training) в качестве иллюстрации. Из названия видно, что в нем лежат задачи по сортировке:

Для начала выполнения заданий необходимо создать класс имплементирующий желаемые интерфейсы. Я назвал свой класс Test:

Тут используются два вспомогательных класса \FireDog\FB и Training\Data. ( Позвольте небольшую ремарку: Использование FB или Data не обязательно — это вспомогательные классы для удобства. Однако, консоль браузера представляется мне более удобной альтернативой var_dump() или print_r() )
Первый выводит дебаг инфу в консоль браузера:

Для браузера потребуется установка плагина firephp. Тут плагин для Хрома.
Второй класс Data, хранит готовые данные для заданий. Для задания $test->testSort1() нам нужен массив array(2,5,3,5,6,7,8,9,25,24,18,26,27,28,29,30,31) его то мы и получаем Data::getData(Data::ARR_SIMPL_INT)

Читайте также:  Комплекс упражнений для подростков с нарушениями осанки

Сборник будет пополняться и его можно использовать не только для подготовки к собеседованию, но и просто для тренировки навыков программирования на PHP. Присылайте свои задачи, наиболее интересные будут опубликованы в сборнике.

Источник

Задачи на ООП в PHP. Часть 1

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

Перед решением задач изучите теорию к данному уроку.

Задачи для решения

Работа с классами и объектами

Сделайте класс Worker, в котором будут следующие public поля — name (имя), age (возраст), salary (зарплата).

Создайте объект этого класса, затем установите поля в следующие значения (не в __construct, а для созданного объекта) — имя ‘Иван’, возраст 25, зарплата 1000. Создайте второй объект этого класса, установите поля в следующие значения — имя ‘Вася’, возраст 26, зарплата 2000.

Выведите на экран сумму зарплат Ивана и Васи. Выведите на экран сумму возрастов Ивана и Васи.

Сделайте класс Worker, в котором будут следующие private поля — name (имя), age (возраст), salary (зарплата) и следующие public методы setName, getName, setAge, getAge, setSalary, getSalary.

Создайте 2 объекта этого класса: ‘Иван’, возраст 25, зарплата 1000 и ‘Вася’, возраст 26, зарплата 2000.

Выведите на экран сумму зарплат Ивана и Васи. Выведите на экран сумму возрастов Ивана и Васи.

Дополните класс Worker из предыдущей задачи private методом checkAge, который будет проверять возраст на корректность (от 1 до 100 лет). Этот метод должен использовать метод setAge перед установкой нового возраста (если возраст не корректный — он не должен меняться).

На __construct

Сделайте класс Worker, в котором будут следующие private поля — name (имя), salary (зарплата). Сделайте так, чтобы эти свойства заполнялись в методе __construct при создании объекта (вот так: new Worker(имя, возраст) ). Сделайте также public методы getName, getSalary.

Создайте объект этого класса ‘Дима’, возраст 25, зарплата 1000. Выведите на экран произведение его возраста и зарплаты.

Наследование

Сделайте класс User, в котором будут следующие protected поля — name (имя), age (возраст), public методы setName, getName, setAge, getAge.

Сделайте класс Worker, который наследует от класса User и вносит дополнительное private поле salary (зарплата), а также методы public getSalary и setSalary.

Создайте объект этого класса ‘Иван’, возраст 25, зарплата 1000. Создайте второй объект этого класса ‘Вася’, возраст 26, зарплата 2000. Найдите сумму зарплата Ивана и Васи.

Сделайте класс Student, который наследует от класса User и вносит дополнительные private поля стипендия, курс, а также геттеры и сеттеры для них.

Сделайте класс Driver (Водитель), который будет наследоваться от класса Worker из предыдущей задачи. Этот метод должен вносить следующие private поля: водительский стаж, категория вождения (A, B, C).

Практика

Создайте класс Form — оболочку для создания форм. Он должен иметь методы input, submit, password, textarea, open, close. Каждый метод принимает массив атрибутов.

Передаваемые атрибуты могут быть любыми:

Для решения задачи сделайте private метод, который параметром будет принимать массив, например, [‘type’=>’text’, ‘value’=>’. ‘] и делать из него строку с атрибутами, в нашем случае type=»text» value=». «.

Пример создания формы с помощью нашего класса:

В результате получится следующая форма:

Создайте класс SmartForm, который будет наследовать от Form из предыдущей задачи и сохранять значения инпутов и textarea после отправки.

То есть если мы сделали форму, нажали на кнопку отправки — то значения из инпутов не должны пропасть. Мало ли что-то пойдет не так, например, форма некорректно заполнена, а введенные данные из нее пропали и их следует вводить заново. Этого следует избегать.

Создайте класс Cookie — оболочку над работой с куками. Класс должен иметь следующие методы: установка куки set(имя куки, ее значение), получение куки get(имя куки), удаление куки del(имя куки).

Создайте класс Session — оболочку над сессиями. Он должен иметь следующие методы: создать переменную сессии, получить переменную, удалить переменную сессии, проверить наличие переменной сессии.

Сессия должна стартовать (session_start) в методе __construct.

Реализуйте класс Flash, который будет использовать внутри себя класс Session из предыдущей задачи (именно использовать, а не наследовать).

Этот класс будет использоваться для сохранения сообщений в сессию и вывода их из сессии. Зачем это нужно: такой класс часто используется для форм. Например на одной странице пользователь отправляет форму, мы сохраняем в сессию сообщение об успешной отправке, редиректим пользователя на другую страницу и там показываем сообщение из сессии.

Класс должен иметь да метода — setMessage, который сохраняет сообщение в сессию и getMessage, который получает сообщение из сессии.

Создайте класс-оболочку Db над базами данных. Класс должен иметь следующие методы: получение данных, удаление данных, редактирование данных, подсчет данных, очистка таблицы, очистка таблиц.

Создайте класс Log для ведения логов. Этот класс должен иметь следующие методы: сохранить в лог, получить последние N записей, очистить таблицу с логами.

Класс Log должен использовать класс Db из предыдущей задачи (именно использовать, а не наследовать).

Источник

Программа самостоятельного изучения PHP

Давно я вынашивал идею создания курса по изучению одного из самых популярных языков Web-среды разработки — PHP . Проанализировав количество предложений по видеокурсам, вебинарам и книгам, я понял, что делать ещё один курс не имеет смысла. Но по коммерческим причинам за бортом информационного крейсера остались те, кто изучает программирование самостоятельно , комбинируя различные источники информации. Поэтому, если вы начинаете учить язык PHP , то я надеюсь, что моя программа вам поможет!

Как это всё читать?

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

Средства . Поиск источников информации, данных, выбор технологических решений оставляется на откуп изучающему — он волен сам выбирать, прочитать о технологии из книги, с сайта или посмотреть запись на YouTube. Я постараюсь давать ссылки на материалы, но относитесь к ним именно как к рекомендациям!

Для владеющих английским я настоятельно рекомендую к прочтению статью на Hackernoon , которая отлично раскладывает по полочкам навыки современного веб-программиста.

Уровень входа . Сам курс подразумевает отсутствие опыта программирования до начала изучения. Однако, мы пишем web-приложение, и оно не сможет обойтись без пользовательского интерфейса, который, в свою очередь, базируется на языке разметки HTML и таблицах стилей CSS. Для этого есть отличный ресурс . Там можно изучить эти языки, но сам сайт отлично работает и как справочник, так что можно будет к нему обращаться по мере изучения языка.

Читайте также:  Физическое упражнение это тесты

Содержание . Каждый блок состоит из нескольких частей:

1. Название части блока и задачи.

2. Постановка цели части блока.

3. Описание практической части, которую необходимо выполнить для того, чтобы усвоить информацию.

4. Описание получаемой ценности.

5. Комментарии и сопутствующие ссылки.

6. Практика. Как видите, каждый блок изучения имеет практическую часть. Запомните:

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

Временные рамки . Если у вас есть полный рабочий день из 8 часов, который вы можете посвящать обучению, то на первый блок у вас должна уйти неделя непрерывного обучения. Разумеется, кто-то будет совмещать всё с основной работой, но как и с любым обучением я рекомендую посвящать не менее 1.5 часов в день изучению и практике. В идеале — 2-3 часа. Этого хватит для того, чтобы вникнуть в тему, изучить материал и попрактиковаться. Разумеется, при таком подходе изучение первого блока займёт гораздо больше 1 недели, но у вас в первом приоритете должно быть качество, а не скорость!

Знакомство с языком. Первое приложение

Итак, начнём. Стремиться будем к тому, чтобы получить работающее приложение. Данный блок посвящён процедурному программированию и пока не рассматривает объекты. Основная цель — познакомиться с фундаментальными вещами.

Часть 1. Введение и базовые понятия

Задача : Установка окружения и запуск PHP.

Цель : Готовимся к работе с языком и средой.

Ценность : Мы готовим себе среду, в которой начнём изучать язык. Без неё продвинуться вперёд не получится.

Практика : 1. Узнать, как работает сайт с применением PHP — разобраться, как приходит запрос, как он передаётся веб-серверу, как он передаётся PHP на выполнение. 2. Установить сборку OpenServer/XAMPP. 3. Установить ПО для написания кода.

Комментарии . Пока мы ставим упрощённую сборку, которую затем заменим на более «продвинутый» вариант (виртуальную машину или контейнер). Сейчас нужно сконцентрироваться на PHP.

Для начала работы я рекомендую использовать обычные блокноты с подсветкой, например, Notepad++ или Sublime , а не IDE. Дело в том, что IDE будут давать подсказки, не давая нарастить опыт в самостоятельном поиске ошибок и их устранении.

Часть 2. Переменные, типы

Задача : Написать первый простой скрипт

Цель : Первые шаги в программировании.

Ценность : Начинаем писать настоящий код и запускать его. Ни один PHP-скрипт не работает без переменных. Более того, типизация переменных — важная тема, которая не только полезна в работе, но и крайне интересна интервьюерам на собеседованиях!

1. Понять, что такое переменные.

2. Познакомиться с типами переменных.

3. Узнать, что такое typehinting в PHP7.

4. Узнать про приведение типов и их преобразование.

5. Узнать про правильное именование переменных.

6. Реализовать простые математические операции.

8. Использование комментариев.

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

Также важно осознать, почему имена переменных типа «asd» и «massiv_chisel» так нелюбимы профессиональными разработчиками.

Часть 3. Функции

Задача : Учимся повторному использованию кода.

Цель : Сделать код нелинейным и повторно применяемым.

Ценность : Функции — основополагающая часть любого приложения, которое dы хотите использовать больше 15 минут. Без них нельзя работать ни с объектами, ни со стандартным поведением.

Также мы знакомимся с принципом DRY, который поощряет использование функций.

1. Узнать, что такое DRY.

2. Познакомиться с функциями.

3. Посмотреть, какие переменные и в каком количестве можно передавать в функции.

4. Что такое возвращаемое значение? Как оно происходит?

5. Что такое передача аргументов по ссылке?

6. Что такое статические и глобальные переменные? Чем плохи глобальные переменные?

7. Узнать про про правильное именование функций (см. Роберт Мартин — «Чистый код»).

8. Узнать и научиться правильно применять рекурсию (классическая задача — вычисление ряда Фибоначчи или возведение числа в степень). При изучении массивов нужно будет вернуться к вопросам рекурсии.

9. Изучить синтаксис комментариев PHPDoc.

Комментарии . Первый сложный для понимания блок, «ломающий мозг», если до этого с функциями не сталкивались. Главное здесь — осознать назначение функций, а также научиться их правильно создавать. Эта часть обучения очень важна для последующих шагов.

Часть 4. Ветвления

Задача : Учимся менять логику в зависимости от состояния и внешних воздействий.

Цель : Увеличиваем нелинейность кода и создаём разветвляющуюся логику.

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

1. Познакомиться с блок-схемами и тем, как они описывают различные логические схемы.

2. Познакомиться с конструкциями if, if-else, if-else if-else. В качестве условий можно брать математические операции сравнения.

3. Познакомиться с конструкцией switch .

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

5. Познакомиться с тернарным оператором . Чем тернарный оператор в PHP 7 отличается от него же, но в PHP 5?

6. Что такое статические и глобальные переменные? Чем плохи глобальные переменные?

7. Узнать, какие условия возможны в PHP. Что такое empty, isset, !empty ?

8. Что такое «==» и «===»? Чем они отличаются?

Комментарии . С ветвлениями нужно быть аккуратными. Они предоставляют мощный механизм построения логических конструкций, но с ними можно быстро скатиться в спагетти-код . Поэтому всегда тщательно проектируйте ветвления вашей программы, чтобы она была читаемой и поддерживаемой.

Часть 5. Массивы

Задача : Знакомимся с первой структурой хранения данных.

Цель : Узнаём о том, что наборы переменных можно объединять в структуры.

Ценность : Множество действий в программировании делается не с простыми (скалярными) переменными, а с применением сложных структур. Например, мы попробуем взаимодействовать с хранилищем в виде CSV-файла. Но что, если нам надо поработать с выборкой из 3 строк в одном случае и из 7 — в другом. Нам нужен динамический набор однообразных данных. И эту задачу (и далеко не только её) отлично решают массивы.

1. Узнать, что такое массив.

2. Познакомиться с индексными и ассоциативными массивами.

3. Узнать, что такое многомерные массивы.

4. Слить два массива при помощи array_merge.

5. Что такое array_shift, array_pop, explode, implode?

6. Обратить внимание на полный и сокращённый синтаксис объявления массивов.

Комментарии . Урок идёт в тесной связке со следующим уроком. Лучше всего изучать их вместе для лучшего понимания.

Часть 6. Циклы

Задача : Учимся множественному повторению действий.

Цель : Объединить вместе знания о переменных, массивах и функциях, научиться эффективно пользоваться наборами данных.

Ценность : Мы познакомились с большой и важной частью процедурного программирования. Она будет полезна практически всегда. Изученная группа создаёт 90 процентов исполняемого кода. Далее уже начинаются прикладные вопросы, решающие конкретные задачи, тогда как пройденный выше блок будет характерен практически для каждого языка программирования.

1. Познакомиться с циклами while, do-while, for. Понять, что for вполне достаточно (нужно начиться заменять while и do-while при помощи for).

2. Вывести на экран разные циклы. (см. FizzBuzz).

3. Узнать, что такое бесконечный цикл, а также конструкции break и continue.

4. Узнать, что такое цикл foreach.

Читайте также:  Как похудеть кормящей маме с помощью упражнениями

5. Создать двумерный массив, обойти его вложенными циклами.

6. Взять многомерный массив. Его уже не получится гибко обходить простыми циклами. Нужна рекурсивная функция. Задача : создать массив, хранящий многоуровневое меню сайта в виде [Страница — URL — [ Вложенные пункты в том же виде ] ]. Например, до 5 уровней. При помощи рекурсивной функции сгенерировать на его основании древовидное меню на сайт.

Комментарии . Завершаем с фундаментальными основами. Обязательно уделите время многомерным циклам. Посмотрите на то, как меняется время выполнения программы, если вложенным будет цикл на 1 000, 1 000 000 элементов.

Часть 7. Файлы

Задача : Начинаем выносить данные из оперативной памяти в более стабильные хранилища.

Цель : Научиться работать с примитивным хранилищем данных.

Ценность : PHP плохо умеет сохранять данные между разными вызовами скриптов сам по себе. Это его особенность. Пока мы не умеем работать с базами данных и другими хранилищами, но уже научимся сохранять информацию в самый простой носитель — файл.

Для чтения же нужно что-то чуть усложнённое, а значит понадобится структура, в качестве которой выступает формат CSV.

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

1. Поработать с простыми файлами — почитать и позаписывать данные.

2. Научиться записывать в файл логи выполнения программы (записать в файл содержимое переменной). Какие режимы работы с файлами существуют?

3. Научиться работать со структурированной информацией — CSV-форматом.

4. Научиться получать списки файлов в директориях и сформировать фотогалерею из файлов, лежащих в указанной папке.

5. Узнать про разницу между абсолютными и относительными адресами.

6. Узнать, что такое домашняя директория сайта, домашняя директория хоста, корневая директория. Чем они отличаются? Когда они нужны?

7. Посчитать слова в файле (считать, что слово — это часть текста, отделённая пробелом или знаком препинания).

8. Как подключать файлы с кодом? В чём разница между include и require? Зачем им _once?

9. Настроить окружение так, чтобы все запросы, кроме запросов к статическим файлам, направлялись к index.php.

10. Зачем нужна такая архитектура? Что такое «человеко-понятный URL»?

Комментарии . Решаем сугубо прикладные задачи. Обратите особое внимание на последнюю задачу — создание т. н. единой точки доступа в приложение. Такой подход впоследствии вы встретите во многих приложениях и фреймворках. Его нужно освоить и понять, в чём его суть.

Часть 8. Обработка форм

Задача : Учимся работать с пользовательским вводом.

Цель : Научиться делать наше приложение интерактивным.

Ценность : Формы — это один из немногих способов получения данных от пользователя. Работать с ними — важно. Но не менее важно, чтобы эта обработка была безопасной. Главная идея, которую нужно вынести отсюда — «любые данные, поступающие от пользователя извне, априори опасны, и их надо обязательно проверять и готовить к обработке, прежде чем впускать внутрь системы».

1. Узнать про методы HTTP (GET, PUT, POST, DELETE и т. д.) Чем они отличаются? Чем HTTPS отличается от HTTP? Что такое заголовки? Какие статусы ответа может возвращать сервер?

2. Посмотреть, как создать форму на HTML, которая будет отправлять данные к скрипту script.php.

3. Узнать, что такое суперглобальные массивы $_REQUEST, $_POST, $_GET, $_FILE.

4. Обработать данные от формы и записать их в файл.

5. Узнать, что такое валидация данных (очень хорошо, если удастся разобраться с регулярными выражениями — например, как проверить, что введённый адрес является корректным email-адресом?)

6. Узнать, как защититься от XSS, CSRF атак. Почему и как нужно защищать формы?

7. Узнать, что так CAPTCHA.

8. Научиться загружать файл на сервер.

9. Улучшить фотогалерею — теперь человек сам загружает файлы изображений. Кстати, а точно ли он загружает изображение, а не файл с вирусом? 😉

Комментарии . Обработать форму довольно просто, но гораздо сложнее обеспечить безопасность работы, ведь, к сожалению, пользователи не на 100 % настроены дружелюбно по отношению к вашему приложению. Поэтому важно не просто принимать данные к обработке.

Часть 9. Простая работа с базами данных

Задача : Структурируем хранение данных.

Цель : Файлы — это хорошо, но совершенно неоптимально.

Ценность : Файлы неудобны для хранения тем, что поиск данных в них усложнён и требует создания дополнительного функционала. Сама работа с ними достаточно медленная и тяжеловесная. Базы данных решают не только эту проблему, но и проблему структурирования данных в системе.

1. В сборке, установленной на 1 занятии, есть СУБД (скорее всего MySQL). Научиться подключаться к ней при помощи клиента. Например, HeidiSQL.

2. Научиться создавать простые таблицы с данными.

3. Узнать, что такое 3-нормальная форма и как она реализуется на примере таких структур как библиотеки, новостные сайты, свойства товаров.

4. Изучить простейшие команды выполнения запросов — SELECT, INSERT, UPDATE, DELETE.

5. Усовершенствовать обработку формы обратной связи — сохранять полученные данные в БД.

6. Что, если в форме передаются файлы? Как их привязать к отзыву?

7. Узнать, что такое SQL-инъекция. Как её избежать?

Комментарии . Практически ни одно современное приложение не обходится без хранилищ. Пока учимся самым простым вещам, чтобы потом их сделать интереснее и сложнее.

Задача : Сохраняем состояние пользователя между запросами.

Цель : Позволить пользователю видеть свою информацию между шагами работы на сайте.

Ценность : Поскольку скрипты PHP постоянно умирают, нужно как-то сохранять их состояние. Можно делать это и в БД, но это неудобно и дорого. Механизм сессий позволяет привязывать пакет данных к пользователю на протяжении его работы с системой. Cookie помогают пользователю проще идентифицировать себя перед сервером.

1. Познакомиться с механизмом сессий. Выяснить, сколько хранится сессия, как ею управлять.

2. Создать форму авторизации. Логика простая — человек вводит пару логин пароль. После этого его состояние можно сохранять в базе данных и в сессиях.

3. Узнать, почему нельзя хранить пароль пользователя в открытом виде. Узнать, что такое хэш (md5, blowfish, crc32, base64).

4. Научиться сохранять в сессии данные о пользователе после авторизации. Например, создать два скрипта PHP, и показывать на них имя пользователя в случае, если пользователь авторизован.

5. Познакомиться с механизмом Cookie. Чётко понимать, что можно хранить в них, а что нельзя. Почему Cookie — небезопасное хранилище?

6. Реализовать функционал «Запомнить меня» в форме логина.

Комментарии . Завершающая часть, которая позволяет нам работать с каждым пользователем персонально. Уже после неё можно привязывать к пользователю «Корзину» в интернет-магазине, создавать личные кабинете и т. п.

Часть 11. Первое приложение

Задача : Написать первое приложение.

Цель : Вспомнить всё!

Ценность : Не просто же так корпели над блоком?

1. Создаём приложение «Личный блог». Пока всё будет очень просто.

2. Модуль «Авторизация». Человек может залогиниться на сайте по заранее созданным логину и паролю, хранимым в БД.

3. Модуль «Роли». Человек может быть анонимом, читателем и админом. Читатель может отправлять сообщения через форму обратной связи. Админу доступна страница создания новых статей (форма).

4. Итого на сайте должны быть следующие страницы: главная со списком статей (например, myblog.com), страница статьи (например, myblog.com/article?id=4 или myblog.com/article/4), страница обратной связи (например, myblog.com/feedback), страница создания статьи (например, myblog.com/new)

5.* Попробуйте улучшить страницу создания новой статьи так, чтобы можно было ещё и редактировать существующие статьи.

Справились?

Да, самостоятельное обучение — это довольно сложный процесс . Но оцените, как приятно ощущается своё первое приложение!

Курс «Backend разработчик на PHP» в OTUS — современные инструменты и лучшие практики для глубокого понимания процесса разработки на PHP.

Источник

Понравилась статья? Поделиться с друзьями:
Adblock
detector