Что можно создать на php
Логотип Википедии
В Википедии имеется статья по теме «PHP»
PHP (произносится пи-эйч-пи́) — скриптовый язык программирования, созданный для генерации HTML-страниц на веб-сервере и работы с базами данных. На сегодняшний момент поддерживается подавляющим большинством представителей хостингов. Входит в «LAMP» — «стандартный» набор для создания веб-сайтов.
Содержание
Комментарии [ править ]
PHP предоставляет несколько методов для вставки комментариев. Проще всего пользоваться двойной косой чертой (//), после чего PHP-машина игнорирует всё, что расположено до конца строки. Также можно пользоваться многострочными комментариями в стиле «C» / «С++» (/*…*/). Для однострочных комментариев можно ещё пользоваться символом решётки (#) (комментарий сценарных языков операционной системы «UNIX»).
Следует помнить о том, что стили комментариев PHP действуют только внутри ограничителей PHP. Если PHP встретит эти символы комментариев вне ограничителей, то они, как и любой текст, будут помещены на HTML-страницу. Например:
Переменные [ править ]
В РНР переменные начинаются со знака доллара ($). За этим знаком может следовать любое количество буквенно-цифровых символов и символов подчёркивания, но первый символ не может быть цифрой. Следует также помнить, что имена переменных в РНР чувствительны к регистру, в отличие от ключевых слов.
При объявлении переменных в РНР не требуется явно указывать тип переменной; при этом одна и та же переменная может иметь на протяжении программы разные типы.
Переменная инициализируется в момент присвоения ей значения и существует до тех пор, пока выполняется программа (в случае web-страницы — пока не завершён запрос) или она не будет удалена функцией unset() .
Функции вывода [ править ]
В PHP существует несколько способов вывести что-либо в веб-страницу:
Различие: print — всегда возвращает «1»; echo — ничего не возвращает.
Вывод различных функций [ править ]
Аргумент | echo | print_r() | var_dump() |
---|---|---|---|
1 | 1 | 1 | int(1) |
1.1 | 1.1 | 1.1 | double(1.1) |
false | bool(false) | ||
array( 1, 2, 3 ) | Array | Array |
Типы данных в РНР [ править ]
Как уже было сказано, PHP предоставляет определённую гибкость в отношении типов переменных, — то есть, с одной и той же переменной на протяжении программы можно работать и как со строкой, и как с числом. Однако несмотря на это, в РНР существует набор основных типов данных, которые могут явно указываться при работе с переменными:
Обозначение | Тип данных |
---|---|
integer | Целое число. |
string | Строка символов. |
boolean | Двоичное данное (либо «Истина», либо «Ложь»). |
double | Десятичное число; 1—2 значащих разряда в дробной части. |
float | Десятичное число с плавающей точкой. Более 2 значащих разрядов в дробной части. |
array | Массив объектов. |
object | Объект. |
NULL | Пустой тип. |
Resource | Ресурс. |
Есть функция gettype() , возвращающая тип, который РНР назначил переменной:
Существует также функция settype() , которая явно устанавливает тип:
Кроме функции settype() , преобразование типов в РНР можно осуществлять при помощи операторов преобразования типов. Преобразование типов осуществляется путём указания перед переменной её нового типа, взятого в скобки:
Соответственно, выполнение следующего кода приведёт к тому, что РНР вернёт «integer»:
Внешние переменные [ править ]
После того, как запрос клиента проанализирован веб-сервером и передан РНР-интерпретатору, последний устанавливает ряд переменных, которые содержат данные запроса и доступны всё время его выполнения.
Сначала PHP инициализирует массивы $_ENV (содержащий переменные среды-окружения; англ. environment) и $_SERVER [1] . Ассоциативный массив $_SERVER содержит следующие ключи (индексы массива):
Ключ (индекс ячейки массива) | Полный путь к ячейке массива | Содержимое ячейки массива |
---|---|---|
HTTP_USER_AGENT | $_SERVER[‘HTTP_USER_AGENT’] | Сведения о браузере клиента. |
HTTP_ACCEPT | $_SERVER[‘HTTP_ACCEPT’] | Принимаемые MIME-типы. Может служить для определения возможностей браузера. |
PHP_SELF | $_SERVER[‘PHP_SELF’] | Путь к файлу, содержащему выполняющийся скрипт, относительно корневого каталога (папки) сервера. Пример: /w/index.php . |
Затем РНР заполняет переменную $_GET[] , являющуюся ассоциативным массивом, которая создаётся при анализе строки запроса. Строка запроса хранится в элементе массива $_SERVER[‘QUERY_STRING’] и представляет собой информацию, следующую за символом «?» в запрошенном URL. РНР разбивает строку запроса по символам «&» [2] на отдельные элементы, а затем ищет в каждом из этих элементов знак «=». Если знак «=» найден, то создаётся переменная с именем из символов, стоящих слева от знака равенства. Рассмотрим следующую форму:
Если Вы сохраните этот фрагмент кода в виде HTML-файла и откроете его в веб-браузере, то увидите форму ввода. Если в строке «HDD» набрать какой-либо текст (к примеру, «Maxtor»), и также в строке «CD-ROM» (например, «Nec»), то по нажатию на «Отправить» будет составлен запрос:
http://localhost/PHP/test.php?HDD=Maxtor&CD-ROM=Nec — и при этом РНР создаст следующие элементы массива с соответствующими индексами (ключами): $_GET[‘HDD’] = ‘Maxtor’ и $_GET[‘CDROM’] = ‘Nec’ . Вы можете работать с ними (т.е. с этими переменными) из Вашего скрипта (у нас — «test.php») как с обычными переменными; в нашем случае — они просто выводятся на экран:
Если запрос страницы выполняется при помощи метода POST , то появляется группа POST-переменных, которые интерпретируются так же и помещаются в массив $_POST[] .
Константы [ править ]
Константы объявляются в РНР при помощи функции define() :
Первый параметр этой функции — имя константы, второй — её значение. При использовании константы на неё ссылаются по имени:
По традиции имена констант пишут буквами верхнего регистра. И хотя это только традиция, мы рекомендуем Вам следовать ей, поскольку «плохие» программисты получаются в том числе и из тех, кто не следовал хорошим традициям. Существует функция defined() , которая проверяет, определена ли константа:
Операторы [ править ]
Математические операторы [ править ]
В PHP, как и в любом другом языке программирования, есть базовый набор математических операторов:
Оператор | Операция | Примечания |
---|---|---|
— | Смена знака числа. | |
— | Вычитание. | |
+ | Сложение. | |
* | Умножение. | |
/ | Деление. | Всегда возвращает тип float , вне зависимости от результата. |
% | Деление по модулю. | Возвращает остаток от деления. |
Инкремент и декремент [ править ]
- Возвращают старое значение $a:
- $a++ — увеличить $a на 1;
- $a— — уменьшить $a на 1.
- ++$a — увеличить $a на 1;
- —$a — уменьшить $a на 1.
Операторы сравнения [ править ]
Существуют следующие операторы сравнения:
Оператор Проверка Условие истинности (возвращается true ) $a == $b Равно $a равно $b. $a === $b Идентично $a равно $b и они одного и того же типа. $a != $b или $a <> $b Не равно $a не равно $b. $a > $b Строго больше $a строго больше $b. $a < $b Строго меньше $a строго меньше $b. $a >= $b Больше или равно $a или больше, или равно $b. $a <= $b Меньше или равно $a или меньше, или равно $b. Операторы присвоения [ править ]
Для присвоения переменной нового значения используется оператор « = »:
Также существуют сокращённые операторы присвоения: += , -= , .= , /= , *= , %= . Пример:
Поразрядные операторы [ править ]
Эта группа операторов работает с битовыми представлениями значений целочисленных операндов. В основном эти операторы применяются для создания набора булевых флагов:
Операторы ветвления алгоритмов (if… elseif… else…) [ править ]
Оператор if позволяет выполнять определённый код только при выполнении определённого условия:
Этот код выводит следующие строки:
Чтобы выполнять код, только если условие не выполнилось — можно использовать блок else :
Можно использовать инструкцию elseif (англ. «иначе, если»):
Переключатель (switch) [ править ]
Вышенаписанный пример выведет: «Переменная имеет значение „A“» — и то же выведет следующий пример:
Операторы цикла [ править ]
Операторы цикла задают многократное исполнение операторов в теле цикла. В PHP определены 4 разных оператора цикла:
- Цикл с предусловием: while(condition)
- Цикл с постусловием: do < statements; >while(condition);
- Итерационный цикл: for(expression1; expression2; expression3)
- Итерационный цикл foreach (т.е. перебор элементов массива): foreach(array as [$key =>] $value)
Если 3 первых оператора цикла берут своё начало от «С»-подобных языков, то последний оператор позаимствован у языка «Perl».
while [ править ]
Оператор while называется оператором цикла с предусловием. При входе в цикл вычисляется выражение условия, и, если его значение отлично от нуля, выполняется тело цикла. Затем — вычисления выражения условия и операторов тела цикла выполняется до тех пор, пока значение выражения условия не станет равным нулю. Оператором while удобно пользоваться для просмотра всевозможных последовательностей, если в конце них находится заранее известный символ. (Это очень удобно в «C++», — к примеру, для определения длины строки, — поскольку в «С++», по определению, строка есть последовательность символов типа «char», заканчивающаяся нулевым символом: \0 ).
Пример простейшего цикла while :
Этот код выдает в окне браузера цифры от одного до пяти.
Для выхода из цикла применяется оператор break . При обнаружении этого оператора все итерации прекращаются. Пример: при выполнении нижеприведённого цикла — несмотря на то, что переменная $var = 7 — в окне браузера появятся цифры «1»—«5», исключая «6» и «7»:
Чтобы перейти в следующую итерацию применяется continue :
В этом примере выводятся цифры «1»—«7», за исключением «5».
Заметим, что если Вы расположите условный оператор после операторов echo — код будет ошибочным (т.к. выведутся все цифры, включая «5»), поскольку проверка условия выхода из итерации будет происходить уже после полного выполнения этой итерации.
Бесконечный цикл реализуется при помощи оператора while следующим образом:
Примечание: в PHP стандартное время исполнения скрипта — 30 секунд (эту настройку можно изменить в файле «php.ini»); по его прошествии с начала выполнения скрипта действие скрипта будет прервано. Таким образом, наибольшее время выполнения «бесконечного» цикла (без изменения настроек) — полминуты.
do… while… [ править ]
Этот оператор называется оператором цикла с пост-условием. При входе в цикл в любом случае выполняется тело цикла (то есть цикл всегда будет выполнен хотя бы один раз); затем — вычисляется условие, и если оно не равно «0», то вновь выполняется тело цикла и проверка условия. В нижеследующем примере — «нуль» всегда будет добавлен в список, независимо от условия (++$i <= $var) :
Цикл с постусловием бывает полезен при обработке некоторых последовательностей — когда обработку нужно заканчивать не «до», а «после» появления концевого признака.
Бесконечный цикл реализуется так:
for [ править ]
Как уже говорилось, итерационный цикл имеет следующий формат:
Здесь expression1 (инициализация цикла) — последовательность определений и выражений, разделяемая запятыми. Все выражения, входящие в инициализацию, вычисляются только один раз, при входе в цикл. Как правило, здесь устанавливаются начальные значения счётчиков и параметров цикла. Смысл выражения-условия expression2 — такой же как и у циклов с предусловиями; при отсутствии выражения-условия предполагается, что его значение всегда истинно. Выражения expression3 вычисляются в конце каждой итерации после выполнения тела цикла.
В следующем скрипте мы по традиции выведем числа от «0» до «5»:
Результат аналогичен показанному для «do… while…».
foreach [ править ]
Оператор цикла foreach предназначен для работы с элементами массива. Следующий код превратит все элементы массива в единицы:
Также предусмотрена возможность работы с ассоциативными массивами. При обработке следующего кода в переменной $name будет храниться ассоциативный индекс элемента, а в переменной $value — его значение. Проще говоря, ($arr[$name] == $value) .
Тернарный оператор «?:» [ править ]
Тернарный оператор «?:» — это вид условного оператора. В случае с записью вида Выражение «1» ? Выражение «2» : Выражение «3» — он проверяет Выражение «1», и если оно верно, то тернарный оператор возвращает значение Выражения «2»; иначе — Выражения «3».
Строковые функции PHP [ править ]
Грамотно работать со строками очень важно для программиста. Строковых функций в PHP немало, причем многие из них, так или иначе, просто дублируют друг друга. Однако, приёмы работы с основными блоками функций (функции поиска и замены в тексте, функции удаления пробельных символом (trim-функции), функции форматного вывода) надо представлять очень чётко.
Вообще говоря, по определению, строка — это последовательность символов типа char, которая заканчивается нулевым символом. Поэтому можно, конечно, радоваться тому, что при работе со строками нам не приходится жонглировать указателями в стиле «C»/»C++», однако не стоит забывать о том, что цена этому удобству — быстродействие. Поэтому некоторые приводимые здесь функции мы будем обсуждать в том числе и с точки зрения их быстродействия.
Функция «htmlspecialchars» [ править ]
string htmlspecialchars(string $str)
Эта функция преобразовывает некоторые специальные символы HTML в другой формат. При этом они будут отображаться без учёта их специального назначения.
Корректное формирование и вывод гиперссылки, содержащей определённые параметры:
Заметьте, что следующий (ниже представленный) код содержит грубое нарушение, так как формирует гиперссылку с атрибутом, содержащим незаконченную (не закрытую) ссылку на сущность (&…;) :
Это довольно часто встречаемая ошибка.
Функции поиска в тексте [ править ]
substr() [ править ]
Функция substr() возвращает часть строки. Например:
Где «3» — точка отсчёта, а «7» — длина изымаемой строки. Если же требуется вести отсчёт от конца строки — используйте отрицательное значение.
Эта функция разобьёт число по трём разрядам:
Для работы с разными кодировками используется функция:
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
strpos() [ править ]
int strpos (string haystack, string needle [, int offset])
Возвращает позицию первого вхождения подстроки needle (в переводе с английского — «иголка») в строку haystack (в переводе с английского, как вы уже догадались, — «стог сена»). Необязательный аргумент offset позволяет указать, с какого по счёту символа строки haystack начинать поиск.
Если подстрока needle не найдена — strpos() возвращает FALSE .
Эта функция определяет модель браузера:
strrpos() [ править ]
Возвращает позицию последнего вхождения символа:
int strrpos (string haystack, string needle [, int offset])
Возвращает позицию последнего вхождения needle в строку haystack . В «PHP 4» используется только первый символ строки needle .
Начиная с «PHP 5» необязательный аргумент offset позволяет указать, с какого по счету символа строки haystack начинать поиск. Отрицательное значение предписывает прекратить поиск при достижении определенной позиции до конца строки.
Если подстрока needle не найдена — возвращает FALSE .
Эта функция достаёт из URL имя файла (только пример; в жизни, можно использовать функцию basename() ):
strstr(), stristr() [ править ]
string strstr (string $haystack, string $needle [, bool $before_needle = false ])
Возвращает подстроку строки haystack : начиная с индекса первого вхождения подстроки needle — до конца строки. Функция stristr() выполняет ту же функцию, но не чувствительна к регистру.
Для работы с разными кодировками используются функции:
string mb_strstr (string $haystack , string $needle [, bool $before_needle = false [, string $encoding ]])
string mb_stristr (string $haystack , string $needle [, bool $before_needle = false [, string $encoding ]])
где параметр encoding — название используемой кодировки символов (например «UTF-8»); если этот параметр опущен — используется внутренняя кодировка.
strchr() [ править ]
Эта функция является псевдонимом функции strstr() .
strrchr() [ править ]
string strrchr (string $haystack, char $needle)
Возвращает подстроку строки haystack : начиная с последнего вхождения needle — до конца строки.
Если подстрока needle не найдена — возвращает FALSE .
Если needle состоит более чем из одного символа — используется только первый символ.
Если needle не является строкой — он приводится к целому и трактуется как код символа.
substr_count() [ править ]
int substr_count (string $haystack, string $needle)
Возвращает число вхождений подстроки needle в строку haystack .
Можно использовать или текст в кавычках (или апострофах), или переменные.
strspn() [ править ]
Находит длину начального сегмента маски.
int strspn (string $str1, string $str2)
Возвращает длину начального сегмента $str1 , состоящего полностью из символов строки $str2 .
strcspn() [ править ]
Обратная к функции strspn() .
Определяет отсутствие начальных символов в строке.
Возвращает длину начального фрагмента строки $str1 , состоящего полностью не из символов, которые есть в строке $str2 .
Система пользователей [ править ]
В этой статье будет описаны алгоритмы системы пользователей и их коды на языке PHP.
Регистрация [ править ]
Алгоритм регистрации — самый простой из тех, что мы будем здесь использовать. Серверу предстоит записать:
- Введённые пользователем данные;
- Результат хеш-функции от пароля.
Авторизация пользователя [ править ]
Алгоритм авторизации пользователя
Вход пользователя будет производиться по следующему алгоритму:
- Пользователь заполняет форму: «Логин», «Пароль»;
- Данные запоминаются в переменной $_POST, после чего будут обрабатываться на сессии [3] ;
- Уже в сессии хешируется введённый пользователем пароль, алгоритмом MD5;
- Подключение к базе данных «SQL» и импорт данных со строки пользователя admin (допустим, пользователь ввёл имя пользователя admin). Затем запись всей строки в массив $table — такой вариант поможет сократить много нервов и строк;
- Сравнение зашифрованного пароля, который в базе данных, — с зашифрованным, введённым пользователем;
- Если пароли совпадают, записываются «COOKIE» с информацией о авторизации пользователя. («user_enter» & «user_login»);
- Закрытие сессии методом перенаправления на другую страницу. — header (Location: . );
Форма входа [ править ]
Сессия (session.php) [ править ]
Вывод данных пользователя [ править ]
Для вывода данных пользователя будут использоваться куки, но поскольку они могут содержать только латинские буквы и цифры — они будут использоваться только как идентификатор имени пользователя и подтверждения его авторизации.
Пользователю нужно выводить максимум информации о его ошибках. Если Ваш проект будет очень большим и пользователь при входе будет вводить не только логин и пароль, а ещё 20 полей — то пользователю будет не очень удобно, при опечатке, смотреть на такое сообщение:
Возможно, Вы ошиблись при заполнении данных. Попробуйте ещё раз.
Ему будет гораздо приятнее, если ему выведут сообщение с возможным полем опечатки и самой опечаткой. Но в нашем варианте, будет рассматриваться только вариант с логином и паролем.
Естественно, невозможно использовать один и тот же текст для вывода разной информации. Всего их три:
- Если пользователь авторизировался;
- Если пароли не совпадают;
- Если пользователь ещё не авторизировался и хочет ввести свои данные.
Проще всего будет просто выводить шаблон на страницу ($login_form).
Язык PHP и работа с базой данных MySQL
Однако этого недостаточно, чтобы создать даже самый простой сайт с формой регистрации. Для этого необходимы НАВЫКИ ВЕБ-ПРОГРАММИРОВАНИЯ. В эту часть увлекательного путешествия и направляемся.
Frontend и Backend
Программирование можно условно разделить на 2 части: Frontend и Backend.
Frontend разработка — это внешний вид сайта, результат этой работы видят пользователи на экране монитора.
Backend — это внутренняя часть сайта, результат этой работы вы видите через frontend разработку. Когда вы делаете любой запрос: в поиске, нажимаете активную ссылку, кнопку и т.д., то практически мгновенно получаете результат на экран.
Этот путь от вашего запроса до получения результата и есть невидимая сторона работы любого сайта: логика всех запросов, чтобы выдать требуемый результат.
Приведем аналогию с устным счетом: сложите 32 и 47. Ваш мыслительный процесс никто не видит, он внутри вас. Вы используете свою логику подсчета, так же и сайт использует для выполнения поставленной задачи логику backend разработки.
Основы backend-разработки — PHP/MySQL
PHP — это язык программирования для создания веб-сайтов.
Веб-сайт (website) — совокупность HTML страниц и других электронных документов, с общим дизайн, взаимосвязанных гиперссылками и расположенных на одном доменном имени.
PHP хорошо встраивается в верстку уже известного вам языка HTML.
PHP применяется тогда, когда нужно какую-то информацию хранить на сервере.
Язык PHP отвечает ЗА ЛОГИКУ поведения сайта, но само знание языка не сделает из вас разработчика, вам необходимо научиться СТРОИТЬ АЛГОРИТМЫ.
Например, строим логику таким образом, что только администратор может изменить запись в блоге или посмотреть отчет о продажах в интернет-магазине, другим пользователям эти действия недоступны .
Любой язык прост, если научиться его понимать!
Наша задача научить вас ЧИТАТЬ чужой код, и СОЗДАВАТЬ свой.Что это значит?
Когда вы видите код уже написанной программы, то читая его, легко представите себе, что будет происходить на экране монитора в результате логики работы алгоритмов.Чтобы научиться web-программированию разбиритесь — какой у вас есть строительный материал для сайтостроения. На данном этапе это язык программирования PHP и база данных MySQL.
Чтобы понимать язык достаточно разобраться в синтаксисе, основных определениях и правилах применения.
Ваши основные строительные материалы:
— переменные и их типы,
— массивы и работа с ними,
— функции и создание собственных функций,
— отправка и получение данных из HTML-форм (GET, POST),
— объектно-ориентированное программирование (Классы, инкапсуляция, полиморфизм, наследование, интерфейсы)
Основы безопасности сайта
Важно знать, КАК защитить свое творение. В этом модуле PHP/MySQL научитесь грамотно писать программы на PHP, чтобы вероятность взлома сайта стремилась к нулю.
Перейдем к базам данных MySQL/MariaDB
Практически любой сайт имеет базу данных. Это хранилище, в котором собирается и структурируется используемая на сайте информация. Например, если это блог, то в базе хранятся: темы статей, сами статьи, имена авторов, дата публикации, название рубрики, комментарии и т.д.
Вам интересно узнать статистику своего сайта? Сколько посещений, время нахождения на сайте, количество новых пользователей, сколько было продаж и т.д. Это аналитическая информация и она тоже хранится в базе данных.
MySQL/MariaDB — это одна из самых популярных и самых распространенных СУБД (система управления базами данных) в интернете. Большинство данных веб-сайта хранится в MySQL/MariaDB.
SQL — язык запросов к базам данных, с помощью которого можно выбирать данные из таблиц, сортировать данные, суммировать числовые данные, которые хранятся в ячейках таблицы. Таблицы в базах данных похожи на таблицы в Excel, но с помощью SQL можно удобно работать с этими данными.
Научиться работать с базами данных необходимо.
Основные операции:
— ввод и вывод данных,
— сортировка,
— обновление,
— удаление.В процессе обучения вы знакомитесь с системой администрирования сайта и спроектируйте свою первую структуру таблиц базы данных.
Подружите их в своей деятельности по сайтостроению на курсе PHP/MySQL на интерактивной он-лайн платформе beONmax.
На PHP пишут программы по: регистрации и авторизации пользователей, поиску по сайту, можно создать собственные движки, вычислительного робота, автоматизировать повторяющиеся алгоритмы, создать интернет-магазин и т.д.
Очень много вакансий на работу PHP-программистом! PHP — это один из самых распространенных языков веб-программирования! То есть, зная всего один язык программирования, сможете реализовать тысячи всевозможных проектов, как для себя, так и для других людей за хорошие деньги!
PHP достаточно прост и это будет очень важно для тех, кто еще ни разу не программировал! Научившись PHP, вы проще осваиваете другие языки программирования.
Секрет неуклонного движения вперед в том, чтобы сделать первый шаг. Секрет первого шага в том, чтобы разбить сложные задачи на простые и начать с самой первой.
Марк Твен
Будь на максимуме! Включайся в web!
команда beONmaxЖдать не нужно когда наберется группа или наступит дата начала курса — на beONmax вы приступаете к обучению сразу!
Язык программирования PHP. Почему мы пишем на PHP?
Языку программирования PHP уже давно предсказывали исчезновение. Но годы идут, а этот язык по-прежнему в топ-10 рейтинга TIOBE. Почему он так популярен и распространён? Об этом и поговорим.
Что за язык такой, PHP?
PHP: Hypertext Preprocessor («Инструменты для создания персональных веб-страниц», Personal Home Page Tools) до сих пор считается лидирующим в сфере современной веб-разработки. Его создал программист из Дании Расмус Лердорф, разработавший в 1994 г. набор скриптов на Perl — речь идёт о той самой «персональной домашней странице», ставшей впоследствии основой PHP.
Спустя какое-то время языком стали интересоваться разработчики со всего мира. Фактически, PHP является одним из старейших языков, если мы говорим об open source. Сегодня его поддерживают энтузиасты во главе с Zend Technologies. Таким образом, PHP активно развивается по сегодняшний день.
Об интерпретируемости PHP
Основная характеристика языка программирования PHP — его интерпретируемость. Тот же Java сначала компилируется, потом запускается в работу. Что касается PHP, то он создаётся в процессе обращения к нему. То есть пользователь открывает web-сайт, на сервер отправляется запрос, и в это самое время компилируется PHP-код. При этом каждый скрипт компилируется в режиме реального времени, а потом выполняется.
За счёт вышеописанного свойства PHP считается очень гибким языком. В том же Java разработчик вводит название класса лишь единожды, и оно не меняется. Язык PHP, в отличие от Java, компилируется в рантайме, поэтому есть возможность подставить, по сути, любое название класса из переменной.
Но за гибкость надо платить. В случае с PHP мы платим скоростью работы web-сайта.
О динамической типизации в PHP
Как известно, языки программирования бывают с динамической и статической типизацией. Во втором случае тип переменной определяется заранее и жёстко. Если это число, то int, если строка, то string. В первом случае переменная может являться одновременно и числом, и строкой, и объектом, и массивом — чем угодно. Мы можем присвоить одной переменной число, потом массив — язык программирования позволит нам так сделать. Именно таким и является PHP.
Но не всё так просто
У динамической типизации есть минусы, и заключаются они в том, что она снижает быстродействие и потребляет много оперативной памяти. Опять же, мы платим за гибкость и удобство. Впрочем, PHP-разработчики сейчас активно работают над тем, чтобы уменьшить потребление памяти, сохранив гибкость статически нетипизированного языка программирования.
Как бы там ни было, два вышеописанные свойства объясняют, почему PHP так популярен.
Между первой и седьмой промежуток небольшой
Версии PHP с первой по третью были, мягко говоря, «сырыми». Но хоть возможностей было и мало, для создания простых сайтов этого хватало. Впрочем, хватало и различных нюансов, поэтому работать с этим языком программирования было непросто. Но, начиная с версии 5.4, PHP превратился в отлаженную технологию.
Неплохо себя показали релизы 5.5 и 5.6. А вот шестую версию пропустили. Предполагалось, что она будет поддерживать Unicode на уровне ядра, однако релиз не состоялся. Один из разработчиков тогда сказал, что PHP 6 был весьма амбициозным, но довольно отстойным проектом. В результате занялись PHP 7. И не зря — эту версию считают революционной с точки зрения быстродействия. Та же PHP 5.6 довольно медленно работала с массивами, да и вообще с переменными. Собственно говоря, строка обрабатывалась в десятки раз медленнее, чем на C#. С одной стороны, речь идёт о долях секунды, поэтому проблема не бросается в глаза. С другой, если у тебя миллионы пользователей, это недопустимо. А ведь мы говорим про Facebook, между прочим.
HipHop для PHP. Прорыв в скорости
Как известно, Facebook был написан на PHP, поэтому проблему скорости нужно было решать. Решение было найдено — собственный интерпретатор языка. Разработчики компилировали его изначально в промежуточные коды, а потом отправляли в обычный интерпретатор Zend Engine. Таким образом, программисты из Facebook внедрили статическую типизацию, ускорив работу PHP в два раза. И это был прорыв на то время. Транслятор назвали HHVM — «HipHop для языка PHP».
Но команда PHP-разработчиков тоже не тратила времени даром. Она плотнее занялась массивами и со временем выпустила седьмую версию языка, работающую быстрее HHVM. Кстати, в PHP 7 по-прежнему практически отсутствует статическая типизация. Она есть лишь в параметрах функции, поэтому, можно считать, что её и нет. Далее язык продолжал ускорятся, улучшая показатели даже в пределах с 7.0 до 7.3.
Будет ли новая версия PHP?
Разработчики понимают, что надо сделать PHP быстрее, сохранив гибкость, а значит, придётся переходить к статической типизации. Пока рассматривается оптимальный вариант, предполагающий наличие оной в некоторых частях скрипта. Ориентировочная дата выхода PHP 8 — 2022 год, но может и раньше.
Кстати, на сегодняшний день проходит тестирование нововведений в PHP 8. Расмус Лердорф, создатель PHP, утверждает, что в PHP-мире ничего не случается без движения сообщества. Ту же статическую типизацию хотели внедрить ещё в версии номер 7, но нашлись изъяны, и она не прошла голосование. Также стоит добавить, что в 8-й версии хотят полностью отойти от языка C, на котором частично написан PHP. Кроме того, планируют ускорить работу с матрицами.
Для чего нужен PHP?
Как уже было сказано в начале статьи, — для веб-разработки. Только web и ничего кроме веба. Однако сегодня эта область просто безгранична, и даже десктопные приложения уходят в web — облачный сервис Microsoft Office тому пример.
Кроме того, когда-то считалось, что PHP не подойдёт для крупных и высоконагруженных проектов, но опыт Facebook доказал обратное. Ещё один пример удачной реализации — Авито».
Так стоит ли учить?
Несмотря на предсказания о скорой смерти, PHP до сих пор востребован. А за счёт низкого порога входа изучить его несложно. Те же C# и Java имеют более высокий порог вхождения. Впрочем, у низкого порога входа есть и минусы: сегодня на российском рынке труда PHP-разработчиков довольно много, и им платят так себе. Правда, это потому, что большинство из них имеют не очень высокий уровень.
Что касается действительно профессиональных PHP-разработчиков, то они, по сути, используют те же паттерны проектирования, что и в случае со статически типизированными языками. Даже бытует мнение, что на PHP сложнее программировать. В той же Java или C# допустить алгоритмическую ошибку и присвоить переменной не тот тип вы не сможете. А язык программирования PHP это пропустит, в результате чего программисту придётся поломать голову с вопросом, что же не так. Вроде бы и работает всё, но, увы, неправильно.
Именно поэтому настоящие эксперты PHP-разработки получают не намного меньше, чем программисты, владеющие другими языками. Только вот найти действительно хорошего специалиста — это сегодня проблема.
Как бы там ни было, начать изучать PHP — это лучше, чем не начать изучать ничего. К тому же, в сети есть множество неплохих курсов, уроков и лекций. Пройдя их, можно подумать и о переходе на более высокий уровень мастерства. А вот здесь помогут платные курсы для продвинутых разработчиков:
Самоучитель для начинающих: как освоить PHP с нуля за 30 минут?
PHP (от англ. препроцессор гипертекста) – язык программирования общего назначения, широко используемый в веб-разработке. Сценарии PHP можно внедрять непосредственно в код HTML. В этой статье мы пройдемся по основам программирования на PHP: синтаксису, объявлению переменных, массивам, условным операторам, циклам и функциям. Также запустим двумя способами веб-сервер на локальной машине и соберем страничку из нескольких файлов PHP и фреймворка Bootstrap. В конце статьи приведем список литературы и бесплатные курсы по PHP для новичков.
Редакторы кода
Для удобного кодинга нам понадобится редактор кода (IDE). Популярные:
-
(платный, пробная версия на 30 дней); (бесплатно); (бесплатно); (бесплатно).
Как запустить PHP в Atom
Устанавливать PHP на компьютер и запускать веб-сервер мы будем в конце статьи в разделе «Собираем HTML-страницу». А пока для запуска PHP-сценариев достаточно добавить плагин Script в редакторе Atom.
Чтобы запустить PHP-сценарий в Atom перейдем в закладку Packages → Script → Run Script , либо нажмем на клавиши Ctrl + Shift + B (рис. 1).
Рис. 1. Запуск php-скрипта в редакторе Atom
1. Синтаксис
Код в PHP заключается в открывающий <?php и закрывающий ?> теги. Согласно стандарту кодирования PSR-12, закрывающий тег должен быть опущен в файлах, содержащих только код PHP . В конце строки ставят разделитель строк – точку с запятой ; . Если забыть поставить разделитель, то следующая строка кода соединится с предыдущей и интерпретатор PHP выдаст ошибку.
Выведем на экран строку Hello World (заключена в кавычки) с помощью команды echo :
через функцию print :
через функцию printf (выводит отформатированную строку):
или через функцию print_r() , выводящую информацию в удобочитаемом виде:
Чтобы перенести строку используем символ \n , который работает только в двойных кавычках:
2. Объявление переменной
PHP – язык со слабой типизацией, то есть перед объявлением переменной не нужно задавать ее тип. Чтобы объявить переменную, перед ее именем ставят знак доллара $ :
переменной animal присвоили значение Сat .
Выведем на экран переменную animal :
Одно значение можно присвоить нескольким переменным:
Комментарии
Однострочный комментарий начинается с двух слешей // или хеш-символа # , а многострочный заключается в /* */ :
3. Типы данных
3.1. Строки
Строка – набор символов, заключенный в одиночные » или двойные кавычки «» :
Конкатенация строк
Оператор конкатенации точка . соединяет левый и правый аргументы:
Оператор присваивания с конкатенацией .= присоединяет правый аргумент к левому:
Чтобы перенести слово на новую строку воспользуемся символом переноса \n , который работает только в двойных кавычках:
3.2. Числа
Целое число (integer) не имеет дробной части:
Число с плавающей точкой
Число с плавающей точкой имеет дробную часть и задается следующий образом:
Чтобы узнать тип переменной воспользуемся функцией gettype() , а для преобразования числа с плавающей точкой в целое число функцией intval() :
Арифметические операторы
Оператор Операция + Сложение — Вычитание * Умножение / Деление % Деление по модулю ** Возведение в степень Таблица 1. Арифметические операторы
Мы можем сложить два числа через запись $number_one = $number_one + $number_two; или через сокращенную запись $number_one += $number_two; :
Операторы сравнения
Чтобы сравнить значения используют операторы сравнения, которые возвращают true или false :
Если строка не содержит число, то интерпретатор PHP приводит значение строки к 0. Если в строке есть число и оно стоит после буквенных символов, то значение всей строки также приводится к 0. Е сли число стоит перед буквенными символами, то для сравнении берется только число.
Оператор Значение $n == $m True, если $n равно $m $n === $m True, если $n равно $m и имеют одинаковые типы $n! = $m True, если $n не равна $m $n <> $m True, если $n не равна $m $n !== $m True, если отличаются тип или значение переменных $n < $m True, если $n меньше $m $n > $m True, если $n больше $m $n <= $m True, если $n меньше или равна $m $n >= $m True, если $n больше или равна $m $n <=> $m Возвращает -1, если $n меньше $m, 0 в случае равенства и 1, если $n больше $m Таблица 2. Операторы сравнения
Порядок операций
Сначала считается выражение в скобках:
4. Условный оператор if-else
Рис. 2. Условный оператор if в PHP
Оператор if выполняет код, если выполняется условие. В противном случае выполняется код после else, который переводится, как «иначе», «в другом случае».
Синтаксис оператора if-else
Напишем несколько условий с оператором if и if-else :
для проверки дополнительных условий используется оператор elseif :
&& – логический оператор И . В нашем условии проверяемое число должно быть больше четырех и меньше десяти.
Оператор Значение Результат $n and $m И true, если и $n, и $m true $n or $m Или true, если или $n, или $m true $n xor $m Исключающее Или true, если $n, или $m true ! $n Отрицание true, если $n не true $n && $m И true, если и $n, и $m true $n || $m Или true, если или $n, или $m true Таблица 3. Логические операторы
5. Тернарный оператор
Тернарный оператор сокращает запись проверяемого условия и имеет следующий синтаксис:
Проверим, переменная n больше 10 или нет. Если значение n больше 10 , уменьшим значение n на единицу (декремент). В противном случае увеличим на единицу (инкремент).
6. Переключатель switch
Переключатель switch проводит нестрогое сравнение == значений и передает управление соответствующему оператору case . Если значение не совпадает со значением из case , тогда выполняется переход к оператору default .
Синтаксис переключателя switch
Напишем конструкцию из переключателя switch и двух операторов case :
7. Цикл while
Рис. 3. Цикл while в PHP
Оператор while выполняет код до тех пор, пока значение условия не станет ложным.
Синтаксис цикла while
Выведем на экран пять раз слово Hello .
Расшифровка :
while – обозначение цикла.
$m = 0 – начальное значение переменной m .
$m < 5 – условие, которое проверяется перед началом цикла.
$m++ – инкрементирование, то есть увеличение переменной на единицу.
echo «Hello\n» – вывод на экран слово Hello каждый раз с новой строки \n .
Другой способ записи с помощью декремента в условии:
$m— – декрементация, то есть уменьшение значения переменной на единицу. В это примере знак декремента — стоит после переменной, поэтому мы получим четыре итерации (от 4 до 0).
Если поставить оператор декремента перед переменной —$m , то мы получим три итерации (от 4 до 1):
8. Цикл do..while
Цикл do..while выполняется минимум один раз, так как условие выполнения цикла проверяется в конце итерации, а не в начале как в цикле while .
Синтаксис цикла do..while
Напишем цикл, выводящий на экран четыре раза слово Hello :
9. Цикл for
Рис. 4. Цикл for в PHP
Когда нам известно количество итераций, вместо цикла while лучше использовать цикл for .
- Инициализирующее выражение выполняется один раз в начале цикла.
- Проверяется условие. Если оно истинно, то выполняется тело цикла. Если ложно, то выполнение цикла прерывается.
- В конце каждой итерации изменяется счетчик (увеличивается или уменьшается).
Цикл выполняется, до тех пор, пока условие истинно, то есть значение i не станет равным 4:
10. Цикл foreach
Цикл foreach последовательно перебирает элементы массива.
Синтаксис цикла foreach
На каждой итерации переменной присваивается значение текущего элемента последовательности. Переберем все элементы массива и умножим каждый элемент на 3:
11. Массивы
Рис. 5. Индексы элементов в массиве PHP
Массивы – упорядоченная коллекция элементов с доступом по индексу или ключу. Индексный массив создается двумя способами:
Через функцию array() :
и через квадратные скобки []:
echo $a[1] – вывести на экран второй элемент массива.
Нумерация массива начинается с 0 . В нашем случаем элементу массива Cat соответствует порядковый номер 0 , Dog – 1 , 123 – 2 . Для обращения к элементу массива используется следующий синтаксис: $имя_массива[индекс_элемента] .
Рекомендуется объявлять массив через квадратные скобки, так как эта запись компактнее.
Создадим пустой массив:
Добавим в него несколько элементов и выведем на экран его содержимое:
Чтобы добавить новый элемент мы использовали запись $имя_массива[] = новый_элемент . Первый добавленный элемент получает индекс 0 . Индексы следующих элементов увеличиваются на 1 . Можно задать индекс самостоятельно. Для этого в квадратных скобках укажем нужный нам индекс:
При добавлении непронумерованного элемента 5000 , значение его индекса будет на единицу большего максимального значения индекса в массиве – 101 :
Для удаления элемента из массива воспользуемся функцией unset() :
unset($array[2]) – удаление третьего элемента массива.
В качестве индекса также используют строки:
В таком случае мы получаем что-то напоминающее словари в других языках программирования с ключами и значениями. В PHP такой массив называют ассоциативным.
Ассоциативный массив объявляется через символы => :
Создадим ассоциативный массив:
Для поиска ключа по значению используем функцию array_search():
array_search(‘Cat’ ,$array) – поиск ключа, соответствующего значению Cat в массиве array .
Чтобы подсчитать количество элементов в массиве воспользуемся функцией count() :
Также можно создать многомерный массив:
‘animals’ => [‘Cat’, ‘Dog’] – ключ animals с двумя значениями: Cat и Dog .
‘second_array’ => [5000, 33, [‘third_array’ => [‘Hello’]]] – ключ second_array с тремя значениями: два числа 5000 , 33 и массив, но уже со своим ключем third_array и значением Hello .
12. Функции
Функция – подпрограмма, которая на входе принимает аргументы (бывают функции без входных аргументов), выполняет код и возвращает результат. Функциональное программирование упрощает жизнь программиста, так как не нужно копировать и вставлять фрагменты кода снова и снова. Достаточно обратиться к функции когда нужно и сколько угодно раз.
Существуют встроенные и пользовательские функции. Встроенные функции – print() , print_r() и так далее – придумали разработчики. Пользовательские функции программисты пишут самостоятельно.
Как объявить функцию
function – мы говорим интерпретатору, что отсюда начинается функция.
аргументФункции – переменные, которые передаются функции для выполнения кода.
имяФункции – чтобы вызывать функцию, ей нужно присвоить имя.
return – выдает результат работы функции.
Напишем и вызовем функцию, выводящую на экран фразу Hello, World .
Аргументы функций
До этого мы рассматривали функции без аргументов – переменных, которые функция получает извне. Напишем функцию с аргументами, которая считает сумму трех чисел:
$a , $b , $c – аргументы функции.
13. Собираем HTML-страницу
Чтобы просмотреть HTML-страницу, собранную из нескольких PHP-файлов, установим и запустим веб-сервер, разместим файлы в определенной папке и обратимся к файлу через браузер.
Запуск веб-сервера
Веб-сервер можно запустить несколькими способами:
- Через встроенный в PHP веб-сервер.
- Через сторонние инструменты: XAMPP , Open Server,Winginx .
Встроенный в PHP веб-сервер
Инструкция для Windows:
- Скачаем с официального сайта PHP и распакуем содержимое архива на диск.
- Откроем консоль и перейдем в папку с PHP, используя команду cd , например, cd php7 .
- Создадим папку page командной mkdir page . В ней будут храниться файлы нашей странички.
- Введем в консоли php -S localhost:8000 -t P:\php7\page\ . Флаг -S означает, что мы запускаем сервер по адресу localhost на 8000 порту. Флаг -t указывает путь к корневой директории.
Инструкция для Ubuntu:
- Установим PHP командой sudo apt install php libapache2-mod-php php-mysql .
- Создадим в домашней директории папку page .
- Введем в консоли php -S localhost:8000 -t /home/USERNAME/page .
Чтобы проверить запущен ли сервер, перейдем по адресу http://localhost:8000/:
Рис. 6. Запуск встроенного в PHP веб-сервера
Если мы получили ошибку 404, значит сервер запущен.
XAMPP
Скачаем и установим XAMPP . В папке C:\xampp\htdocs\ создадим папку нашей странички page . Запустим веб-сервер Apache, кликнув по кнопке Start . Узнаем версию PHP, введя в консоли (Shell) команду php -v .
Рис. 7. Запуск сервера с помощью XAMPP
Проверим, запущен ли сервер, перейдя по адресу http://localhost/ . Если появилось приветственное сообщение, значит сервер запущен.
Рис. 8. Запуск сервера с помощью XAMPP на Windows
14. Собираем страничку
Теперь создадим несколько PHP-файлов, из которых соберем страничку. Перейдем в папку page и создадим четыре файла: index.php , header.php , body.php , footer.php .
Структура простого HTML-документа выглядит следующим образом:
Воспользуемся фреймворком Bootstrap, чтобы ускорить создание странички. Скачивать ничего не нужно, просто вставим ссылку на Bootstrap в тег <head> :
Откроем файл header.php и вставим в него следующий код:
в файл footer.php :
в файл index.php :
include – инструкция, которая подключает к PHP-сценарию другие сценарии. Также сценарии подключают с помощью инструкций require , include_once и require_once . Они отличаются по реакции на отсутствие подключаемого файла.
Откроем страницу, перейдя на http://localhost:8000/ или http://localhost/page/ . Должно получиться как на рис. 9.
Рис. 9. HTML-страница, собранная из php-файлов