В сети есть много обучающих материалов по php, но для того, чтобы корректно начать такой раздел у себя на сайте, мне нужно завести несколько статей по основам этого языка программирования, на которые я буду ссылаться в дальнейшем. И так, начнём:
Что такое php
Как гласит определение на сайте php.net, PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) — это распространенный язык программирования общего назначения с открытым исходным кодом. PHP изначально сконструирован для веб-разработок. С его помощью так же удобно взаимодействовать с базами данных, работать с изображениями, текстовыми документами, электронными таблицами и т.д.
PHP — серверный язык и для его работы необходим веб-сервер. Существуем несколько популярных веб-сервером которые немного различаются составом программного обеспечения и быстродействием, однако принципы работы у них идентичны.
Принцип работы веб-сервера
Вообще понятие «Веб-сервер» можно отнести как к аппаратному обеспечению или «железу», так и к программному обеспечению.
- С точи зрения «железа», веб-сервер это компьютер, часто очень мощный, многопроцессорный, с большим объёмом оперативной памяти и твердотельными быстрыми жёсткими дисками (SSD) на котором установлено ПО и хранятся все файлы сайта (php и javascript скрипты, статичные html файлы, картинки, видео, аудио файлы, документы, файлы баз данных).
- С точки зрения программного обеспечения, веб-сервер это набор взаимодействующих между собой программ, которые контролируют доступ пользователей к файлам сайта, обеспечивают работу баз данных, следят за актуальностью кеша, распределяют нагрузку и т.д.
В общем виде работу веб-сервера можно описать следующей схемой:
- Клиент (ваш браузер) отправляет запрос (вбиваете название сайта, например yandex.ru)
- Сервер обрабатывает запрос и формирует ответ в виде веб-страницы, которую отображает ваш браузер (чаще для этого необходимо обращение в БД)
Вот так просто, вопрос-ответ. Иногда для ответа требуется последовательно выполнить ряд операций, например:
- Существует ли страница на которую хочет попасть пользователь
- А есть ли у него на это права
- Если есть то что ему можно показать (иногда это часть страницы)
- Извлечение информации из БД
- Генерация страницы на основе шаблонов (например Smarty)
- Отдача готовой страницы для отображения в браузере клиента
Но в общем виде это просто вопрос (или точнее запрос от браузера) и ответ.
Установка локального веб-сервера
Для обучения нам не нужно брать в аренду веб-сервер, достаточно установить локальный пакет, такой как WAMP или Denwer, однако я последнее время работал с пакетом OpenServer и для пользователей Windows нахожу его наиболее удобным. OpenServer — бесплатный пакет, однако если вы закинете туда 100 рублей, то скачаете его на много быстрее.
Я не буду детально расписывать установку OpenServer, он устанавливается как обычная программа для Windows. Единственное хочу сказать, что если у вас есть возможность установить его на отдельный SSD диск на котором будут хранится все ваши проекты, то сделайте именно так. Это повысит быстродействие веб-сервера и работу IDE (о которых мы поговорим дальше) и сделает вашу работу гораздо приятнее.
После установки у вас появится 2 ярлыка для запуска OpenServer, для 32-x и 64-х разрядной операционной системы. Чтобы узнать какой разрядности ваша система, перейдите в раздел (в Windows 10) «Панель управления -> Все элементы панели управления -> Система», там в блоке «Система» вы найдёте свойство «Тип системы»:
У меня это 64-х разрядкая операционная система, следовательно я запускаю OpenServer с ярлыка x64.
Так же, следует сразу настроить запуск OpenServer от имени администратора, т.к. он будет изменять файл windows/etc/system32/hosts когда вы будете создавать локальные доменные имена. А для правки hosts нужны права админа. Чтобы сделать это перейдите в свойства ярлыка программы:

На вкладке «Ярлык», кнопка «Дополнительно», открывает дополнительные свойства ярлыка.

В окне дополнительных свойств отметьте флажок «Запуск от имени администратора» и сохраните параметры ярлыка. Теперь OpenServer будет корректно запускаться и перегружаться.
Выбор редактора кода (или IDE)
И так, затрону холиварную тему, «в каком редакторе писать код». За 10 лет работы я перепробовал много разных программ, но на данный момент использую несколько прострых редакторов для работы с FTP и одну IDE для работы над локальными проектами под OpenServer. Давайте рассмотрим их по порядку:
Notepad ++

Лёгкий, простой редактор немного фунциональнее блокнота Windows, понимает большинство форматов файлов (от HTML до XML) которые могут потребоваться вам в работе над сайтом. В основном использую как вспомогательный редактор, когда нужно временно сохранить какой-то кусок кода или для быстрой правки локального файла, когда лень запускать IDE. Редактор бесплатный имеет ряд расширений. Скачать можно на официальном сайтe.
SublimeText 2

Не смотря на то, что есть уже 3-я версия, я всё же предпочитаю вторую, т.к. с третьей у меня возник ряд проблем в работе некоторых плагинов. Редактор очень удобный, имеет приятное оформление кода, поддерживает все необходимые для работы форматы файлов. Имеет массу расширений, плагинов которые устанавливаются как дополнение и значительно расширяют функциональность программы. Благодаря этому вы можете настроить свой уникальный SublimeText и получать удовольствие от работы.
Основной редактор кода, который я использую при работе с одиночными файлами, быстрыми правками и в работе над сайтом по FTP. Рекомендую.
PhpStorm IDE

Да, это платный редактор. Но за 9 баксов в месяц вы получаете отличный инструмент. Если вы планируете заниматься разработкой профессионально, то PhpStorm на мой взгляд — это лучший выбор IDE. За время карьеры мне довелось поработать с другими программами, такими как NetBeans, IDE Eclipse и VisualStudio Code. Все они бесплатные, полностью или частично и имеют ряд своих проблем.
Наиболее удобным из бесплатных редакторов был IDE Eclipse с рядом расширений для работы с php, FTP, Git + расширение которое анализирует весь проект, позволяет связать классы используемые в клиентском коде и легко «передвигаться» по коду при его анализе. Так вот, настроить всё это корректно не всегда получается. Расширения написаны разными людьми и иногда взаимодействуют некорректно, к тому же быстродействие IDE хромает. А вот в phpStorm это всё уже встроено и работает отлично! Скачать пробную версию на месяц, можно на официальном сайте.
Знакомство с синтаксисом
Давайте немного познакомимся с синтаксисом php. Для этого я предлагаю создать локальный сайт при помощи OpenServer который я надеюсь вы уже скачали и установили ранее. Для этого запустите OpenServer с подготовленного ярлыка (запуск от имени администратора), в трее появится маленький красный флажок, это наш сервер, он пока не активен.
Щёлкните левой кнопкой мышки по значку OpenServer в трее, в контекстном меню выберете пункт «Настройки» и перейдите на вкладку «Домены». Укажите имя домена, например mysite.local и укажите путь к папке проекта на сервер. Обычно это папка где установлен OpenServer, у меня это F:\OSPanle\domains\тут_имя_папки_проекта.
Сохраните настройки и перезапустите OpenServer. После запуска сервера, в контекстном меню OpenServer-а (в трее) в пункте «Мои сайты» появиться только что созданный домен. Теперь можно создать в папке с доменом (F:\OSPanle\domains\mysite.local) файл index.php и познакомиться с синтаксисом этого языка.
Переменные
Базовый элемент любого языка программирования. В языке php, правильное имя переменной должно начинаться с буквы или символа подчеркивания и состоять из букв, цифр и символов подчеркивания в любом количестве. Есть ряд зарезервированных имён переменных, например $this — это специальная переменная которой нельзя ничего присваивать.
В общем правила именования переменных в php можно описать так:
- Имена переменных после знака доллара должны начинаться с буквы или с символа _ (подчеркивания).
- Имена переменных могут содержать только символы: a–z, A–Z, 0–9 и _ (подчеркивание).
- Имена переменных не должны включать в себя пробелы. Если имя переменной
нужно составить более чем из одного слова, то в качестве разделителя рациональнее всего будет использовать символ подчеркивания (например $user_name). - Имена переменных чувствительны к регистру символов. Переменная $name отличается от переменной $Name.
Специальные справки есть в документации по php, раздел «Руководство по именованию». А сейчас давайте рассмотрим пару примеров:
Типы данных
PHP является языком с динамической типизацией и в отличии например от C/C++ вам не нужно заранее инициализировать переменную и следить за тем чтобы ей присваивалось значение того типа, которое вы указали при инициализации. Это даёт определённую свободу действия, но так же не редко приводит к ошибкам, т.к. в одну и ту же переменную по ходу выполнения программы могут попадать значения разных тивом, меняя при этом тип переменной.
В языке PHP поддерживается 8 типов данных:
- boolean (логический тип)
- integer (целочисленный)
- double (числа с плавающей точной)
- string (строковый тип)
- array (массивы)
- object (объекты)
- resource (ресурсы)
- NULL
$boolean = true; //Логический тип, true/false
$int = 123; // Целочисленный
$double = 123.57; //Дробный тип
$string = 'Иван Иванов'; //Строковый тип
//Массив
$array = [1, 2, 3, 4, 5];
$array1 = ['Иван', 'Пётр', 'Олег'];
//Объект
$object = new MyClass(); // Объект/экземпляр класса MyClass
//Ресурс
$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user_name', '123456'); //$dbh здесь это ресурс
//NULL
$n = NULL; //Тип NULL
Мы подробнее разберём их на примерах в других статьях.Если вы хотите узнать какого типа та или иная переменная, воспользуйтесь встроенной в язык функцией gettype(), передав ей саму переменную. Функция вернёт строку с названием типа данных этой переменной.
Выражения
Вся программа состоит из выражений. По сути это базовый строительный элемент вашей программы. Практически всё что вы пишите в php коде. является выражением. Самое простое выражения может выглядеть так:
$age = 18; //Простое выражение присваивание значения
Обратите внимание что все выражения php заканчиваются на символ ; (точка с запятой). Так интерпретатор понимает где заканчивается одно выражение и начинается другое. На начальном этапе вы часто будете допускать ошибки, забывая ставить точку с запятой. Её отсутствие приведёт к синтаксической ошибке и не рабочему коду.
Условия, ветвления
В языке php есть механизм позволяющий организовать разное поведение программы в зависимости от некоторых условий.
$sum = 150; //Общая сумма покупки (она может быть получена из формы корзины)
$discount = 0;
//Назначим пользователю скидку в зависимости от суммы покупки
if($sum == 200){
//Даём скидку 5%
$discount = 5;
} else {
//Не даём скидку
}
//Можно использовать несколько вариантов скидок от суммы при помощи elseif
if($sum == 1000){
//Даём скидку 15%
$discount = 15;
} elseif($sum == 500) {
//Даём скидку 10%
$discount = 10;
} elseif($sum == 200) {
//Даём скидку 5%
$discount = 5;
} else {
//Не даём скидку
}
//Для такого множественного условия лучше использовать конструкцию switch case
switch ($sum) {
case 1000:
//Даём скидку 15%
$discount = 15;
break;
case 500:
//Даём скидку 10%
$discount = 10;
break;
case 200:
//Даём скидку 5%
$discount = 5;
break;
Функции
Функции в php позволяют нам повторно многократно использовать тот или иной код в разных частях нашего приложения (веб-сайта). Т.е. если какой-то код выполняет одно и то же действие на сайте несколько раз, имеет смысл «обернуть» его в функцию. Например, вывести пользователю сообщение о наличии у него скидки.
//Покажем сообщение о скидке
function showDiscount(int $discount, string $userName)
{
if($discount > 0) {
echo $userName . ' поздравляем! Ваша скидка: ' . $discount . '%';
}
}
//Вызов функции
showDiscount(10, 'Александр'); //Результат: Александр поздравляем! Ваша скидка: 10%
В данном примере мы определили функцию showDiscount() которая принимает 2 параметра $discount — величина скидки и $userName — имя пользователя. Затем внутри (в теле) функции осуществляем проверку скидки, если она есть выводим сообщение пользователю.
Циклы
Циклы — крайне полезная языковая конструкция позволяющая обрабатывать или выводить на экран определённую коллекцию данных, например строки таблицы, список пользователей, группу товаров и т.д. Проще говоря цикл позволяет нам выполнить какой-нибудь блок кода несколько раз. Php поддерживает несколько видов циклов:
- Цикл с предусловием while;
- Цикл с постусловием do-while;
- Цикл со счетчиком for;
- Цикл для перебора массивов foreach
Я детальнее остановлюсь на циклах в отдельной статье, а сейчас приведу лишь небольшой пример:
//Массив пользователей
$users = ['Иван Иванов', 'Пётр Петров', 'Николай Николаев'];
//Выведем нумерованный список пользователей циклом foreach
echo '<ol>'
foreach($users as $key => $user) {
/* Тело цикла, оно будет выполнятся пока цикл не достигнет конца массива,
т.е. после вывода «Николай Николаев» цикл завершится и программа продолжит выполнение */
echo '<li>'. $user .'</li>';
}
echo '</ol>'
В результате выведется нумерованный список пользователей из массива $users
- Иван Иванов
- Пётр Петров
- Николай Николаев
На этом пока всё, в последующих статьях детальнее разберём затронутые в статье темы, поговорим о работе с базой данных, рассмотрим объектно-ориентированное программирование, частые ошибки, способы отладки и т.п. Удачи в изучении php.
P.S. не верьте хейтерам которые говорят что php «умирает», они делают это последние 20 лет, однако 80% всех сайтов в интернете работают на php, это хороший язык программирования со своими плюсами и минусами, его довольно легко освоить и начать работать в сфере web-разработки.Функции и конструкции языка использованные в статье: foreach() , switch case