PHP: Делаем что-нибудь полезное — Manual
Давайте сделаем что-нибудь полезное. К примеру, определим, какой браузер использует тот, кто смотрит в данный момент нашу страницу. Для этого мы проверим строку с именем браузера, посылаемую нам в HTTP-запросе. Эта информация хранится в переменной. Переменные в PHP всегда предваряются знаком доллара. Интересующая нас в данный момент переменная называется $_SERVER[‘HTTP_USER_AGENT’].
Замечание:
$_SERVER — специальная зарезервированная переменная PHP, которая содержит всю информацию, полученную от Web-сервера. Её также называют суперглобальной. Для более подробной информации смотрите раздел Суперглобальные переменные.
Для вывода данной переменной мы сделаем так:
Пример #1 Вывод значения переменной (элемента массива)
<?php
echo $_SERVER['HTTP_USER_AGENT'];
Пример вывода данной программы:
Mozilla/4. 0 (compatible; MSIE 6.0; Windows NT 5.1)
В PHP существует огромное количество типов переменных. В предыдущем примере мы печатали элемент массива. Массивы могут быть очень полезны.
$_SERVER — это просто одна из переменных, которые предоставляются вам языком PHP. Список таких переменных можно посмотреть в разделе «Зарезервированные переменные» или просмотрев вывод функции phpinfo(), используемой в примере в предыдущем разделе.
Внутрь PHP-тегов можно помещать несколько выражений и создавать маленькие блоки кода, делающие больше, чем простой вызов echo. Например, если вы хотите добавить проверку для Internet Explorer, можно сделать так:
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
echo 'Вы используете Internet Explorer.<br />';
}
?>
Пример вывода данной программы:
Вы используете Internet Explorer. <br />
Здесь мы показали несколько новых элементов. Во-первых, здесь есть конструкция if. Если вы знакомы с основами синтаксиса языка C, то вы уже заметили что-то схожее. Если же вы не знаете C или подобного по синтаксису языка, то лучший вариант — взять какую-либо вводную книжку по PHP и прочитать первые пару глав. Другой вариант — почитать раздел Описание языка данного руководства.
Кроме этого, здесь присутствует вызов функции strpos().
strpos() — встроенная в PHP функция, которая ищет
одну строку в другой. В данном случае мы ищем строку 'MSIE'
(так называемую «иголку» — needle)
в $_SERVER[‘HTTP_USER_AGENT’] (в так называемом «сене»
— haystack). Если «иголка» найдена внутри «сена», функция возвращает
позицию «иголки» относительно начала «сена». В противном случае она возвращает false
.
Если она не вернёт false
, то условие в
if окажется истинным (true
), и
код в фигурных скобках ({ }) выполнится. В противном случае этот код
не выполняется. Попробуйте создать аналогичные примеры с использованием
команд if,
else и других функций,
таких, как strtoupper() и strlen().
Также подобные примеры содержатся во многих описаниях функций в данном руководстве.
Если вы не знаете, как использовать функции, возможно, вам стоит
прочесть страницу руководства о том,
как читать определения функций и раздел о
функциях в PHP.
Продемонстрируем, как можно входить в режим кода PHP и выходить из него даже прямо посередине блока с кодом:
Пример #3 Смешение режимов HTML и PHP
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h4>strpos(), должно быть, вернул не false</h4>
<p>Вы используете Internet Explorer</p>
<?php
} else {
?>
<h4>strpos() вернул false</h4>
<p>Вы не используете Internet Explorer</p>
<?php
}
?>
Пример вывода данной программы:
<h4>strpos(), должно быть, вернул не false</h4> <p>Вы используете Internet Explorer</p>
Вместо использования команды PHP echo для вывода, мы вышли из режима
кода и просто послали содержимое HTML. Важный момент здесь то, что логическая
структура кода PHP при этом не теряется. Только одна HTML-часть будет
послана клиенту в зависимости от результата функции
strpos() (другими словами, в зависимости от того,
найдена была строка MSIE
или нет).
Регулярные выражения — PHP с нуля
Регулярные выражения — это специальные шаблоны для поиска подстроки в тексте. С их помощью можно решить одной строчкой такие задачи: «проверить, содержит ли строка цифры», «найти в тексте все адреса email», «заменить несколько идущих подряд знаков вопроса на один».
Начнем с одной народной программистской мудрости:
Некоторые люди, сталкиваясь с проблемой, думают: «Ага, я умный, я решу её с помощью регулярных выражений». Теперь у них две проблемы.
Это довольно-таки объемный и сложный урок. Но, если ты дошел до сюда, то ты способен осилить и это.
Примеры шаблонов
Начнем с пары простых примеров. Первое выражение на картинке ниже ищет
последовательность из 3 букв, где первая буква это «к», вторая — любая русская буква и
третья — это «т» без учета регистра (например, «кот» или «КОТ» подходит
под этот шаблон). Второе выражение ищет в тексте время в формате 12:34
Любое выражение начинается с символа-ограничителя (delimiter по англ.). В качестве
него обычно используют символ /
, но можно использовать и другие
символы, не имеющие специального назначения в регулярках, например, ~
,
#
или @
. Альтернативные разделители используют, если в
выражении может встречаться символ /
. Затем идет сам шаблон строки,
которую мы ищем, за
ним второй ограничитель и в конце может идти одна или несколько букв-флагов. Они
задают дополнительные опции при поиске текста. Вот примеры флагов:
i
— говорит, что поиск должен вестись без учета регистра букв (по умолчанию регистр учитывается)u
— говорит, что выражение и текст, по которому идет поиск, исплоьзуют кодировку utf-8, а не только латинские буквы. Без него поиск русских (и любых других нелатинских) символов может работать некорректно, потому стоит ставить его всегда.
Сам шаблон состоит из обычных символов и специальных конструкций. Ну
например, буква «к» в регулярках обозначает саму себя, а вот символы [0-5]
значат «в этом месте может быть любая цифра от 0 до 5».
Ниже мы разберем значение каждого из этих символов (а также объясним почему буква
«ё» вынесена отдельно в первом выражении), а пока попробуем
применить наши регулярки к тексту и посмотреть, что выйдет. В php есть
специальная функция preg_match($regexp, $text, $match)
,
которая принимает на вход регулярку, текст и пустой массив. Она проверяет,
есть ли в тексте подстрока, соответствующая данному шаблону и возвращает
, если нет,
или 1
, если она есть. А в переданный массив в элемент с индексом
0 кладется первое найденное совпадение с регуляркой. Напишем простую
программу, применяющую регулярные выражения к разным строкам:
Код | Результат |
---|---|
| Строка: рыжий кот + Найдено слово 'кот' Строка: рыжий крот - Ничего не найдено Строка: кит и кот + Найдено слово 'кит' |
Познакомившись с примером, изучим регулярные выражения более подробно. a-c] значит «один любой символ, кроме a, b или c».
abc+
знак «плюс» относится только
к букве c и это выражение ищет слова вроде abc, abcc, abccc. А если
поставить скобки a(bc)+
то квантифиактор плюс относится
уже к последовательности bc
и выражение ищет слова
abc, abcbc, abcbcbcПримечание: в квадратных скобках можно указывать диапазоны
символов, но помни, что русская буква ё идет отдельно от
алфавита и чтобы написать «любая русская буква»,
надо писать [а-яё]
.
Бекслеши
Если ты смотрел другие учебники по регулярным выражениям, то наверно заметил,
что бекслеш везде пишут по-разному. Где-то пишут один бекслеш:
\d
, а здесь в примерах он повторен 2 раза: \\d
.
Почему?
Язык регулярных выражений требует писать бекслеш один раз. Однако в
строках в одиночных и двойных кавычках в PHP бекслеш тоже имеет особое
значение: мануал про строки.
Ну например, если написать $x = "\$";
то PHP воспримет это как
специальную комбинацию и вставит в строку только символ $
(и движок регулярных выражений не узнает о бекслеше перед ним). Чтобы
вставить в строку последовательность \$
, мы должны удвоить бекслеш
и записать код в виде $x = "\\$";
.
По этой причине в некоторых случаях (там, где последовательность символов имеет специальный смысл в PHP) мы обязаны удваивать бекслеш:
- Чтобы написать в регулярке
\$
, мы пишем в коде"\\$"
- Чтобы написать в регулярке
\\
, мы удваиваем каждый бекслеш и пишем"\\\\"
- Чтобы написать в регулярке бекслеш и цифру (
\1
), бекслеш надо удвоить:"\\1"
В остальных случаях один или два бекслеша дадут один и тот же
результат: "\\d"
и "\d"
вставят в строку пару
символов \d
— в первом случае 2 бекслеша это последовательность
для вставки бекслеша, во втором случае специальной последовательности
нет и символы вставятся как есть. Проверить, какие символы вставятся в строку,
и что увидит движок регулярных выражений, можно с помощью
echo: echo "\$";
. Да, сложно, а что поделать?
Специальные конструкции в регулярках
\d
ищет одну любую цифру,\D
— один любой символ, кроме цифры\w
соответствует одной любой букве (любого алфавита), цифре или знаку подчеркивания_
.\W
соответствует любому символу, кроме буквы, цифры, знака подчеркивания.
Также, есть удобное условие для указания на границу слова: \b
.
Эта конструкция обозначает, что с одной стороны от нее должен стоять символ,
являющийся буквой/цифрой/знаком подчеркивания (\w
), а с
другой стороны — не являющийся. Ну, например, мы хотим найти в тексте слово
«кот». Если мы напишем регулярку /кот/ui
, то она
найдет последовательность этих букв в любом месте — например, внутри слова
«скотина». Это явно не то, что мы хотели. Если же мы добавим
условие границы слова в регулярку: /\bкот\b/ui
, то теперь
искаться будет только отдельно стоящее слово «кот».
Мануал
Также, есть полезный сайт Regex101, где можно протестировать свою регулярку и проверить, что она найдет в тексте. Помни, что на том сайте бекслеши надо писать ровно один раз, и ставить флаг u не требуется.
Задачка
Напиши программу, получающую на вход автомобильный номер, и проверяющую, правильно ли он введен. Автомобильный номер имеет вид «а123вг», то есть начинается с буквы, за которой идет 3 цифры, и еще 2 буквы. Никаких посторонних символов быть в нем не должно.
Эту программу надо решить с помощью preg_match()
и регулярного
выражения. Протестировать его ты можешь например на сайте Regex101.
Задачка на проверку телефонов
Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — правильный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).
Задачу надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет, что они определяются как надо (если нет — надо вывести, какой именно номер не распознается правильно).
Вот список номеров:
// Правильные: $correctNumbers = [ '84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567' ]; // Неправильные: $incorrectNumbers = [ '02', '84951234567 позвать люсю', '849512345', '849512345678', '8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88', '84951a234567', '8495123456a', '+1 234 5678901', /* неверный код страны */ '+8 234 5678901', /* либо 8 либо +7 */ '7 234 5678901' /* нет + */ ];
Также, на regex101
https://regex101.com/r/qF7vT8/3 уже введены номера и можно простестировать
свою регулярку. Помни что на этом сайте надо писать бекслеш один раз,
например \s
, а не \\s
. Флаг m там стоит чтобы
^
и $
в регулярке обозначали «начало и конец
любой строки», а не «начало и конец всего текста». Флаг g (его нет в PHP,
он только на этом сайте) значит что надо искать все совпадения с
регуляркой, а не только первое.
Подсказка: не надо строить сложных выражений и предусматривать все возможные комбинации символов. Достаточно написать: сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов
Повторим
- preg_match находит первое совпадение с регулярными выражением и проверяет, соответствует ли текст или часть выражению
- preg_match_all находит все фрагменты текста, соответствующие регулярке
- preg_split разбивает текст на массив частей по регулярному выражению
- preg_replace заменяет в тексте части, соответствующие регулярке, на данную строку
Задачки (пока без картинок)
- На вход скрипта дан введенный пользователем номер телефона в виде 8-911-404-44-11 или +7(812)6786767 (в начале 8 или +7, потом идут 10 цифр и, возможно, какие-то символы). То есть, как и в прошлой задаче, человек вводит номер как хочет. Надо проверить номер на правильность и привести любой номер к единому формату 89114044411 (то есть, заменить +7 на 8 и выкинуть весь мусор вроде пробелов, скобок и минусов, кроме цифр)
- Автозамена. Напиши скрипт, заменяющий определенное слово на другое (например, слово «дурак» на «хороший человек» в фразе «ты дурак»). Скрипт должен не пропускать слово, если оно написано буквами в разном регистре (ДуРАк), с заменой русских букв на похожие английские (а -> a), или через пробелы («ты — д у р а к»)
- Дан текст, содержащий в себе email’ы (адреса почты вроде [email protected] ). Напиши скрипт, выводящий все email, встречающиеся в этом тексте
- «Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
- нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
- «жи» или «ши» написано с буквой ы
- в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
- в тексте есть слова «а» или «но» без запятой перед ними.
- (можешь добавить еще несколько правил, если хорошо знаешь русский язык)
В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).
- Если ты сделал задачу про Grammar Nazi, сделай скрипт, которы вместо сообщения об ошибках будет молча их исправлять.
Опечаточники
Как тебе наверно известно, многие люди, занимающие государственные посты, тратят свои силы отнюдь не на улучшение ситуации в своем городе или регионе, а на придумывание разнообразных схем по перемещению вверенных им бюджетных средств в свои карманы.
Например, государственные органы, которые хотят провести закупки, обязаны организовать публичные торги и разместить объявление о них на сайте госзакупок. Чтобы помешать всем желающим участвовать в тендере (и чтобы отдать заказ «своим людям» и получить потом от них в свой карман часть денег), они заменяют в описании заказа некоторые русские буквы на похожие на них латинские. Таким образом, не предупрежденные заранее организации не смогут найти объявление через поиск и принять участие в конкурсе.
Давай попробуем применить наши знания языка PHP для того, чтобы вывести жуликов на чистую воду.
Задача: дан текст, содержащий слова на русском и английском языках. В некоторых словах часть русских букв заменена на похожие на них латинские, и наоборот. Напиши программу, которая находит все такие слова, выводит их и выделяет квадратными скобками первую замененную букву.
Для проверки работоспособности, попробуй применить программу к тексту из поля «Наименование заказа» на странице (осторожно, спойлер!) http://zakupki.gov.ru/pgz/public/action/orders/info/common_info/show?notificationId=5193640 или http://zakupki.gov.ru/pgz/public/action/orders/info/common_info/show?notificationId=5138013 ололо кто бы поверил!
Дополнительная задача: добавь в программу автоматическое исправление найденных «опечаток».
Подсказки для глупеньких: слова с опечатками найти легко: это слово, которое начинается с одной или нескольких русских букв, за которыми идет латинская. Ну или начинается с латинской, за которой идет русская. Достаточно минимальных знаний регулярных выражений, чтобы написать решение.
P.S. На сайте программистских комиксов xkcd есть комикс про регулярные выражения: перевод, оригинал (англ.).
дальше: Повторим? →——
Куда вводить код? Что надо скачать? Читай первый урок.
Есть вопросы? Задай гуглу или автору.
Нравится урок? Лайкай, репости, приглашай друзей, пости котов и Канако, шли добра, решай задачи, помогай новичкам! Кнопок для лайка нет, кто хочет зарепостить, всегда может сделать это ручками.
Как связаться с автором? Я хочу переодеть его в платье школьницы и жениться на нем. Ящик codedokode (кот) gmail.com ждет ваших писем. А вконтактик и фейсбучек ждут ваших лайков. Но ответ на банальные вопросы лучше искать в Гугле или на stackoverflow.
Я решил задачку!!! Молодец, делай следующий урок
Ideone не работает!11 Ну так открой Гугл и найди сайты вроде https://repl.it/languages/php , http://phptester.net/ , http://sandbox.onlinephpfunctions.com/ , http://codepad.org/ или http://www.runphponline.com/ . Не ленись.
Почему так много рекламы? Всю рекламу на сайте ставит юкоз (бесплатный хостинг же), а не я.
На сайте установлена система Google Analytics (и еще несколько аналогичных систем от юкоза). Данные о твоем IP-адресе, посещаемых страницах, времени посещения отправляются в Google Corporation, США. Хочу знать, кто и зачем сюда заходит. Поверь, другие сайты делают точно так же. Все сайты пишут логи.
Циклы и айфон в кредит — PHP с нуля
Немного скучной теории.
Раз уж мы заговорили про вычисления и действия с переменными, то поговорим и про циклы. Цикл — это специальная конструкция, которая выполняет код внутри нее (в теле цикла) заданное число раз (или пока выполняется какое-то условие).
Вот пример простого цикла:
Он выведет такой результат (запустить и посмотреть):
x = 1 x = 2 x = 3 … x = 9
Видно, что команда echo
была выполнена 9 раз, причем каждый раз
значение переменной $x увеличивалось на 1. Разберем, как этот
код работает. Цикл создается с помощью инструкции for
и имеет
такой вид:
for (действие1; условие; действие2) {
тело цикла;
тело цикла;
тело цикла;
}
Обрати внимание, как расставлены круглые скобки (), две точки с запятой, фигурные скобки {}. Они все обязательны, и точек с запятой внутри круглых скобок всегда должно быть ровно 2, не больше и не меньше. Тело цикла заключено в фигурные скобки и содержит 0 или больше команд, их пишут с отступом из 4 пробелов для лучшей читаемости. Вот как выполняется цикл:
В начале выполняется действие1. Потом проверяется условие, если оно верно, то выполняется тело цикла, затем действие2, и снова проверяется условие. Пока оно истинно, цикл будет продолжаться. Как только условие перестает выполняться, цикл заканчивается и программа продолжает выполняться дальше.
Если условие всегда истинно (например, там написано 1 > 0
), то цикл
будет вечным и программа будет работать, пока ты не завершишь ее принудительно. Если
условие всегда ложно, тело цикла не выполнится ни разу.
Также, цикл можно завершить раньше времени командой break
.
Она выходит из цикла и продолжает выполнение программы. Очевидно, что эту
команду можно ставить только внутри тела цикла.
$i++ — то же самое, что $i+=1, или $i = $i + 1 — все эти действия просто увеличивают хранящееся в $i число на единицу. Мы проходили это в уроке про переменные, помнишь?
Упражнение
Напиши программу, выводящую таблицу умножения чисел от 1 до N на самих себя, используя цикл. Программа должна вывести примерно такой результат:
1×1 = 1 2×2 = 4 ... 9×9 = 81
Ты можешь взять пример кода с картинки ниже за основу.
Условия и действие в шапке цикла не обязаны быть связаны друг с другом и
работать с одной и той же переменной. Например, можно написать
for ($a = 1; $b < 10; $c++) { ... }
. Однако, так лучше не делать,
потому что код становится запутанным. Действие1 и
действие2 можно не писать, но точек с запятой внутри скобок все равно
должно быть ровно две. Можно даже не писать условие, но
тогда цикл получится вечным: for (;;) { тело; }
Задание
Теперь давай применим циклы на пpактике. Решим с их помощью такую задачу:
W5.2 Некто кладет в банк 10000 р. Банк начисляет 10% годовых (то есть, каждый год на счету становится на 10% больше, чем в прошлом году). Напиши программу, считающую, через сколько лет в банке будет миллион? Сколько лет будет этому некто? Доживет ли некто до этого дня, если сегодня ему 16 лет?
Если у тебя что-то не работает в программе, попробуй поставить внутри цикла
команду echo
которая выведет значения всех переменных.
Правильный ответ: чуть больше миллиона накопится примерно за 49 лет, соответственно вкладчику исполнится 65.
Айфон в кредит
Предыдущая задача была слишком простая, правда? Что ж, пора взяться за проблему посложнее. Реши такую задачу:
W5.1. Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?
То есть, каждый месяц банк начисляет процент и комиссию, увеличивая долг, и каждый месяц школьник его потихоньку выплачивает.
- Возьми код примера на http://codepad.org/nm9jPcpd
- Исправь и переделай программу, чтобы она работала нормально. Например, эта версия позволяет школьнику переплатить за кредит и уйти в минус, так, что банк ему становится должен — это плохо! Подсказка: перед тем, как платить, надо проверять, сколько осталось долга, и если он меньше 5000, то платить только остаток и завершать цикл через break
- Подсказка: мало кому удается решить эту задачу с первого раза. Попробуй сделать так: для начала, поменяй сумму кредита на 4000, так как он выплачивается за 2 месяца и его легко посчитать вручную (всего выплачено 6123). Также, добавь в цикл echo, выводящий значения всех переменных и попробуй понять, правильно ли они считаются. Разобравшись с этой суммой, можешь поставить назад число 40000.
- Подсказка: код, который дан как образец, содержит намеренно внесенные ошибки.
Примечание: чтобы завершить цикл, можно использовать команду break — это команда, которая прерывает текущий цикл раньше времени.
Всего будет выплачено около 61270 р. за 13 мес.
Проверь, что программа правильно работает с любой другой суммой. Например, по кредиту на 1000 р. всего придется заплатить 2030 р., а по кредиту на 4000 р. выплатить надо будет около 6123 р. за 2 месяца.
Готово? Переходи к следующему уроку.
дальше: Массивы и рулетка →——
Куда вводить код? Что надо скачать? Читай первый урок.
Есть вопросы? Задай гуглу или автору.
Нравится урок? Лайкай, репости, приглашай друзей, пости котов и Канако, шли добра, решай задачи, помогай новичкам! Кнопок для лайка нет, кто хочет зарепостить, всегда может сделать это ручками.
Как связаться с автором? Я хочу переодеть его в платье школьницы и жениться на нем. Ящик codedokode (кот) gmail.com ждет ваших писем. А вконтактик и фейсбучек ждут ваших лайков. Но ответ на банальные вопросы лучше искать в Гугле или на stackoverflow.
Я решил задачку!!! Молодец, делай следующий урок
Ideone не работает!11 Ну так открой Гугл и найди сайты вроде https://repl.it/languages/php , http://phptester.net/ , http://sandbox.onlinephpfunctions.com/ , http://codepad.org/ или http://www.runphponline.com/ . Не ленись.
Почему так много рекламы? Всю рекламу на сайте ставит юкоз (бесплатный хостинг же), а не я.
На сайте установлена система Google Analytics (и еще несколько аналогичных систем от юкоза). Данные о твоем IP-адресе, посещаемых страницах, времени посещения отправляются в Google Corporation, США. Хочу знать, кто и зачем сюда заходит. Поверь, другие сайты делают точно так же. Все сайты пишут логи.
Хочу научиться программировать на PHP. С чего начать?
Рассказываем, что делать, если вы хотите изучить PHP с нуля: с чего начать, как продолжить и успешно пройти первое собеседование.
Зачем учить PHP?
Среди главных преимуществ языка:
- простота и низкий порог вхождения;
- эффективность для решения задач веб-разработки;
- множество удобных фреймворков;
- востребованность навыков: на рынке есть много вакансий как для Junior PHP-разработчиков, так и для опытных Senior’ов;
- возможность использования в изолированной среде;
- большое количество материалов для изучения языка, активное сообщество.
С другой стороны, язык часто критикуют за несогласованный синтаксис функций, отсутствие обратной совместимости между версиями, многопоточности и поддержки многобайтовых кодировок в ядре.
Что учить?
- основы языка: синтаксис, типы данных, переменные, функции, константы, массивы, объекты, выражения;
- основы HTML, CSS и веб-дизайна;
- реляционные БД;
- Linux, HTTP, Nginx, Apache;
- FTP, Git и другие инструменты;
- шаблоны проектирования;
- Object-relational mapping (ORM);
- Model-View-Controller (MVC);
- фреймворки и микрофреймворки;
- тестирование;
- средства виртуализации: Vagrant, Docker.
Где писать код?
IDE
Попробуйте каждую среду разработки и поймёте, с какой платформой вам комфортнее всего работать:
Редакторы кода для PHP-проектов
Где учить?
Учебники
Изучаем PHP 7. Руководство по созданию интерактивных веб-сайтов
СкачатьЕщё книги по PHP — в нашей подборке.
Онлайн-курсы
Всё выучил, что дальше?
- Проходите тесты на знание PHP.
- Попробуйте найти заказчика на небольшой простой сайт. Если не найдёте — сделайте «для себя». Экспериментируйте с кодом, добавляйте эффекты, спрашивайте советы на профильных форумах. Купите домен и арендуйте хостинг, опубликуйте сайт. Расскажите о нём на тех же форумах и попросите оценить.
- Следите за вакансиями PHP-программистов на Хантиме, hh.ru, у нас на Tproger и других ресурсах. Решайте тестовые задачи, ходите на собеседования.
- Найдите наставника. Идеально, если вы будете учиться под руководством опытного программиста с хорошими коммуникативными навыками. Им может быть ваш первый работодатель, знакомый с форума, преподаватель курса PHP. Взамен предлагайте небольшую скидку на свои услуги. Так вы быстрее освоитесь в профессии и заведёте полезные связи. А ещё со временем такое сотрудничество может вылиться в какой-то большой проект.
- Посещайте конференции, хакатоны, курсы, вебинары, конкурсы. Найти подходящее событие для программистов можно у нас.
А ещё?
Не заставляйте себя всё время сидеть за изучением скучной теории, не пытайтесь писать код, если он «не идёт». Лучше учитесь, развлекаясь. Например, читайте наши материалы:
И играйте в игры для программистов. Для изучения PHP обратите внимание на CodinGame и CodeWars.
PHP для начинающих
Изучение программирования — непростой и длительный процесс. Пожалуй, изучение синтаксиса языка — самая простая и короткая часть в пути, но без неё невозможно начать. Первый модуль посвящен азам построения программ на PHP. Он готовит плацдарм для написания осмысленных программ.
Изначально языки программирования создавались для математических вычислений. С тех пор многое изменилось, и программы создаются в основном для обслуживания бизнесов, помощи в ежедневной жизни и развлечений. Но в основе работы большинства программ по-прежнему лежат вычисления. Наиболее простая и базовая тема в программировании — арифметика.
Текст в программировании называется «строками», и эта тема не так проста, как может показаться. Экранирование, управляющие символы и другие аспекты нередко заводят в ступор начинающих разработчиков.
PHP — язык со слабой типизацией и неизменяемыми примитивными типами данных. О том, что это значит, вы узнаете в текущем модуле.
Информацию можно помещать в специальные «хранилища», а потом использовать сколько угодно раз. Эти хранилища называются переменными, и они помогают упростить код и сократить лишние повторения.
Вызов функций
Функции — кирпичики, из которых программисты строят системы. Перед тем, как создавать собственные функции, мы научимся использовать существующие и комбинировать их.
Определение функций
Функции позволяют расширить язык новыми действиями. Определение собственных функций — ключ к созданию полноценных, осмысленных и полезных программ.
Логические выражения позволяют отвечать на вопросы, которые возникают во время работы программы: Пользователь аутентифицирован? Подписка оплачена? Год високосный?
Условные конструкции
If и Switch – конструкции PHP, с помощью которых программист может выбирать необходимое поведение программы в зависимости от разных условий: пропускать одни инструкции и выполнять другие.
Любой код может повторяться десятки, тысячи, миллионы раз. А в комбинации с другими известными нам инструментами — переменными и условиями — это открывает множество возможностей по построению программ и сложных систем.
Погружаясь в строки
Современное кодирование строк и работа с ними в PHP, используя функции для многобайтовых кодировок. Локализация.
Понятие времени в компьютерах. Аппаратный и Системный таймеры. Функции для работы с датой и временем в PHP. Таймзоны
Что Такое PHP? Руководство для Начинающих
PHP Глоссарий
access_time23 марта, 2020
hourglass_empty4мин. чтения
Хотите начать изучать новый язык программирования (англ)? Или просто интересуетесь, что такое PHP? Независимо от причины, вы попали по адресу. В этой статье мы расскажем всё, что нужно знать о PHP и разработке на этом языке.
Языки Сценариев
PHP (аббревиатура от Hypertext Preprocessor) является одним из языков сценариев, наряду с JavaScript и Python. Разница между этими языками заключается в том, что PHP в основном используется для коммуникации на стороне сервера, в то время как JavaScript может использоваться как для фронтенд, так и бэкенд-разработки. Python используется исключительно для написания бэкенда.
Звучит слишком сложно? Вот почему, прежде чем углубляться в PHP, следует разобраться, что такое языки сценариев.
Язык сценариев — это язык, который автоматизирует выполнение задач в специальной среде. Язык сценариев, как бы указывает статической странице (написанной на HTML и CSS) выполнять определённые действия по заданным вами правилам.
Например, вы можете использовать скрипт валидации формы, чтобы убедиться, что все поля были заполнены перед отправкой формы на сервер. Сценарий запускается и проверяет все поля, как только пользователь нажимает кнопку “Отправить”.
Если какое-то из обязательных полей не было заполнено, пользователь увидит соответствующее предупреждающее сообщение.
Другие распространённые варианты использования языков сценариев включают отображение эффекта выпадающего меню при наведении курсора, создание динамических кнопок и анимации, открытие диалоговых окон и т. д.
Фронтенд и Бэкенд
Языки сценариев могут работать как на стороне клиента (фронтенд), так и на стороне сервера (бэкенд).
Клиентские скрипты обрабатываются браузерами. Когда ваш браузер, или клиент запрашивает страницу, содержащую клиентские скрипты, сервер отвечает отправкой исходных кодов, которые могут быть исполнены в браузере.
С другой стороны, язык серверных сценариев означает, что сценарии выполняются на серверах до их отправки в браузеры. Поэтому вместо отправки исходного кода веб-серверы сначала обрабатывают (анализируют) код, превращая его в простой HTML-формат.
Именно поэтому обычный пользователь не может увидеть код, написанный бэкенд-разработчиком, в то время как клиентские скрипты может посмотреть любой, просто открыв консоль в браузере.
Теперь, когда вы понимаете основной концепт языков сценариев, давайте вернёмся к главному вопросу…
Что Такое PHP?
Как упоминалось ранее, PHP — это язык сценариев, созданный для коммуникации на бэкенде. Следовательно, он может обрабатывать различные функции на стороне сервера, такие как сбор данных формы, управление файлами на сервере, изменение баз данных и многое другое.
PHP был создан Расмусом Лердорфом для отслеживания посетителей на его личной домашней странице. Когда язык стал довольно популярным, Лердорф наконец выпустил его как проект с открытым исходным кодом. Многие разработчики стали использовать, исправлять и улучшать код, что в конечном итоге превратило его в язык сценариев, который мы используем сегодня.
Хотя PHP считается скриптовым языком общего назначения, наиболее широко он используется в веб-разработке (англ). Это обусловлено одной из его выдающихся особенностей — возможностью встраивания в файл HTML.
Допустим, если вы не хотите, чтобы люди видели ваш исходный код, вы можете скрыть его с помощью этого языка сценариев. Просто напишите код в файле PHP, вставьте его в HTML, и люди никогда не узнают оригинальное содержание.
Ещё одно преимущество этой функции заключается в том, что вам не придётся переписывать HTML снова и снова при повторном использовании. Просто напишите код в файле PHP и всякий раз, когда вам нужно использовать HTML, вставляйте этот файл.
Пример PHP-страницы можно увидеть на Facebook. Откройте домашнюю страницу соцсети, и вы увидите, что её URL заканчивается на .php (facebook.com/home.php). Это значит, что страница построена с помощью файла PHP (home.php), который содержит смесь PHP и тегов HTML.
Если вы хотите узнать больше о том, как пишется файл PHP, взгляните на простой пример:
<html> <head> <title>PHP Test</title> </head> <body> <?php echo '<p>Привет из Hostinger</p>'; ?> </body> </html>
Если вы поместите этот PHP-файл в корневой каталог вашего сайта, вы найдёте его, перейдя по адресу vashsite.com/privet.php
Вывод этого PHP-файла в HTML будет выглядеть следующим образом:
<html> <head> <title>PHP Test</title> </head> <body> <p>Привет из Hostinger</p> </body> </html>
Это самый простой пример, так как вам даже не нужно каким-либо образом запускать этот скрипт. Мы просто использовали команду echo, чтобы сказать странице отображать Привет из Hostinger. Этот пример, однако, показывает, как ваш сайт может интерпретировать код PHP в HTML.
Почему PHP?
PHP — не единственный язык сценариев для работы на стороне сервера. Тем не менее, если вы запускаете сайт на WordPress, у PHP здесь нет конкурентов.
WordPress написан на PHP. Поэтому, если вы знаете этот язык, вы можете настроить ваш сайт как угодно. Во-первых, это даёт вам возможность редактировать существующие плагины (англ) и темы (англ), а во-вторых вы можете создать собственный плагин или тему с нуля. Если вы хотите стать WordPress-разработчиком, учите PHP.
Если вы всё ещё сомневаетесь, вот ещё несколько аргументов в пользу этого языка:
- Невысокий порог вхождения. Язык легко учить, так как он имеет отличную документацию с примерами, описывающую функции.
- Широко используется для разработки совершенно разных платформ, например, интернет-магазинов, блогов, социальных сетей и так далее. Согласно статистике 79% всех сайтов (англ) используют PHP!
- Низкая стоимость. PHP — это проект с открытым исходным кодом, поэтому вы можете использовать его бесплатно.
- Большое сообщество. Если у вас возникнут какие-либо проблемы, вам не о чем беспокоиться, потому что в Интернете вы найдёте много профильных блогов, форумов и т.д.
- Интегрируется с базами данных — MySQL, Oracle, Sybase, DB2 и другими.
PHP vs JavaScript
Мы уже упоминали, что PHP имеет широкое применение. Тем не менее, наиболее часто он используется для создания динамического контента.
Если вы знакомы с JavaScript, то знаете, что он также используется, чтобы превратить статическую страницу в динамичную и интерактивную. Следовательно, в этом плане языки имеют схожие функции.
Почему нам нужны оба?
На самом деле, чтобы создать динамический сайт, хватит одного JavaScript. Однако функциональность будет сильно отличаться.
С помощью JavaScript вы можете создать динамический сайт с простыми эффектами, такими как ховер, автозамена, фотогалереи. Но у вас не получится написать сайт, позволяющий пользователям генерировать собственный контент, например, социальную сеть, интернет-магазин (создание заказа, регистрация вход и другие виды взаимодействий с сайтом). Без PHP не обойтись.
Допустим, вы входите в социальную сеть. Чтобы отобразить информацию в профиле, PHP извлекает ваши данные из базы данных и отправляет результат в браузер.
Всякий раз, когда вы вносите изменения в свой профиль, он будет сохранять новую информацию в базе данных. Весь этот процесс позволяет социальной сети показывать разный контент разным пользователям.
Следовательно, JavaScript и PHP не являются конкурентами. Они дополняют друг друга.
Выводы
Итак, что же такое PHP? PHP — это язык сценариев с широким применением, преимущественно используется для написания бэкенда сайтов с динамическим контентом.
Проект стал популярным благодаря открытому исходному коду и универсальной функциональности. Язык имеет невысокий порог вхождения. Его могут использовать как начинающие разработчики, так и профессиональные программисты для более сложных задач.
Изучение и понимание этого языка, несомненно, открывает новые возможности. Вы сможете создавать любые типы сайтов, стать разработчиком WordPress или разработать собственное веб-приложение!
Топ 15 лучших онлайн-курсов PHP для начинающих: обучающие сайты, онлайн-школы и youtube-каналы
Топ 15 лучших онлайн-курсов PHP для начинающих: обучающие сайты, онлайн-школы и youtube-каналы
Инструментарий для создания личных интернет-страниц был разработан датским программистом Расмусом Лердорфом, по его же словам, за одни сутки. За два десятилетия после стартовой презентации появилось семь версий PHP. Быстрая эволюция, простота изучения и поддержка многими хостинг-провайдерами обеспечили разработке лидирующие позиции в сегменте языков, используемых для создания динамических web-сайтов.
Образовательные площадки, которые ориентированы на запросы рынка высоких технологий, продолжают регулярно проводить онлайн курсы по изучению PHP, которые помогут выучить этот язык программирования с нуля.
Онлайн-университет SkillboxЖелающим освоить профессию PHP-разработчика онлайн-университет Skillbox предлагает 12-месячный курс, по окончании которого вуз оказывает помощь в трудоустройстве. Студентов учат создавать структурированный работающий код, знакомят с последней версией скриптового языка, они вникают в работу с базами данных и осваивают фреймворк Laravel. К окончанию учебы портфолио выпускников расширяется проектами, позволяющими претендовать на должность уровня middle-разработчика. Основной формат подачи обучающего контента — видеолекции, вслед за просмотром которых выполняются тематические задания. Помимо годичного онлайн-курса, Skillbox анонсирует 9-месячную программу со схожим учебным планом, однако без гарантий трудоустройства.
Базовый курс PHP с нуля
Аудитория, для которой создана серия видеоуроков, — начинающие программисты, нацеленные на создание своего первого сайта. На восьми лекциях разбираются базовые инструменты языка. Освоив их, пользователи смогут взаимодействовать с посетителями собственноручно созданного веб-ресурса, работать с базой данных, записывать файлы, обрабатывать заполняемые формы, делать авторизацию. Авторы видео — программисты и преподаватели.
Бесплатный онлайн-курс от ИнтуитПодборка видеолекций посвящена изучению основ языка. При этом автор Нина Савельева делает акцент на прикладное использование полученных знаний. Большинство примеров, рассматриваемых на 15 лекциях, — прототипы документов из виртуального музея истории информатики. В плане лектория — разбор основ синтаксиса, изучение управляющих конструкций, ознакомление с технологией «клиент-сервер» и встроенными функциями, рассмотрение практических аспектов — от работы с файловой системой до объектной модели DOM XML.
Бесплатные уроки PHP для начинающихИногда PHP-язык называют несколько медлительным и уязвимым. Однако с этим категорически не согласны разработчики множества популярных интернет-сайтов, среди которых Yahoo, Facebook, BlaBlaCar, WordPress и Wikipedia.
Самоучитель от HTML Academy
Онлайн-учебник содержит шесть глав. В первой рассказывается о нюансах пхп-языка, его синтаксисе, описываются массивы, циклы, функции. Последующие разделы содержат сведения о шаблонизации и подключении файлов, протоколе HTTP, базах данных. Завершающая глава учебника отведена под знакомство с объектами и библиотеками. В тексты включены примеры с кодами, есть ссылка на скачивание последней версии Personal Home Page.
Видео курс от канала «Гоша Дударь»На канал подписано свыше полумиллиона человек — тех, кто планирует стать программистом или уже работает в IT-сфере. Изучать ПХП и MySQL предлагается на 49 уроках, рассчитанных, в основном, на новичков. На стартовых занятиях пишут небезызвестное «Hello World!», рассматривают типы переменных, константы, операции — от арифметических до логических, циклы, функции, массивы. Отдельные ролики посвящены работе с куками и сессиями.
Уроки на LoftBlog
Серия бесплатных видеоуроков ориентирована на новичков. На первых занятиях изучаются особенности среды разработки, переменные, типы данных и их вывод на экран. Далее происходит знакомство с условным оператором if/else и базовым функционалом шаблонизатора SmartyPHP. Завершающие видеолекции отведены под рассмотрение циклов и функций. Помимо информации, демонстрируемой и озвученной в видеороликах, пользователям предоставлен поясняющий текстовый контент с включенными интерактивными окнами для работы с кодами. Портал также предлагает серию уроков о кросс-платформенной интегрированной среде разработки PHPStorm и объектно-ориентированном интерфейсе PDO (Data Object).
Изучение в НетологииВ дистанционном университете Нетология скрипты пхп осваивают в рамках онлайн-курса «Веб-разработчик с нуля». Материал изучается на вечерних онлайн-вебинарах либо при просмотре их записей, по каждой теме предусмотрены домашние задания. В учебном плане — более 450 часов практики, в том числе, по javascript, и регулярное общение с экспертами. Курсанты, освоившие программу, смогут работать с фронтендом и бэкендом веб-ресурсов, что повышает весомость их резюме junior-разработчиков. Выпускникам обещаны HR консультации, а самые успешные получают возможность стажироваться в проектах «Нетология-групп».
Курс от Михаила РусаковаВидеосерия включает 27 занятий, на первых из которых рассказывается об отличиях пхп7 от предшествующих версий, настраивается OpenServer и разбираются его возможности. Далее изучаются переменные, константы, различные типы операций, функции и циклы. Средняя продолжительность лекций — около четверти часа. Создатель плейлиста — Михаил Русаков, которому принадлежит авторство многих бесплатных курсов по программированию.
Академия IT
Свой авторский видеокурс Александр Сокирка разбил на семь тематических блоков. На первой лекции он говорит об общих принципах функционирования интернета, сопровождая рассказ рисованием поясняющих изображений на доске. Но уже со второго урока устройством, на котором отображается тематическая картинка, становится монитор преподавателя. Изучаются синтаксис, переменные, типы данных, конструкции if/else и Switch Case, циклы. Первые четыре занятия можно просматривать в гостевом режиме, для просмотра последующих требуется бесплатная регистрация.
Уроки Андрея Кудлая
Часть лекций от Андрея Кудлая можно пройти бесплатно, единственное условие — подписка на интернет-ресурсе составителя. Уровень сложности занятий обозначен как «средний», основная цель — научить пользователей работе с программным кодом, используемым в разработке веб-приложений. На занятиях, для которых необходимо выделять по 2-3 часа в течение трех дней, поэтапно рассматривается создание полноценной рабочей системы автоматического приема платежей на сайте.
Уроки для самостоятельного обучения
Автор обучающих занятий для начинающих — веб-программист Александр Шиллинг. На 42 уроках он рассказывает о базовых возможностях языка, затрагивая и функционал его последней версии. Лекции относятся к формату «мини», большинство длится по 3-7 минут.
GeekBrains
Погружение в пхп-программирование происходит на факультет веб-разработки. На изучение Personal Home Page отведено две из шести четвертей полуторагодичной программы. В GeekUniversity преподают действующие программисты с более чем 5-летним стажем работы. Они знакомят студентов с образцовыми практиками разработки веб-сервисов, структурой и возможностями фреймворка Laravel. По окончании онлайн-вуза портфолио начинающих специалистов пополняется несколькими реальными проектами. Видеокурсы, входящие в комплексное обучение по университетской программе, можно проходить и разрознено, без поступления на факультет. Так, на лекциях с уровнем 1 (основы разработки) новички за 8 уроков изучат принципы ООП, потренируются в использовании конструкций языка, попробуют оформить скрипт собственного сайта. Обучение на уровне 2 (профессиональная веб-разработка) также включает 8 видеозанятий, однако он ориентирован на тех, кто уже понимает, что такое скриптовый язык, и стремится освоить его на уровне мастера.
Основы от ХекслетСуммарная продолжительность обучения по основам пхп — 19 часов. Треть из дюжины занятий включают теорию с примерами кодов, остальные, помимо теоретических выкладок и поясняющих примеров, сопровождаются тестами и упражнениями. По окончании всех занятий рекомендуется выполнить практические задания, призванные дать дополнительный опыт и закрепить навыки.
Видеоуроки по написанию движкаНа канале — полтора десятка тематических плейлистов. Самая насыщенная подборка включает 48 видеоуроков по написанию с нуля собственного движка. Длительность роликов — от 15 минут до одного часа. Во втором по насыщенности плейлисте опубликованы видеоуроки со схожей тематикой, однако в них речь идет о написании движка 2.0. Кроме того, на канале размещен видеокурс для начинающих, видео о создании анонимайзера, сайта для раздачи бонусов и простого MVC фреймворка.
Обучение в OTUS
Среди десятков авторских предложений площадки значится и комплекс занятий по backend-разработке. Еженедельный график включает два урока общей продолжительностью 4 академических часа, столько же времени отводится на выполнение домашних заданий. Изучаются библиотеки, даются навыки проектирования приложений, ведется работа с базами данных и файлами. Четыре из пяти месяцев студенты занимаются непосредственно обучением, а на последнем они реализуют микросервис, разделившись на команды. Данный итоговый проект — это пример кода, который можно демонстрировать потенциальным работодателям. Те, кто сомневается, актуален ли для них сервис, могут бесплатно пройти вступительное тестирование. Однако на ресурсе оговорено, что для усвоения материалов необходим годичный опыт пхп-разработки или трехгодичный — работы с другим языком ООП.
Синтаксис PHP
На сервере выполняется сценарий PHP, и результат в формате HTML отправляется обратно в браузер.
Базовый синтаксис PHP
Сценарий PHP можно разместить в любом месте документа.
Скрипт PHP начинается с Php
и заканчивается ?>
:
php
// Здесь идет код PHP
?>
Расширение по умолчанию для файлов PHP - «.php
".
Файл PHP обычно содержит теги HTML и некоторый код сценария PHP.
Ниже у нас есть пример простого файла PHP с сценарием PHP, который использует
встроенная функция PHP " echo
" для вывода текста
"Привет мир!" на сайте:
Пример
Моя первая страница PHP
Php
echo "Hello World!";
?>