#Руководства
- 3 ноя 2022
-
5
Народная мудрость гласит: что написано на PHP, то не вырубишь топором. Именно поэтому язык остаётся одним из самых популярных в веб-разработке.
Иллюстрация: Оля Ежак для Skillbox Media
Выпускник факультета автоматизации и информатики МГГУ, исполнительный директор компании QSOFT.
Сегодня мы познакомимся с простым, но имеющим огромные возможности языком программирования — PHP. Узнаем, чем он привлекателен, на какую зарплату могут рассчитывать начинающие PHP-разработчики и как развиваться в веб-разработке. Для начинающих — на примерах покажем, как с нуля создать простой скрипт.
- Что пишут на языке программирования PHP
- Почему PHP востребован и популярен в веб-разработке
- Сколько зарабатывают начинающие и опытные разработчики
- Что нужно знать и как новичку развиваться в профессии
- Какие книги почитать для самостоятельного изучения PHP
- Как написать простой скрипт и сайт
Язык программирования PHP применяют преимущественно в разработке сайтов и веб-приложений, а именно в бэкенде.
Все сайты, которые мы видим в интернете, состоят из двух частей: фронтенда и бэкенда. То, что видит пользователь, — анимация, слайдеры, выпадающие меню и прочее, — это фронтенд. Дизайнеры рисуют макет сайта, а разработчики превращают его в код на HTML, CSS и JavaScript.
На уровне бэкенда создаётся сама платформа, которая связывает сайт с внутренними серверными системами, обрабатывает пользовательские запросы, общается с базой данных и передаёт результаты во фронтенд. Именно для создания бэкенда и используется язык PHP.
Языку PHP уже более 20 лет. Он был разработан датчанином Расмусом Лердорфом в 1994 году как надстройка, которая показывала количество посещений его персональной странички. Тогда он назвал её просто — Personal Home Page.
Язык непрерывно эволюционирует. В 2004 году вышел PHP 5, который добился большой популярности у веб-разработчиков благодаря хорошей реализации ООП. В декабре 2015 года вышла седьмая версия, которая позволила создавать более быстрые программы. PHP 8 появился в ноябре 2020 года, а на 24 ноября 2022 года намечен выход версии 8.2.
По данным W3Techs, доля веб-сайтов с бэкендом на PHP составляет около 80%. В первую очередь это связано с тем, что на нём написаны популярные CMS WordPress и Drupal. Кроме того, на PHP написаны «Фейсбук»*, «ВКонтакте», поисковая система Yahoo, «Википедия», немалая часть сервисов Google и отечественная CMS «1С-Битрикс».
Изображение: Skillbox Media
PHP часто учат с нуля, так как у него очень низкий порог входа. Уже через месяц обучения вы будете писать небольшие сайты. А в дальнейшем, развив свои навыки, сможете работать над высоконагруженными системами для крупных компаний.
Несмотря на то что PHP уже десять лет пророчат скорую смерть, он остаётся самым востребованным языком программирования. Доля вакансий, в которых требуется знание PHP, составляет 24,6%. Примерно столько же занимает Java с 24,1%. А третий по популярности С# значительно отстаёт — 9,8%.
Изображение: Skillbox Media
Рейтинг популярности языков программирования составлен на основе вакансий с русскоязычных карьерных сервисов. Скорее всего, в ближайшие пять лет соотношение не изменится.
Согласно HeadHunter, зарплатный максимум PHP-программиста в России составляет 10 тысяч долларов. Если разделить зарплаты по уровням профессионального развития программиста, то цифры такие:
- Junior Developer — от 40 тысяч рублей в месяц.Только входит в профессию, умеет работать с легаси-кодом и писать простые скрипты, имеет коммерческий опыт программирования порядка 2–3 месяцев.
- Middle Developer — от 100 тысяч рублей в месяц.Может самостоятельно справиться с 90% поставленных задач и имеет опыт программирования от шести месяцев до года.
- Senior Developer — от 150 тысяч рублей в месяц.Может решить любую задачу на PHP, спроектировать решение, архитектуру, подобрать код и обучить junior- или middle-программиста выполнять эти задачи.
В 2022 году зарплаты PHP-разработчиков в России выросли сильнее, чем зарплаты программистов на всех других языках. Джунам чаще стали предлагать от 60 тысяч рублей в месяц, а сеньорам — от 400 тысяч.
Рассмотрим технологии, которые должен освоить начинающий бэкенд-разработчик.
- HTML и CSS — языки разметки страницы. Чаще всех их используют фронтенд-разработчики, но вам нужно знать и понимать основы, так как придётся работать с готовой разметкой.
- JavaScript — код, выполняемый на стороне клиента (браузера). Он задаёт механику работы страницы. Необходимо уметь читать его и понимать, для чего нужен тот или иной его кусок.
- PHP — ядро сайта, скриптовый язык, работающий на уровне сервера и взаимодействующий с серверными структурами, на которых строится веб-проект.
- SQL — язык структурированных запросов, применяемый для управления базами данных, например, в СУБД MySQL.
- Linux — да, именно Linux. Windows не предназначена для использования в качестве операционной системы для сервера, хотя PHP может работать как в Windows, так и в Linux. В рамках обучения не обязательно использовать именно Linux, но важно знать, что в реальных проектах серверы обычно работают под этой операционной системой.
Вот самые популярные и проверенные временем книги, в которых излагаются основы языка, работы с разметкой, принципы взаимодействия бэкенда и фронтенда и наиболее важные концепции веб-программирования:
- «PHP 7. В подлиннике», Дмитрий Котеров, Игорь Симдянов.
- «Изучаем PHP 7. Руководство по созданию интерактивных сайтов», Дэвид Скляр.
- «Создаём динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5», Робин Никсон.
- «PHP. Объекты, шаблоны и методики программирования», Мэтт Зандстра.
- «Разработка веб-приложений с помощью PHP и MySQL», Люк Веллинг, Лора Томсон.
Чтобы освоить профессию, недостаточно знать язык программирования — нужно научиться мыслить как программист и постоянно расширять кругозор. В этом вам помогут 16 лучших книг для программиста.
Напишем небольшой сайт для поиска информации о количестве продуктов на складе. Мы не будем подробно вникать в синтаксис языка и в назначение операторов, наша задача — увидеть, как PHP взаимодействует с HTML. Но сначала установим компилятор и сервер, который будет обрабатывать запросы пользователей.
Ниже приведены инструкции для операционных систем Windows, Linux и macOS.
Скачать PHP на Windows можно с официального сайта, предварительно выбрав подходящую версию языка и операционную систему. Мы установим PHP 8.1 для 64-битной системы, для других версий процедура будет такой же.
Выбираем нужную версию PHP и вариант VS16×64 Thread Safe:
Скриншот: Skillbox Media
Теперь нужно распаковать архив в любое место на жёстком диске и запомнить путь до этой папки. Мы распакуем в папку C:Program Filesphp-8.1.0:
Скриншот: Skillbox Media
Дальше нужно указать системе, что мы установили PHP. Нажимаем правой кнопкой на «Этот компьютер» → «Свойства» → «Дополнительные параметры системы» → «Переменные среды»:
Выберите сверху и снизу Path → нажмите «Изменить». У вас откроется окно, в котором нужно нажать «Создать» в меню справа, а затем задать путь к папке PHP (в нашем случае это C:Program Filesphp-8.1.0). Затем нажмите «ОК»:
Скриншот: Skillbox Media
PHP установлен. Чтобы это проверить, открываем командную строку и пишем там команду php -v:
Скриншот: Skillbox Media
А чтобы запустить PHP-код, нужно создать текстовый файл с расширением .php и написать там какой-нибудь код. Например, такой:
Скриншот: Skillbox Media
Теперь заходим в папку с этим файлом, нажимаем правую кнопку мыши и выбираем пункт «Открыть окно PowerShell здесь».
Скриншот: Skillbox Media
В открывшемся окне пишем команду php test.php — в консоли должна вывестись наша строка:
Скриншот: Skillbox Media
Перед установкой обновите систему, чтобы во время установки не возникло ошибок:
sudo apt update
Затем установите PHP:
sudo apt install php
Но это ещё не всё. Мы установили последнюю версию языка, однако, чтобы воспользоваться её функциями, нужно установить дополнительный репозиторий.
Сначала установим предварительные условия:
sudo apt install software-properties-common -y
А потом и сам репозиторий:
sudo add-apt-repository ppa:ondrej/php
И ещё раз обновим локальные пакеты, чтобы можно было использовать добавленный репозиторий:
sudo apt update
Скачать PHP с официального сайта на макбук не получится. Придётся установить дополнительные программы. Первая из них — Homebrew. Это менеджер пакетов, который позволяет установить любые утилиты для программистов.
Заходим на официальный сайт и копируем команду, которую нам предлагают:
Открываем терминал: меню приложений → папка «Прочие» → «Терминал». Далее вводим команду:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Дальше в терминале вы увидите следующие инструкции по установке. Нужно будет добавить brew в путь системы. Найдите вот эту строчку и скопируйте все команды оттуда:
Затем вставьте их снова в терминал, и установка brew будет окончена.
Наконец, устанавливаем сам PHP с помощью команды brew install php:
Чтобы проверить корректность установки, введите в терминале команду php -v:
В консоли должна вывестись версия языка, который вы только что установили.
Писать код будем в текстовом редакторе Sublime Text 3, его можно скачать бесплатно на официальном сайте. Создадим папку Server в любом месте на жёстком диске и добавим в неё три файла: index.html, handler.php и styles.css.
Код нашей главной страницы index.html будет иметь следующий вид:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example</title>
</head>
<body>
<form action="handler.php" method="get">
<label>
Продукт
<input type="text" name="searchText">
</label>
<input type="submit" name="searchSubmit" value="Поиск">
</form>
</body>
</html>
Это код формы с текстовым полем и кнопкой. Атрибут action тега <form> указывает на имя и путь файла-скрипта, который будет обрабатывать введённые данные, — в нашем случае это файл handler.php. Атрибут method указывает на способ передачи данных — get. Эти методы прописаны в протоколе HTTP, по которому сайты общаются с браузером.
Напишем код для скрипта handler.php.
<?php
echo "<link rel='stylesheet' href='styles.css'>";
$fruits = array('Яблоки' => '30кг', 'Груши' => '50кг', 'Бананы' => '20кг');
$vegetables = array('Картошка' => '100кг', 'Огурцы' => '80кг', 'Помидоры' => '50кг');
$berries = array('Вишня' => '20кг', 'Виноград' => '30кг', 'Малина' => '50кг');
$searchText = mb_strtolower($_GET['searchText']);
if(isset($_GET['searchSubmit'])){
if($searchText == 'фрукты')
$products = $fruits;
elseif ($searchText == 'овощи')
$products = $vegetables;
elseif ($searchText == 'ягоды')
$products = $berries;
echo '<table>
<thead>
<td>Продукт</td>
<td>Количество</td>
</thead>';
foreach ((array)$products as $key => $value) {
echo '<tr>
<td>'. $key .'</td>
<td>'. $value .'</td>
</tr>';
}
echo '<table>';
}
?>
Что тут происходит:
- В строке 1 с помощью оператора echo вставляем тег link в HTML-код страницы.
- В строках 3–5 создаётся три массива, которые содержат информацию о фруктах, овощах и ягодах. Подобного рода данные должны храниться в базе данных и затем из неё вытягиваться, но для примера мы ввели их вручную.
- В строке 7 создаётся переменная $searchText, которая содержит в себе введённое в текстовое поле значение. Это значение берётся из массива $_GET, в квадратных скобках которого указывается имя текстового поля, которое мы задали в файле index.html. Этот массив инициализируется при отправке формы.
- В строках 9–15 проверяется, была ли нажата кнопка отправки формы searchSubmit. Затем проверяется введённое значение и, в зависимости от того, какой вид продукта ввёл пользователь, в переменную $products записывается массив с данными о продуктах.
- В строках 17–28 массив выводится на экран в виде таблицы. Как видите, PHP отличает HTML-теги от обычных строк и выводит в окно браузера с помощью функции echo HTML-таблицу.
- В строке 22 наш массив products перебирается с помощью оператора цикла foreach.
Чтобы придать таблице красивый вид, создадим небольшой файл стилей styles.css. Он подключается в файле handler.php во второй строчке кода.
Код styles.css такой:
table { background: rgb(182, 182, 182); border: 2px solid rgb(0, 0, 0); border-collapse: collapse; } thead { background: rgb(11, 135, 28); color: white; } td { padding-right: 10px; }
Всё готово. Теперь нужно запустить веб-сервер. Для этого в терминале перейдём в папку с нашими файлами. Введите команду cd и укажите полный путь до вашей папки с файлами — например, C:Program FilesServer. У нас на macOS будет такая команда:
Здесь вводим в консоли команду php -S 127.0.0.1:8000:
Сервер запустился. Теперь открываем браузер и переходим на сайт: http://127.0.0.1:8000/. Готово — вы видите ваш сайт.
Введём в поле значение «Фрукты» и нажмём кнопку «Поиск».
Откроется главная страница index.html. Веб-сервер перебросил нас на выполнение скрипта handler.php, который, в свою очередь, отобразил на экране таблицу фруктов. Обратите внимание на адресную строку:
Скриншот: Skillbox Media
После вопросительного знака указывается имя параметра, в данном случае это название поля searchText, и через знак = указывается его введённое значение. Таких пар «имя = значение» может быть несколько, они должны отделяться друг от друга знаком &. Если вам нужно передать большой текст или конфиденциальные данные (например, логин и пароль), то не рекомендуем использовать get-запрос — для таких случаев есть метод post.
При дальнейшем изучении — например, в рамках курса «PHP-разработчик с нуля» от Skillbox — вы обязательно узнаете, как PHP взаимодействует с базой данных, что такое объектная модель, как выполнять асинхронные запросы без перезагрузки страницы и как строить архитектуру высоконагруженных систем.
Ещё раз подчеркнём, что PHP — один из самых востребованных языков программирования на данный момент. И если вдруг вы до сих пор не решили, стоит начинать учить PHP или нет, можете быть уверены — он откроет для вас большие возможности. Сможете ли вы ими воспользоваться — зависит только от вас.
Учись бесплатно:
вебинары по программированию, маркетингу и дизайну.
Участвовать
Научитесь: Профессия PHP-разработчик с нуля до PRO
Узнать больше
Создайте файл с именем hello.php в корневом каталоге веб-сервера
(DOCUMENT_ROOT) и запишите в него следующее:
Пример #1 Первый скрипт на PHP: hello.php
<html>
<head>
<title>Тестируем PHP</title>
</head>
<body>
<?php echo '<p>Привет, мир!</p>'; ?>
</body>
</html>
Откройте данный файл в браузере, набрав имя вашего веб-сервера и
/hello.php
. При локальной разработке эта ссылка
может быть чем-то вроде http://localhost/hello.php
или http://127.0.0.1/hello.php
, но это зависит от
настроек вашего сервера. Если всё настроено правильно, этот файл
будет обработан PHP и браузер выведет следующий текст:
<html> <head> <title>PHP Test</title> </head> <body> <p>Hello World</p> </body> </html>
Эта программа чрезвычайно проста, и для создания настолько простой
странички даже необязательно использовать PHP. Все, что она делает,
это вывод Hello World
, используя инструкцию
PHP echo. Заметьте, что файл не обязан быть
выполняемым или ещё как-то отличаться от других файлов.
Сервер знает, что этот файл должен быть обработан PHP, так как файл обладает
расширением «.php», о котором в настройках сервера сказано, что подобные
файлы должны передаваться PHP. Рассматривайте его как обычный HTML-файл,
которому посчастливилось заполучить набор специальных тегов (доступных также и вам),
способных на кучу интересных вещей.
Если у вас этот пример не отображает ничего или выводит окно загрузки,
или если вы видите весь этот файл в текстовом виде, то, скорее всего,
ваш веб-сервер не имеет поддержки PHP или был сконфигурирован неправильно.
Попросите вашего администратора сервера включить такую поддержку.
Предложите ему инструкцию по установке: раздел Установка
данной документации. Если же вы разрабатываете скрипты на PHP дома (локально),
то также прочтите эту главу, чтобы убедиться, что вы все настроили верно.
Убедитесь также, что вы запрашиваете файл у сервера через протокол http.
Если вы просто откроете файл из вашей файловой системы, он не будет
обработан PHP. Если проблемы всё же остались, не стесняйтесь попросить
помощи одним из » множества доступных способов
получения поддержки по PHP.
Цель примера — показать формат специальных тегов PHP. В этом примере
мы использовали <?php
в качестве открывающего
тега, затем шли команды PHP, завершающиеся закрывающим тегом
?>
. Таким образом можно где угодно «запрыгивать»
и «выпрыгивать» из режима PHP в HTML файле. Подробнее об этом можно прочесть
в разделе руководства
Основной синтаксис.
Замечание:
Замечание о переводах строк
Переводы строк немногое означают в HTML, однако считается хорошей идеей
поддерживать HTML в удобочитаемом виде, перенося его на новую строку.
PHP автоматически удаляет перевод строки, идущий сразу после закрывающего
тега?>
. Это может быть чрезвычайно полезно,
если вы используете множество блоков PHP-кода или подключаете PHP-файлы,
которые не должны ничего выводить. В то же время, это может приводить в
недоумение. Можно поставить пробел после закрывающего тега
?>
и тогда пробел будет выведен вместе с переводом строки,
или же вы можете специально добавить перевод строки в последний вызов
echo/print из блока PHP-кода.
Замечание:
Пара слов о текстовых редакторах
Существует множество текстовых редакторов и интегрированных сред
разработки (IDE), в которых вы можете создавать и редактировать файлы
PHP. Список некоторых редакторов содержится в разделе
» Список редакторов PHP.
Если вы хотите порекомендовать какой-либо редактор, посетите данную
страницу и попросите добавить редактор в список. Использование редактора
с подсветкой синтаксиса может быть очень большим подспорьем в вашей работе.
Замечание:
Пара слов о текстовых процессорах
Текстовые процессоры (StarOffice Writer, Microsoft Word, Abiword и др.) в большинстве
случаев не подходят для редактирования файлов PHP. Если вы всё же хотите использовать
какой-либо из них для тестового скрипта, убедитесь, что сохраняете файл как
простой текст (plain text), иначе PHP будет не в состоянии
прочесть и запустить ваш скрипт.
Теперь, когда вы успешно создали работающий PHP-скрипт, самое время создать самый
знаменитый PHP-скрипт! Вызовите функцию phpinfo() и вы увидите
множество полезной информации о вашей системе и настройке, такой как доступные
предопределённые переменные,
загруженные PHP-модули и параметры настройки.
Уделите некоторое время изучению этой важной информации.
Пример #2 Получение информации о системе из PHP
There are no user contributed notes for this page.
PHP (от англ. препроцессор гипертекста) – язык программирования общего назначения, широко используемый в веб-разработке. Сценарии PHP можно внедрять непосредственно в код HTML. В этой статье мы пройдемся по основам программирования на PHP: синтаксису, объявлению переменных, массивам, условным операторам, циклам и функциям. Также запустим двумя способами веб-сервер на локальной машине и соберем страничку из нескольких файлов PHP и фреймворка Bootstrap. В конце статьи приведем список литературы и бесплатные курсы по PHP для новичков.
Редакторы кода
Для удобного кодинга нам понадобится редактор кода (IDE). Популярные:
- PhpStorm (платный, пробная версия на 30 дней);
- Atom (бесплатно);
- Visual Studio Code (бесплатно);
- Sublime Text (бесплатно).
Как запустить PHP в Atom
Устанавливать PHP на компьютер и запускать веб-сервер мы будем в конце статьи в разделе «Собираем HTML-страницу». А пока для запуска PHP-сценариев достаточно добавить плагин Script в редакторе Atom.
Установка IDE
Как установить Atom в Ubuntu и Windows читайте в нашем самоучителе по Python.
Чтобы запустить PHP-сценарий в Atom перейдем в закладку Packages
→ Script
→ Run Script
, либо нажмем на клавиши Ctrl + Shift + B
(рис. 1).
1. Синтаксис
Код в PHP заключается в открывающий <?php
и закрывающий ?>
теги. Согласно стандарту кодирования PSR-12, закрывающий тег должен быть опущен в файлах, содержащих только код PHP. В конце строки ставят разделитель строк – точку с запятой ;
. Если забыть поставить разделитель, то следующая строка кода соединится с предыдущей и интерпретатор PHP выдаст ошибку.
Выведем на экран строку Hello World
(заключена в кавычки) с помощью команды echo
:
<?php
echo 'Hello, World.'; // Hello, World.
через функцию print
:
<?php
print 'Hello, World.'; // Hello, World.
через функцию printf
(выводит отформатированную строку):
<?php
printf('Hello, World.'); // Hello, World.
или через функцию print_r()
, выводящую информацию в удобочитаемом виде:
<?php
print_r('Hello, World.'); // Hello, World.
Чтобы перенести строку используем символ n
, который работает только в двойных кавычках:
<?php
print_r("Hello, World.nHello, Coder.");
/*
Hello, World.
Hello, Coder.
*/
2. Объявление переменной
PHP – язык со слабой типизацией, то есть перед объявлением переменной не нужно задавать ее тип. Чтобы объявить переменную, перед ее именем ставят знак доллара $
:
$animal = 'Cat';
Здесь:
переменной animal
присвоили значение Сat
.
Выведем на экран переменную animal
:
<?php
$animal = 'Cat';
echo $animal; // Cat
Одно значение можно присвоить нескольким переменным:
<?php
$first_animal = $second_animal = $third_animal = 'Cat';
echo "$first_animal"; // Cat
echo "$second_animal"; // Cat
echo "$third_animal"; // Cat
Комментарии
Однострочный комментарий начинается с двух слешей //
или хеш-символа #
, а многострочный заключается в /* */
:
<?php
// однострочный комментарий
# однострочный комментарий
/*
многострочный
комментарий
*/
3. Типы данных
3.1. Строки
Строка – набор символов, заключенный в одиночные ''
или двойные кавычки ""
:
<?php
$first_animal = 'Cat';
$second_animal = "Dog";
Конкатенация строк
Оператор конкатенации точка .
соединяет левый и правый аргументы:
<?php
$first_animal = 'Cat';
$second_animal = 'Dog';
$animals = $first_animal . $second_animal;
echo "$animals"; // CatDog
Оператор присваивания с конкатенацией .=
присоединяет правый аргумент к левому:
<?php
$first_animal = 'Cat';
$second_animal = 'Dog';
$third_animal = 'Giraffe';
$animals = $first_animal;
$animals .= $second_animal;
$animals .= $third_animal;
echo "$animals"; // CatDogGiraffe
Чтобы перенести слово на новую строку воспользуемся символом переноса n
, который работает только в двойных кавычках:
<?php
$first_animal = "Catn";
$second_animal = "Dogn";
$third_animal = "Giraffe";
$animals = $first_animal;
$animals .= $second_animal;
$animals .= $third_animal;
echo "$animals";
/*
Cat
Dog
Giraffe
*/
3.2. Числа
Целое число (integer) не имеет дробной части:
<?php
$number_one = 5678; // целое положительное число
$number_two = -5678; // целое отрицательное число
Число с плавающей точкой
Число с плавающей точкой имеет дробную часть и задается следующий образом:
<?php
$number_one = 1.5678; // 1.5678 – положительное число с плавающей точкой
$number_two = -1.5678; // -1.5678 – отрицательное число с плавающей точкой
$number_three = 1.5678e0; // 1.5678 – положительное число с плавающей точкой
$number_four = 1.5678e2; // 156.78 – положительное число с плавающей точкой
$number_five = 1.5678E-2; // 0.015678 – положительное число с плавающей точкой
Чтобы узнать тип переменной воспользуемся функцией gettype()
, а для преобразования числа с плавающей точкой в целое число функцией intval()
:
<?php
$number_one = 1.5678; // 1.5678 – положительное число с плавающей точкой
echo gettype($number_one); // double
$number_one = intval($number_one);
echo $number_one; // 1
echo gettype($number_one); // integer
Арифметические операторы
Оператор | Операция |
+ | Сложение |
— | Вычитание |
* | Умножение |
/ | Деление |
% | Деление по модулю |
** | Возведение в степень |
Таблица 1. Арифметические операторы
<?php
echo 2 + 4; // 6
echo 2 / 4; // 0.5
echo 2 * 4; // 8
echo 2 - 4; // -2
echo 2 % 4; // 2
echo 2 ** 4; // 16
Мы можем сложить два числа через запись $number_one = $number_one + $number_two;
или через сокращенную запись $number_one += $number_two;
:
<?php
// полная запись
$number_one = 1;
$number_two = 3;
$number_one = $number_one + $number_two;
echo $number_one; // 4
// сокращенная запись запись
$number_one = 1;
$number_two = 3;
$number_one += $number_two;
echo $number_one; // 4
Операторы сравнения
Чтобы сравнить значения используют операторы сравнения, которые возвращают true
или false
:
<?php
echo 4 > 0; // 1 – true
echo 4 <= 55; // 1 – true
echo 4 != 5; // 1 – true
echo 4 <=> 5; // -1
echo 4 <=> 4; // 0
echo 4 <=> 3; // 1
Если строка не содержит число, то интерпретатор PHP приводит значение строки к 0. Если в строке есть число и оно стоит после буквенных символов, то значение всей строки также приводится к 0. Если число стоит перед буквенными символами, то для сравнении берется только число.
<?php
echo 0 == 'hello'; // true, так как 0 = 0
echo 0 == 'hello3555'; // true, так как 0 = 0
echo 0 == '3555hello'; // false, так как 0 не равно 3555
echo 3555 == '3555hello'; // true, так как 3555 равно 3555
Оператор | Значение |
$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. Операторы сравнения
Порядок операций
Сначала считается выражение в скобках:
<?php
print_r((2 * 4) + 5); // 13
4. Условный оператор if-else
Оператор if
выполняет код, если выполняется условие. В противном случае выполняется код после else, который переводится, как «иначе», «в другом случае».
if (условие) выполнить_код else выполнить_другой_код
Напишем несколько условий с оператором if
и if-else
:
<?php
if (2 < 5) {
echo 'true';
}
// true
if (2 > 5) {
echo 'true';
} else {
echo 'false';
}
// false
для проверки дополнительных условий используется оператор elseif
:
<?php
$number = 15;
if ($number < 3) {
echo 'Число меньше трех.';
} elseif ($number > 4 && $number < 10) {
echo 'Число в промежутке от 4 до 10.';
} else {
echo 'Число больше 10.';
}
// Число больше 10
Здесь:
&&
– логический оператор И
. В нашем условии проверяемое число должно быть больше четырех и меньше десяти.
Оператор | Значение | Результат |
$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
на единицу (декремент). В противном случае увеличим на единицу (инкремент).
<?php
$n = 5;
$n > 10 ? $n-- : $n++;
echo $n; // 6
6. Переключатель switch
Переключатель switch
проводит нестрогое сравнение ==
значений и передает управление соответствующему оператору case
. Если значение не совпадает со значением из case
, тогда выполняется переход к оператору default
.
switch (переменная) {
case 'значение1':
код
break;
case 'значение2':
код
break;
default:
код
break;
}
Напишем конструкцию из переключателя switch
и двух
операторов case
:
<?php
$n = 3;
switch ($n) {
case 1:
echo "Число равно двум.";
break;
case 2:
echo "Число равно пяти.";
break;
default:
echo "Значение по умолчанию.";
break;
}
// Значение по умолчанию.
7. Цикл while
Оператор while
выполняет код до тех пор, пока значение условия не станет ложным.
while (условие) {
// код
}
Выведем на экран пять раз слово Hello
.
<?php
$m = 0;
while ($m < 4) {
$m++;
echo "Hellon";
}
/*
Hello
Hello
Hello
Hello
*/
Расшифровка:
while
– обозначение цикла.
$m = 0
– начальное значение переменной m
.
$m < 5
– условие, которое проверяется перед началом цикла.
$m++
– инкрементирование, то есть увеличение переменной на единицу.
echo "Hellon"
– вывод на экран слово Hello
каждый раз с новой строки n
.
Другой способ записи с помощью декремента в условии:
<?php
$m = 4;
while ($m--) {
echo "Hellon";
}
/*
Hello
Hello
Hello
Hello
*/
Здесь:
$m--
– декрементация, то есть уменьшение значения переменной на единицу. В это примере знак декремента --
стоит после переменной, поэтому мы получим четыре итерации (от 4 до 0).
Если поставить оператор декремента перед переменной --$m
, то мы получим три итерации (от 4 до 1):
<?php
$m = 4;
while (--$m) {
echo "Hellon";
}
/*
Hello
Hello
Hello
*/
8. Цикл do..while
Цикл do..while
выполняется минимум один раз, так как условие выполнения цикла проверяется в конце итерации, а не в начале как в цикле while
.
do {
// код
} while (условие);
Напишем цикл, выводящий на экран четыре раза слово Hello
:
<?php
$a = 0;
do {
echo "Hellon";
$a++;
} while ($a < 4);
/*
Hello
Hello
Hello
Hello
*/
9. Цикл for
Когда нам известно количество итераций, вместо цикла while
лучше использовать цикл for
.
for (инициализация; условие_цикла; счетчик)
тело_цикла
- Инициализирующее выражение выполняется один раз в начале цикла.
- Проверяется условие. Если оно истинно, то выполняется тело цикла. Если ложно, то выполнение цикла прерывается.
- В конце каждой итерации изменяется счетчик (увеличивается или уменьшается).
Цикл выполняется, до тех пор, пока условие истинно, то есть значение i
не станет равным 4:
<?php
for ($i=0; $i <= 4; $i++) {
echo $i;
}
// 01234
10. Цикл foreach
Цикл foreach
последовательно перебирает элементы массива.
foreach (массив as переменная) {
инструкция
}
На каждой итерации переменной присваивается значение текущего элемента последовательности. Переберем все элементы массива и умножим каждый элемент на 3:
<?php
$array = [1, 2, 3, 4];
foreach ($array as $number) {
$number *= 3;
echo $number;
}
// 36912
11. Массивы
Массивы – упорядоченная коллекция элементов с доступом по индексу или ключу. Индексный массив создается двумя способами:
Через функцию array()
:
<?php
$a = array('Cat', 'Dog', 123);
echo $a[1]; // Dog
и через квадратные скобки []:
<?php
$a = ['Cat', 'Dog', 123];
echo $a[1]; // Dog
Здесь:
echo $a[1]
– вывести на экран второй элемент массива.
Нумерация массива начинается с 0
. В нашем случаем элементу массива Cat
соответствует порядковый номер 0
, Dog
– 1
, 123
– 2
. Для обращения к элементу массива используется следующий синтаксис: $имя_массива[индекс_элемента]
.
Рекомендуется объявлять массив через квадратные скобки, так как эта запись компактнее.
Создадим пустой массив:
<?php
$a = [];
Добавим в него несколько элементов и выведем на экран его содержимое:
<?php
$array = [];
$array[] = 'Cat';
$array[] = 'Dog';
$array[] = 123;
print_r($array);
/*
Array
(
[0] => Cat
[1] => Dog
[2] => 123
)
*/
Чтобы добавить новый элемент мы использовали запись $имя_массива[] = новый_элемент
. Первый добавленный элемент получает индекс 0
. Индексы следующих элементов увеличиваются на 1
. Можно задать индекс самостоятельно. Для этого в квадратных скобках укажем нужный нам индекс:
<?php
$array = [];
$array[100] = 'Cat';
$array[0] = 'Dog';
$array[33] = 123;
print_r($array[0]); // Dog
При добавлении непронумерованного элемента 5000
, значение его индекса будет на единицу большего максимального значения индекса в массиве – 101
:
<?php
$array = [];
$array[100] = 'Cat';
$array[0] = 'Dog';
$array[33] = 123;
print_r($array);
/*
Array
(
[100] => Cat
[0] => Dog
[33] => 123
)
*/
$array[] = 5000;
print_r($array);
/*
Array
(
[100] => Cat
[0] => Dog
[33] => 123
[101] => 5000
)
*/
Для удаления элемента из массива воспользуемся функцией unset()
:
<?php
$array = ['Cat', 'Dog', 123];
unset($array[2]);
print_r($array);
/*
Array
(
[0] => Cat
[1] => Dog
)
*/
Здесь:
unset($array[2])
– удаление третьего элемента массива.
В качестве индекса также используют строки:
<?php
$array = [];
$array['animal_one'] = 'Cat';
$array['animal_two'] = 'Dog';
$array['number'] = 123;
print_r($array['animal_two']); // Dog
В таком случае мы получаем что-то напоминающее словари в других языках программирования с ключами и значениями. В PHP такой массив называют ассоциативным.
Ассоциативный массив объявляется через символы =>
:
$имя_словаря = ['ключ1' => 'значение1', 'ключ2' => 'значение2']
Создадим ассоциативный массив:
<?php
$array = ['first_key' => 'Cat', 'second_key' => 5000];
print_r($array);
/*
Array
(
[first_key] => Cat
[second_key] => 5000
)
*/
Здесь:
'first_key'
– ключ.
'Cat'
– значение.
Для поиска ключа по значению используем функцию array_search():
<?php
$array = ['first_key' => 'Cat', 'second_key' => 5000];
print_r(array_search('Cat' ,$array)); // first_key
Здесь:
array_search('Cat' ,$array)
– поиск ключа, соответствующего значению Cat
в массиве array
.
Чтобы подсчитать количество элементов в массиве воспользуемся функцией count()
:
<?php
$array = ['first_key' => 'Cat', 'second_key' => 5000];
print_r(count($array)); // 2
Также можно создать многомерный массив:
<?php
$array = ['animals' => ['Cat', 'Dog'], 'second_array' => [5000, 33, ['third_array' => ['Hello']]]];
print_r($array['animals'][1]); // Dog
print_r($array['second_array'][2]['third_array'][0]); // Hello
'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 имяФункции(аргументФункции1, аргументФункции2, ...) {
код
return результат
}
Здесь:
function
– мы говорим интерпретатору, что отсюда начинается функция.
аргументФункции
– переменные, которые передаются функции для выполнения кода.
имяФункции
– чтобы вызывать функцию, ей нужно присвоить имя.
return
– выдает результат работы функции.
Напишем и вызовем функцию, выводящую на экран фразу Hello, World
.
<?php
function helloMessage(){
return print("Hello, World.");
}
helloMessage(); // Hello, World. – вызов функции
Аргументы функций
До этого мы рассматривали функции без аргументов – переменных, которые функция получает извне. Напишем функцию с аргументами, которая считает сумму трех чисел:
<?php
function summation($a, $b, $c){
return print($a + $b + $c);
}
summation(1, 2, 3); // 6
summation(100, 74, 8); // 182
Здесь:
$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:php7page
. Флаг-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/:
Если мы получили ошибку 404, значит сервер запущен.
XAMPP
Скачаем и установим XAMPP. В папке C:xampphtdocs
создадим папку нашей странички page
. Запустим веб-сервер Apache, кликнув по кнопке Start
. Узнаем версию PHP, введя в консоли (Shell) команду php -v
.
Проверим, запущен ли сервер, перейдя по адресу http://localhost/. Если появилось приветственное сообщение, значит сервер запущен.
14. Собираем страничку
Теперь создадим несколько PHP-файлов, из которых соберем страничку. Перейдем в папку page
и создадим четыре файла: index.php
, header.php
, body.php
, footer.php
.
Структура простого HTML-документа выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
<title>First page</title>
</head>
<body>
<header>
</header>
<footer>
</footer>
</body>
</html>
Воспользуемся фреймворком Bootstrap, чтобы ускорить создание странички. Скачивать ничего не нужно, просто вставим ссылку на Bootstrap в тег <head>
:
<!DOCTYPE html>
<html>
<head>
<title>First page</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
</head>
<body>
<header>
</header>
<footer>
</footer>
</body>
</html>
Откроем файл header.php
и вставим в него следующий код:
<!DOCTYPE html>
<html>
<head>
<title>First page</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
</head>
<body>
<header>
<ul class="nav justify-content-center">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Ссылка</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Ссылка</a>
</li>
</ul>
</header>
в файл body.php
:
<div class="card-group">
<div class="card">
<img src="https://upload.wikimedia.org/wikipedia/commons/2/27/PHP-logo.svg" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Что такое PHP?</h5>
<p class="card-text">PHP — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. </p>
<p class="card-text"><small class="text-muted">Добавлено 5 минут назад</small></p>
</div>
</div>
<div class="card">
<img src="https://upload.wikimedia.org/wikipedia/commons/2/27/PHP-logo.svg" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Что такое PHP?</h5>
<p class="card-text">PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста»; первоначально PHP/FI (Personal Home Page / Form Interpreter), а позже названный Personal Home Page Tools</p>
<p class="card-text"><small class="text-muted">Добавлено 8 минут назад</small></p>
</div>
</div>
<div class="card">
<img src="https://upload.wikimedia.org/wikipedia/commons/2/27/PHP-logo.svg" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Что такое PHP?</h5>
<p class="card-text">В области веб-программирования, в частности серверной части, PHP — один из популярных сценарных языков (наряду с JSP, Perl и языками, используемыми в ASP.NET).</p>
<p class="card-text"><small class="text-muted">Добавлено 10 минут назад</small></p>
</div>
</div>
</div>
в файл footer.php
:
<footer>
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Назад</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Вперед</a></li>
</ul>
</nav>
</footer>
</body>
</html>
в файл index.php
:
<?php
include 'header.php';
include 'body.php' ;
include 'footer.php';
Здесь:
include
– инструкция, которая подключает к PHP-сценарию другие сценарии. Также сценарии подключают с помощью инструкций require
, include_once
и require_once
. Они отличаются по реакции на отсутствие подключаемого файла.
Откроем страницу, перейдя на http://localhost:8000/ или http://localhost/page/. Должно получиться как на рис. 9.
***
Литература
- Робин Никсон. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5;
- Котеров, Симдянов. PHP 7;
- Веллинг, Томсон. Разработка веб-приложений с помощью PHP и MySQL;
Остальные книги указаны в нашей статье ТОП-10 книг по PHP: от новичка до профессионала.
Шпаргалки
- Шпаргалка по PHP
- Основы PHP
YouTube-каналы и курсы
Бесплатные курсы на русском языке:
- Основы php с нуля. Новейший курс 2020 – двадцать четыре урока от основ до регулярных выражений и функций;
- Базовый курс по PHP 7 – узнаете про базовые понятия, GET-параметры, методы, функции и ООП;
- Учим PHP за 1 Час – основы за полтора часа;
- Изучение PHP для начинающих – научитесь работать с массивами, подключать файлы, обрабатывать формы, работать с куки и базой данных MySQL;
- Уроки PHP 7 – много уроков по ООП;
- PHP для начинающих – курс на Stepik для начинающих разработчиков, не требует специальных знаний;
- PHP – первое знакомство – азы программирования на PHP (Stepik).
- подписывайтесь на тег PHP, чтобы получать уведомления о новых статьях;
- телеграм-канал «Библиотека пхпшника»;
- книги по программированию в нашем телеграм-канале «Книги для программистов».
***
Итог
- вы познакомились с синтаксисом PHP и типами данных;
- узнали, как работают условные операторы и циклы;
- запустили веб-сервер в Ubuntu и Windows;
- собрали страничку HTML из файлов PHP.
Программа на языке PHP может либо находиться в текстовом файле с расширением *.php, либо быть интегрированной прямо в текст HTML- страницы (файл с расширением *.html). Редактировать PHP-программу можно в любом текстовом редакторе, например в notepad++.
Ниже приведен текст HTML-страницы с внедренной в нее PHP-программой и результат ее загрузки в веб-браузер (файл ex4_01.html).
<html>
<body>
Пример использования PHP в HTML.<BR>
<?php
echo «Hello, world!»;
?>
</body>
Данную веб-страницу, как говорилось выше, мы предварительно должны положить в папку “Z:homelocalhostwww”, а в браузере написать не просто “ex4_01.html”, а http://localhost/ex4_01.html”. Это все, что нужно запомнить при запуске PHP-программ и HTML-страниц с PHP-кодом с помощью -OpenServer.
Теперь посмотрим, собственно, на текст HTML-страницы. PHP-код в ней помещается внутри специального HTML-тега “<?php ?>”. Между знаками вопроса здесь нужно вставлять текст PHP-программы, которая будет выполнена на сервере. При этом результат выполнения программы (весь текст, что программа выводит с помощью команды echo) сервер помещает прямо в текст веб-страницы в то место, где была эта программа. В данной программе нет ничего, кроме вывода на экран (в тексте HTML-страницы) строки “Hello, world!” командой echo. Текстовые строки на языке PHP нужно брать в кавычки (в одинарные или в двойные — все равно).
На рисунке 4.2 приведен экран браузера при просмотре в нем исходного текста веб-страницы.
Рис. 4.2. Попытка увидеть PHP-код при просмотре исходного текста веб-страницы в браузере
На рисунке мы действительно видим исходный текст страницы,однако вместо текста вставленной в эту страницу PHP-программы мы видим лишь результат ее выполнения — надпись “Hello, world!”.
Этот пример иллюстрирует одно из наиболее важных свойств PHP-программы. Сервер никогда не передает текст PHP-кода браузеру. Сервер исполняет PHP-код, удаляет его из страницы, а на его место вставляет результат всех команд echo кода. Таким образом, можно не опасаться, что текст PHP-программы будет кем-либо похищен — она никогда не покидает сервера. В то же время текст программы на языке JavaScript, на котором пишут клиентские приложения (front-end), доступен для просмотра в браузере и его можно похитить.
На рис. 4.3 приведен текст этой же страницы, но оформленной в виде файла с расширением *.php (файл ex4_01.php).
<?php
echo «Пример использования PHP в HTML.<BR>»;
echo «Hello, world!»;
?>
Рис. 4.3. Эта же страница, только оформленная в виде файла с расширением *.php
Браузеры понимают расширение *.php и интерпретируют такие веб-страницы так же, как и HTML-страницы. Как видим, здесь уже нельзя просто вставлять HTML-текст. Все, что будет содержать веб-страница, нужно выводить на нее командами echo, а текст обязательно брать в кавычки. Так же видно, что в данном случае теги <html>, <body> не обязательны (но, при желании и их можно добавить на страницу с помощью команды echo). На рис. 4.4 показан исходный текст этой веб-странице при попытке его просмотреть в браузере.
Рис. 4.4. Попытка увидеть PHP-код программы с рис. 4.3 при просмотре исходного текста веб-страницы в браузере
Видно, что в браузер передаются только результаты работы команды echo PHP-программы. Оба способа написания PHP-программ (в отдельных PHP-файлах или внутри HTML-страницы) эквивалентны друг другу. Но написание PHP-кода в файле с расширением *.php позволяет нам проверить текст программы на наличие ошибок. Для этого можно использовать файл php.exe, находящийся в папке “Z:usrlocalphp5” Denwer-а. Чтобы проверить на наличие ошибок, например, программу “ex4_01.php”, нужно в командной строке файлового менеджера набрать:
php.exe -l ex4_01.php
Если в программе есть ошибки, то php.exe сообщит нам об этом с указанием номеров строк, в которых содержатся ошибки.
Автоматическое генерирование текста страницы
В вышеприведенном примере программы всего лишь выводит текстовую строку. Но для этого не нужен язык программирования. Приведем более сложный текст программы, в котором она генерирует такой текст страницы, который сложно создать вручную.
Программа выведет на экран все целые числа с 1 до 200, выделив красным цветом простые числа.
На рис. 4.5 приведен текст веб-страницы (файл ex4_02.html) и окно браузера при выводе этой страницы на экран.
<html>
<body>
Простые числа выделены красным цветом.<BR>
<style>
.myred { color:red;display:inline; }
</style>
<?php
function prost($n)
{
for ($i=2;$i<$n;$i++)
if (($n % $i)==0) return 0;
return 1;
}
for ($papa=1;$papa<=200;$papa++)
if (prost($papa)==0)
echo $papa, ‘ ‘;
else
echo ‘<div class=»myred»> ‘, $papa, ‘ </div>’;
?>
</body>
Рис. 4.5. PHP-программа выделяет красным цветом простые числа
Здесь мы уже видим достаточно сложную программу, в которой есть функция, циклы, условные операторы, переменные. Видно, что синтаксис языка PHP очень похож на синтаксис языка C, однако есть и отличия.
Во-первых, все имена переменных в PHP-программах должны начинаться со знака доллара “$”. Во-вторых, типы переменных не обязательно объявлять — PHP сам поймет, что это за переменная по тому значению, которое мы в нее записываем.
Еще одной особенностью языка PHP по сравнению с другими языками является требование, чтобы все условия в условных операторах обязательно брались в скобки. Нельзя написать так:
if $k>5 { $k=$k-3;$x=$x*2; }
Нужно обязательно писать так:
if ($k>5) { $k=$k-3;$x=$x*2; }
Попробуйте разобраться сами, как работает программа на рисунке 4.5. Скажем лишь, что функция “prost” возвращает 0, если число не простое, и 1, если число простое (ни на что не делится, кроме единицы и самого себя). Также отметим, что “%” в выражении “$n % $i” означает “остаток от деления числа $n на число $i”.
Для полноты картины приведем и исходный текст страницы (рисунок 4.6) при попытке просмотра его из окна браузера (так можно увидеть результат выполнения PHP-программы).
Рис. 4.6. Попытка просмотра текста программы с рис. 4.5 в браузере
На рис. 4.7 приведена программа (файл ex4_03.php), которая выводит на экран список поселков городского типа Харьковской области, хранящийся на сервере в файле “kh.txt”.
<html>
<body>
Посёлки городского типа Харьковской области:<HR>
<?php
$f=fopen(‘kh.txt’,’r’);
while (!feof($f))
{
$s=fgets($f);
echo $s,'<br>’;
}
fclose($f);
?>
</body>
Рис. 4.7. PHP-программа, которая читает данные из файла и выводит их на веб-страницу
В этом примере мы знакомимся с некоторыми функциями PHP для работы с файлами (fopen открывает файл, fgets читает из файла одну строку, fclose закрывает файл, feof возвращает значение “истина”, если все строки из файла уже прочитаны).
Здесь специально используются простые конструкции языка PHP, которые есть и в других языках программирования. Более сложные и красивые функции PHP, которые позволяют сделать текст программы еще короче, изучите сами в процессе приобретения опыта в
программировании на PHP.
Еще в этой программе мы видим цикл while (такой же, как и в C/C++), а также восклицательный знак перед условием, который на PHP означает отрицание.
Модифицируем программу так, чтобы она выводила на экран только поселки, начинающиеся с буквы “Б” (файл ex4_04.html, рис. 4.8).
<html><body>
Посёлки городского типа Харьковской области:<HR>
<?php
$f=fopen(‘kh.txt’,’r’);
while (!feof($f))
{
$s=fgets($f); if ($s[0]==’Б’) echo $s,'<br>’;
}
fclose($f);
?>
</body>
Рис. 4.8. Модификация PHP-программы с рисунка 4.7, которая выводит на веб-страницу только поселки, начинающиеся на букву “Б”
Поясним новые особенности языка программирования PHP, которые встретились нам в этом примере.
Переменная $s содержит текстовую строку. Текстовая строка на языке PHP — это массив букв. У массива есть длина (ее значение можно узнать с помощью функции strlen($s)). Индексы любого массива на языке PHP начинаются с нуля. Поэтому, чтобы обратиться к первой букве строки $s, нужно написать $s[0]. Чтобы обратиться ко второй букве строки $s, нужно написать $s[1] и т.д. Чтобы обратиться к последней букве строки $s, нужно написать $s[strlen($s)-1]. Если в программе нужно последовательно перебрать все буквы строки $s и что-то с ними сделать, то можно организовать цикл от 0 до strlen($s)-1, примерно вот так:
for ($n=0;$n<strlen($s);$n++)
И уже в теле цикла можно обращаться к буквам строки $s как $s[$n].
В вышеприведенном примере мы просто проверяем, равна ли первая буква строки $s букве “Б”. Здесь “==” — логический оператор, который возвращает “истина”, если $s[0] равно “Б” (точно так же равенство проверяется и в языке C/С++).
Приведем пример еще одной программы (см.рис. 4.9), которая выводит на веб-страницу название текущего дня недели. Для разнообразия пусть это будет не *.hml, а *.php файл (файл ex4_05.php).
<?php
$myday=array(«воскресенье», «понедельник», «вторник»,«среда», «четверг», «пятница», «суббота»);
$today=getdate(); echo «Сегодня «;
$day=$today[wday]; echo $myday[$day];
?>
Рис. 4.9. Программа выводит на веб-страницу текущий день недели
Рассмотрим текст этой программы. Вначале объявлен массив с именем $myday, содержащий 7 строк:
$myday=array(«воскресенье», «понедельник», «вторник»,«среда», «четверг», «пятница», «суббота»);
Как уже было сказано, нумерация элементов массивов на языке PHP начинается с нуля. Чтобы обратиться к элементу массива, нужно написать его имя, а затем в квадратных скобках — значение индекса (номера элемента). Если написать $s = $myday[0], то в $s будет записано слово “воскресенье”. Если же написать, например, $s=$myday[3], то в $s будет записано слово “среда”. Если в переменной $k находится число 6, и, если написать $s=$myday[$k], то в $s будет записано слово “суббота”.
Далее в тексте программы в переменную, названную нами $today, заносится результат выполнения функции getdate(). Функция getdate() является стандартной функцией PHP (пустые скобки свидетельствуют о том, что у этой функции нет входных параметров), а результатом ее
работы является ассоциативный массив данных о текущей дате.
По мере практической необходимости Вы самостоятельно разберетесь с особенностями работы с простыми, ассоциативными и многомерными массивами на PHP. Здесь же скажем лишь, что ассоциативный массив отличается от обычного тем, что в качестве индексов массива используются не цифры, а ключевые слова, заданные при объявлении массива. Например, ассоциативный массив можно объявить вот так:
$a[«imya»]=»Nikolay»;
$a[«familiya»]=»Ponomarenko»;
$a[«gorod»]=»Kharkov»;
$a[«denxr»]=1970;
В данном случае в массиве $a есть четыре ячейки. В первые три ячейки с именами imya, familiya и gorod мы занесли строки текста, а в четвертую ячейку с именем denxr мы занесли число. На PHP так можно делать.
Есть и чуть более компактный способ объявить этот массив:
$a=array(«imya»=>»Nikolay», «familiya»=>»Ponomarenko»,
«gorod»=>»Kharkov», «denxr»=>1970);
Результат будет таким же. Вообще же PHP, как правило, предоставляет несколько альтернативных возможностей добиться нужного результата. Не обязательно знать все из них.
Теперь, обратиться к полям объявленного массива $a можно, например, вот так:
echo $a[«familiya»], » «, $a[«denxr»];
На веб-страницу будет выведена надпись “Ponomarenko 1970”. А можно и так (без кавычек в именах индекса):
echo $a[familiya], » «, $a[denxr];
Результат будет тем же самым.
Ассоциативные массивы очень удобны в использовании. Однако возникает один вопрос. Как в цикле for перебирать ячейки такого массива? Если речь идет об обычном массиве, у которого ячейки нумеруются с 0 до, например, 1000, то проблем нет. А как перебрать все ячейки ассоциативного массива?
Разработчики языка, конечно же, позаботились об этом. В PHP предусмотрен специальный оператор цикла foreach, который перебирает все элементы ассоциативного массива. Использовать foreach можно примерно так:
foreach ($a as $pole => $v)
echo $pole, «=», $v, «, «;
При этом PHP последовательно переберет все поля массива $a.
Имя поля можно будет брать из $pole, а его значение — из $v. В этом примере на экран будет выведена надпись:
imya=Nikolay, familiya=Ponomarenko, gorod=Kharkov,denxr=1970,
Если требуется изменять в цикле foreach значения ячеек массива, то нужно ставить символ & перед названием соответствующей переменной:
foreach ($a as $pole => &$v) $v=$v.»text»;
Цикл foreach — это, пожалуй, самое большое отличие синтаксиса языка PHP от других си-подобных языков.
Вернемся теперь к программе на рисунке 4.9. Строка “$day=$today[wday];” означает, что в переменную $day мы заносим значение ячейки массива $today с индексом “wday”. Это номер дня недели, число с возможными значениями от 0 до 6 (см. описание функции getdate() в справочнике).
В последней строке программы командой echo выводится на веб-страницу значение ячейки массива $myday (туда мы занесли названия всех дней недели) с номером ячейки, равным $day (там у нас номер дня недели).
В языке PHP есть функция print_r(), которая позволяет вывести на экран заданный массив с названиями и значениями его ячеек. На рис. 4.10 приведена программа (файл ex4_06.php), которая выводит на экран значения массивов $myday и $today из предыдущего примера.
<?php
$myday=array(«воскресенье», «понедельник», «вторник»,«среда», «четверг», «пятница», «суббота»);
$today=getdate();
echo «<pre>»;
print_r($myday);
print_r($today);
echo «</pre>»;
?>
Рис. 4.10. Иллюстрация функции print_r
Здесь <pre> .. </pre> — это тег HTML, который выводит текст моноширинным шрифтом с сохранением всех пробелов и переводов строки.
Как видно, у простого массива $myday, объявленного нами, PHP автоматически пронумеровал индексы от 0 до 6. Видны также все названия индексов (имен ячеек) массива $today, который содержит результат работы функции getdate().
Обращаться из программы к ячейкам ассоциативного массива $today можно как с использованием кавычек: $today[“year”], так и без использования кавычек: $today[year].
Обработка запросов к серверу на PHP
Одно из основных назначений PHP — обработка запросов к серверу, поступающих от веб-страниц или других серверов. На рис. 4.11 приведен текст такой страницы (файл ex4_07.html) с новыми для нас тегами <form>.. </form> и <input>, а на рис. 4.12 — окно браузера при загрузке этой страницы.
<html>
<body>
<form action=»primer.php» method=»POST»>
<p>Ваше имя?</p>
<p><input type=»text» name=»nam» size=»50″></p>
Придумайте пароль:
<input type=»password» name=»oleg» size=»20″>
<br><br>Сформируйте заказ:
<p><input type=»checkbox» name=»cofe»>Кофе
<input type=»checkbox» name=»tea» checked>Чай
<input type=»checkbox» name=»beer» checked>Пиво</p>
<br>Выберите способ оплаты:
<p><input type=»radio» name=»money» value=»var1″
checked>Наличными
<input type=»radio» name=»money» value=»var2″>
Кредитная карта</p>
<p><input type=»submit»></p>
</form>
</body>
Рис. 4.11. Веб-страница с элементами формы
Рис. 4.12. Окно браузера после загрузки веб-страницы с рис. 4.11
Тег <form> .. </form> обрамляет те данные, которые будут отправлены на сервер. В атрибуте action указывается адрес в Интернете той программы, которая будет обрабатывать эти данные. В данном случае это “primer.php” (рассмотрим его текст позже). В атрибуте method указывается метод отправки (это может быть “POST” или “GET”). В данном примере указан метод POST. Методы POST и GET отличаются тем, что для метода POST данные отправляются в теле HTTP-запроса (их не видно пользователю), а в методе GET данные отправляются в строке URL (их видно в адресной строке в браузере). Рассмотрим подробнее POST и GET позже, когда будем рассматривать текст программы primer.php, которая будет на сервере обрабатывать наши данные.
Внутри тега <form> .. </form> мы видим несколько тегов <input> (элемент формы), отличающихся разным значением атрибута type.
Именно значение атрибута type определяет внешний вид элемента формы и его назначение.Значение type=”text” задает текстовую строку ввода. В этом случае атрибут size=”50” означает, что в строке будет максимум 50 букв. Атрибут name понадобится нам при обработке данных на сервере и мы вернемся к нему позже.
Значение type=”password” также задает строку ввода. Однако буквы, которые пользователь будет вводить, будут отображаться на экране звездочками (символами “*”).
Значение type=”checkbox” задает элементы с “галочками”, которые можно устанавливать независимо друг от друга. При этом наличие атрибута checked (без значения) указывает браузеру, что “галочка” должна стоять в элементе уже при загрузке веб-страницы.
Значение type=”radio” задает элемент переключатель (кружочек с точечкой или без). Среди всех элементов типа radio с одинаковыми атрибутами name только один может быть установлен. Чтобы выбрать, какой из них будет установлен по умолчанию, используется атрибут checked (как и для checkbox).
И, наконец, type=”submit” задает кнопку, при нажатии на которую данные формы (значения ее элементов) будут отправлены на сервер.
На рис. 4.13 приведен пример заполненных данных для формы на рис. 4.12.
Рис. 4.13. Заполненные данные формы
Рассмотрим теперь программу primer.php, которая будет обрабатывать данные формы (рис. 4.14, файл primer.php).
<?php
echo «Здравствуйте, «, $_POST[‘nam’], «!<br>»;
echo «Ваш пароль: «, $_POST[‘oleg’], «<br>»;
if ($_POST[‘cofe’]==’on’)
echo «Извините, кофе нет!<br>»;
if ($_POST[‘money’]==»var1″)
echo «Оплата наличными<br>»;
$f=fopen(‘zakazy.txt’,’a’);
$st=print_r($_POST, true);
fwrite($f,$st);
fclose($f);
echo «Заказ принят! Спасибо!»;
?>
Рис. 4.14. PHP-код для обработки запроса и результат работы этого кода Эта программа проверяет данные формы, анализирует их, выводит сообщения на веб-страницу и сохраняет данные формы в текстовом файле.
PHP — очень удобный язык для обработки данных форм. Все, что можно, делается автоматически и все полученные методом POST от веб- страницы данные помещаются в специальный ассоциативный массив с именем $_POST. Названия индексов этого массива соответствуют именам тегов <input> (атрибут name). Чтобы проверить, что передано из веб- страницы в элементе формы с значением тега name=”oleg” нужно просто обратиться к ячейке $_POST[‘oleg’]. Точно так же и со всеми остальными элементами формы.
В приведенном примере на экран командами echo выводятся ФИО и пароль. Затем проверяется, была ли установлена галочка в элементе формы с именем ‘cofe’ и, если да, то выводится надпись “Извините, кофе нет!”.
Далее проверяется, был ли выбран элемент radio со значением “var1” (см. рис. 4.11) и, если был, то выводится надпись “Оплата наличными”.
И в завершение примера все данные, полученные от веб-страницы, сохраняются в текстовом файле zakazy.txt. Параметр ‘a’ в функции fopen(‘zakazy.txt’,’a’) означает, что файл открывается для дозаписи (добавления информации к уже записанной ранее в этот файл).
Можно было бы сохранить каждое данное в файле отдельной командой, но для красоты и краткости текста программы здесь использована функция print_r(). Второй параметр этой функции, равный TRUE, сообщает ей, что нужно не выводить текст на веб-страницу, а передать его на выход функции (в данном случае в пременную $st). На рис. 4.15 приведено
содержимое файла zakazy.txt, соответствующие случаю на рисунке 4.14.
Array
(
[nam] => Николай Пономаренко
[oleg] => hfgRg3k9#gdQ
[cofe] => on
[tea] => on
[money] => var2
)
Рис. 4.15. Содержимое файла zakazy.txt
Хорошо видно, что для текстовых элементов формы и паролей на сервер передаются текстовые строки, для элементов типа “checkbox” —текстовая строка “on” (для случая, если галочка установлена), для элементов типа “radio” — значение того элемента, который был выбран.
В заключение по этому примеру отметим, что, если данные с веб-страницы по какой-то причине не были переданы, то массив $_POSTокажется пустым. Проверить, не пустая ли та или иная ячейка массива $_POST можно с помощью функции isset($s), которая возвращает TRUE, если переменная $s существует. Чтобы проверить, например, было ли передано на сервер данное с именем “oleg”, нужно проверить isset($_POST[‘oleg’]).
Итак, мы рассмотрели пример отправки данных на сервер методом POST и их обработки там. Рассмотрим теперь простой пример отправки данных на сервер методом GET.
Чтобы отправить данные на сервер методом GET, можно точно так же использовать элементы формы, только в теге <form> присвоить атрибуту method значение “GET”.На рис. 4.16 приведен пример простой веб-страницы, использующей метод GET (файл ex4_08.html), и ее внешний вид в окне браузера после ввода данных. Пока все выглядит точно так же, как и в предыдущем примере. Существенное отличие будет лишь в PHP-коде и том, как выглядит в браузере ответ сервера.
<html>
<body>
<form action=»pr.php» method=»GET»>
<p>Ваше имя? <input type=»text» name=»nam» size=»15″>
</p>
<p>Год рождения? <input type=»text» name=»year»
size=»7″> </p>
<p><input type=»submit»></p>
</form>
</body>
Рис. 4.16. Веб-страница с использованием метода GET
На рис. 4.17 приведен текст программы pr.php, которая обрабатывает запрос, и окно браузера с ответом.
<?php
echo $_GET[‘nam’], » г.р.», $_GET[‘year’];
?>
Рис. 4.17. Ответ PHP-программы, обрабатывающей запрос GET
Казалось бы, никакого отличия, кроме того, что данные веб-страницы для метода GET нужно читать из ассоциативного массива $_GET. Однако обратите внимание на адресную строку в браузере. Там значится “localhost/pr.php?nam=Nikolay&year=1970”. Все, что находится после знака “?” и есть данные, переданные от веб-страницы серверу методом GET.Данные для метода GET передаются на сервер прямо в строке URL и разделяются символом “&”. При этом русские буквы могут кодироваться в кодировке UTF8 и быть нечитаемыми, однако PHP делает извлечение этих данных легкой задачей благодаря массиву $_GET.
Недостатком метода GET по сравнению с методом POST является меньший объем данных, которые можно передать на сервер. Однако, иногда метод GET является более удобным, так как позволяет формировать запросы на сервер даже без использования элементов формы. Для этого достаточно в ссылку, на которую нажимает пользователь, вставить URL PHP-программы, после него поставить знак вопроса и указать значения переменных, которые нужно передать этой PHP-программе, оформив их так же, как в строке URL на рис. 4.17.
На рис. 4.18 приведен пример такой веб-страницы, которая отправляет на сервер данные методом GET (файл ex4_09.html) без использования форм. В данном примере используются просто ссылки с интегрированными в них запросами к серверу.
Данные здесь помещены в значения атрибутов href тега <a> .. </a> через символ “?” после пути к файлу PHP-программы. При нажатии на любую из ссылок на сервер методом GET передается одна и та же переменная ponom, но с разными значениями (1 или 2).
<html> <body>
<a href=»prim.php?ponom=1″>Первая ссылка</a><BR>
<a href=»prim.php?ponom=2″>Вторая ссылка</a>
</body>
Рис. 4.18. Веб-страница с GET запросами, оформленными в виде ссылок
На рис. 4.19 приведена программа prim.php, обрабатывающая запросы веб-страницы с рис. 4.18, и результат ее работы.
<?php
$a=$_GET[‘ponom’];
if ($a==»1″)
echo «Нажата первая ссылка»;
else echo «Нажата вторая ссылка»;
?>
Рис. 4.19. Программа, обрабатывающая запросы веб-страницы с рис. 4.18
В данном примере обе ссылки ведут к одному и тому же PHP-коду (иногда еще говорят “PHP-скрипт”). Но результат работы этого PHP-кода будет разным в зависимости от того, какая из двух ссылок нажата.
Такого же эффекта можно добиться и при отправке данных методом POST, но придется задействовать JavaScript и текст веб-страницы будет более сложным.
Кроме массивов $_POST и $_GET, содержащих данные, переданные с веб-страницы, в PHP есть еще ассоциативный массив $_SERVER, содержащий данные о компьютере пользователя (например, IP-адрес).
Изучите содержание этого массива самостоятельно с помощью справочников и функции print_r().В заключении вернемся к примеру на рисунке 4.14 и обратим внимание на следующий момент. А что будет, если два пользователя почти одновременно отправят данные на сервер? Запустятся два экземпляра этого PHP-кода и они могут одновременно пытаться что-то записать в файл ‘zakazy.txt’, что может привести к сбою и потере данных.
Для решения этой проблемы в PHP имеется функция flock(), на логическом уровне запирающая файл. Если кто-то уже запер этот файл, функция flock() ждет, пока файл освободится и только тогда запирает его.
Можно завести вспомогательный служебный файл, (например, назовем его ‘flag.txt’) и использовать как семафор. Перед записью в файл ‘zakazy.txt’ нужно запереть файл ‘flag.txt’ вот так:
$q=fopen(’flag.txt’,’r’);
flock($q, LOCK_EX);
После же того, как запись в файл ‘zakazy.txt’ завершена и он закрыт, нужно отпереть файл ‘flag.txt’ вот так:
flock($q, LOCK_UN);
fclose($q);
Почему нельзя запереть и потом отпереть непосредственно файл ‘zakazy.txt’? Попробуйте сами ответить на данный вопрос, рассуждая логически. Затем проверьте себя, прочитав ответ в следующем абзаце.
Дело в том, что чтобы выполнить функцию flock(), нужно сначала открыть файл. Если две PHP-программы открывают файл для чтения (параметр ‘r’), то ничего страшного не происходит — это допустимо. Затем одна из программ выполняет flock(), а вторая ждет, пока файл освободится. Если же две программы попытаются одновременно открыть файл для записи или дозаписи (а именно для этого открывается файл ‘zakazy.txt’), то может произойти сбой и до вызова функции flock() просто не дойдет дело. Именно поэтому в данном примере в качестве семафора используется еще один файл (‘flag.txt’), который открывается для чтения.
И, видя, что он закрыт, вторая программа знает, что кто-то в это время пишет в файл ‘zakazy.txt’. Когда же файл ‘flag.txt’ откроется, вторая программа закрывает его и начинает запись в файл ‘zakazy.txt’.
На этом данный раздел заканчивается. Формирование запросов из PHP к другим серверам, работу с cookies, с графикой, с регулярными выражениями и некоторые другие тонкости мы рассмотрим в следующей лекции.
23 июня, 2021 12:14 пп
986 views
| Комментариев нет
Development, PHP
«Hello, World!» – это классическая тестовая программа в мире разработки ПО. Ее по традиции пишут, чтобы убедиться, что в установке все работает должным образом. С нее чаще всего начинается изучение нового языка – она отлично иллюстрирует основной синтаксис языков программирования.
Это руководство поможет вам написать программу «Hello, World!» на PHP. Вы узнаете, как правильно открывать и закрывать блоки PHP в своем коде, а также научитесь использовать различные типы комментариев.
Требования
На вашем компьютере вам понадобится установка PHP и локальная среда разработки. Создать все необходимые для работы условия вам поможет наше руководство Настройка локальной среды разработки PHP 7.4.
Написание программы «Hello, World!»
Давайте приступим к написанию программы «Hello, World!». С помощью командной строки откройте текстовый редактор, например nano, и создайте новый файл:
nano hello.php
Как только текстовый файл откроется в окне терминала, введите код нашей программы:
<?php echo "Hello, World!"; ?>
Давайте рассмотрим компоненты этого кода по порядку.
Весь PHP-код помещен в блок, который начинается с <?php и заканчивается ?>.
echo – это языковая конструкция. За ключевым словом echo следует аргумент – список выражений, разделенных запятыми. С помощью echo вы можете сказать PHP, что ему нужно отображать или выводить все, что находится между ключевым словом echo и конечной точкой с запятой.
В нашем случае между ними находится последовательность символов, заключенная в двойные кавычки – “Hello, World!”. Любые символы, заключенные в кавычки, называются строкой.
Читайте также: Как работают строки в PHP
После написания программы нажмите клавишу X, удерживая CTRL, чтобы выйти из nano. Когда будет предложено сохранить файл, нажмите Y.
Как только вы выйдете из nano, вы попадете обратно в свою оболочку.
Наша простая программа «Hello, World!» готова.
Как запустить программу «Hello, World!»
Теперь программа готова к запуску. Чтобы запустить ее, используйте команду php с именем файла программы:
php hello.php
Запустив hello.php, вы получите в терминале следующий результат:
Hello, World!
Давайте рассмотрим более подробно, что именно делала программа.
PHP следующим образом выполнил строку echo “Hello, World!”;
- Он вызывал языковую конструкцию echo.
- Строковое значение Hello, World! было передано этой конструкции. В данном примере строка Hello, World! также является аргументом, поскольку это значение передается другой части кода, например конструкции или функции.
Кавычки по обе стороны от Hello, World! не выводятся на экран: они используются, чтобы сообщить PHP, что этот фрагмент кода содержит строку. Проще говоря, кавычки обозначают начало и конец строки.
Поскольку программа была успешно обработана, вы можете быть уверены, что PHP установлен правильно и что синтаксис программы не содержит ошибок. Прежде чем углубляться в сам код, давайте подробнее рассмотрим блок кода PHP.
Расширение кода PHP
Всё, что в файле .php находится за пределами тегов PHP, рассматривается как HTML или обычный текст. Изначально язык PHP был написан для расширения функциональных возможностей HTML. Имея это в виду, вы можете поместить в файл несколько блоков кода PHP. При этом все, что находится за пределами блоков, будет отображаться как HTML или обычный текст.
Обновите свой файл hello.php:
Hi 8host <?php echo "Hello, World!"; ?> How are you doing? <?php echo "Cloudy!";
Сохраните файл и перезапустите его. Вы получите такой результат:
Hi 8host Hello, World! How are you doing? Cloudy!
Если вы внимательно посмотрите на код, вы заметите, что Hi 8host и How are you doing? находятся за пределами блоков кода PHP и поэтому при запуске программы отображаются как простой текст.
Теперь наш файл содержит два блока кода PHP. Первый блок включает в себя как начальный и конечный теги, а второй блок, находящийся в конце файла, не включает закрывающий тег. С чем это связано?
Закрывающий тег блока (?>) включать не нужно, если блок идет в конце файла. Если файл заканчивается блоком кода PHP, этот блок рекомендуется не закрывать тегом. Дело в том, что любой символ, идущий после закрывающего тега (даже пробел), будет выводиться на экран в виде HTML или обычного текста, а это может вызвать неожиданные последствия для работы приложения. Например, функции типа перенаправления не будут обрабатываться, если что-нибудь было выведено в браузер. Если ваш файл содержит только код PHP, никогда не включайте закрывающий тег PHP.
По мере усложнения кода полезно оставлять заметки для себя и других. Это можно сделать с помощью комментариев.
Добавление комментариев в PHP
Комментарий в коде – это строка, которая не будет выполняться как часть программы. Ее единственная цель – предоставить информацию человеку, который смотрит на код. Иногда код читается гораздо медленнее, чем пишется – многих разработчиков до сих пор шокирует эта разница во времени. Следовательно, очень важно, чтобы код был как можно более легким для чтения. Этого можно добиться несколькими способами:
- Следуйте стандартам написания кода. Стандарт – это набор руководящих принципов и передовых практик для четкой и последовательной организации и форматирования кода. В PHP наиболее часто применяются стандарты PHP-FIG (Framework Interop Group).
- Быстро читаемый код лучше, чем быстро написанный код. Используйте описательные переменные вместо сокращений. Думайте не о том, сколько строк кода вы напишете, а о том, сколько времени потребуется, чтобы посторонний разработчик прочитал эти строки и понял, что делает эта программа.
- Пишите комментарии. Хотя это не обязательно, если вы следовали двум предыдущим пунктам. В целом же ваш код должен быть понятным другим людям, а комментарии объясняют, почему что-то происходит именно так, а не иначе.
В PHP есть два типа комментариев: однострочные и многострочные. Однострочные комментарии могут начинаться в любом месте строки и заканчиваться либо в конце строки, либо в конце блока кода (в зависимости от того, что наступит раньше).
Наиболее распространенный способ начать однострочный комментарий – поставить двойной слеш (//), хотя PHP также распознает диез (#) как начало однострочного комментария. Добавьте в наш файл пару однострочных комментариев, чтобы потренироваться:
Hi 8host <?php echo "Hello"; //, World!"; ?> How are you doing? <?php echo "Cloudy!"; // other options: Flying along
Сохраните и запустите файл. Вы увидите:
Hi 8host Hello How are you doing? Cloudy!
Первый комментарий начинается в середине строки. Заключительная кавычка и точка с запятой идут после «Hello», а остальная часть строки закомментирована. Комментирование одной или нескольких строк кода часто используется при отладке – это позволяет проверить, как программа реагирует на удаление определенных элементов кода.
Второй комментарий предлагает дополнительный вариант ответа. Следующим шагом развития вашего проекта может быть возможность выбирать ответ из списка предложенных вариантов. В таком случае комментарий используется как напоминание о других опциях.
Многострочные комментарии начинаются с символов /* и заканчиваются */. Интерпретатор PHP проигнорирует любой текст или код внутри этих символов. Чтобы потренироваться, давайте превратим последнюю строку в многострочный комментарий:
Hi 8host <?php echo "Hello"; //, World!"; ?> How are you doing? <?php echo "Cloudy!"; /* When responding with one of a number of answers, here are some other options: * Flying along * Fantastic * Going with the wind * I am a breath of fresh air * I have my head in the clouds */
Многострочные комментарии дают возможность поместить больше деталей, чтобы еще немного упростить понимание кода и его предназначения. Наш многострочный комментарий включает разрывы строк и использует символ звездочки (*) в качестве маркера списка. Комбинация */ – это закрывающий тег, он указывает на конец нашего блока комментариев.
Документирование с помощью DocBlocks
Существует особый тип многострочного комментария, который называется DocBlock. Это уникальный способ документирования функциональности конкретного файла, класса, метода или других структурных элементов кода. DocBlock начинается и заканчивается, как и любой другой многострочный комментарий (/ * * /), однако он предназначен для предоставления конкретных деталей о конкретном элементе. Эти сведения не только предоставляют обзор кода для разработчиков, но также могут использоваться редактором кода (или IDE).
DocBlock состоит из нескольких частей. Первая часть – это краткое описание элемента (либо более подробное описание, если требуется больше контекста).
Последний раздел, который и делает DocBlock уникальным, – это теги и аннотации. Этот раздел дает возможность кратко и организованно предоставить метаинформацию о заданном элементе. Теги могут, например, описывать тип информации, которую принимает или возвращает метод или функция. также этот раздел может содержать подробную информацию об авторе или авторских правах. Вот пример такого комментария:
<?php /** * DocBlock example * * @author 8host <8host@8host.com> */ ...
Лучше стремиться писать ясный и простой для понимания код. Но если нужно пояснить какое-то место в коде, обязательно используйте комментарии – они помогут описать дополнительный контекст, улучшить понимание кода и логику, лежащую в основе кода.
Заключение
В этом руководстве вы написали простую программу «Hello, World!» на PHP. Также мы поговорили о блоках кода PHP, тегах и видах комментариев.
Tags: PHP
Этот урок ориентирован на тех, кто совсем немного знаком с PHP и Объектно-Ориентированным Программированием (ООП) и хотят создать простое веб приложение.
Для более удобного восприятия материала урок состоит из 3-х частей.
Обзор серии уроков
Нам необходимо изучить очень много материала. Вот план:
Часть №1 — Создаем проект и создаем первый класс
— создаем набросок проекта
— создаем файлы и папки
— создаем класс для операций с базой данной: DB.class.php
Часть №2 — Доделываем серверную чаcть
— Создаем класс для пользователей (User)
— Создаем класс UserTools
— Регистрация Логин Выход
Часть №3 — Создаем внешний интерфейс
— Формы
— Обработка форм
— Отображение информации сессий
Начинаем наш проект!
Создаем план действий
Всегда важно представлять конечный результат. Прежде чем начать с кодом необходимо задать цели, представить весь проект и решить какой будет структура папок и какие файлы Вам понадобятся. Цель данного проекта очень простая: создать простое приложение на PHP с возможностью регистрации пользователей, входа и выхода, а также с возможностью пользователям менять собственные настройки.
Структура Файлов и Папок
ООП PHP программирование использует классы и объекты для выполнения необходимых для приложения операций. При планировке Вам необходимо подумать о том, какие классы Вам понадобятся. Для данного проекта мы создадим 3 класса. Первый класс — User (будет содержать информацию о пользователе с функцией простого сохранения save()), второй — UserTools (будет содержать функции, которые необходимы пользователям, такие как login(), logout() и другие…), третий — класс БД (он будет выполнять роль связующего звена — подсоединение к БД, внесение изменений, вставка новых рядов, и многое другое).
Кроме классов, мы также будем использовать файл с названием global.inc.php. Этот файл будет вызываться с каждой страницы и выполнять обычные операции, которые нам понадобятся. К примеру, в этом файле мы будем выполнять подключение к БД на каждой странице.
Другие файлы — это страницы для пользователей: index.php, register.php, login.php, logout.php, settings.php и welcome.php.
Общая структура у нас будет выглядеть так:
Создание Базы Данных и таблицы users
На Вашем сервере должен быть установлен MySQL. Для начала необходимо создать новую базу данных для Вашего приложения. В этой БД создайте таблицу users, которую мы будем использовать для этого урока. Можете использовать следующий код SQL:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`join_date` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Первичным ключом у нас выступает поле “id”, и именно его мы будем использовать для идентификации наших пользователей.
Уникальным полем у нас также будет “username”. Другие необходимые поля “password”, “email”, и “join_date”.
Создаем класс DB.class.php
Цель данного класса очень проста: как можно больше уменьшить использование SQL при обращении к БД, а также организовать данные в удобный для нас формат.
Ниже приведен код:
<?php
//DB.class.php
class DB {
protected $db_name = 'yourdatabasename';
protected $db_user = 'databaseusername';
protected $db_pass = 'databasepassword';
protected $db_host = 'localhost';
// Открывает соединение к БД. Убедитесь, что
// эта функция вызывается на каждой странице
public function connect() {
$connection = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
mysql_select_db($this->db_name);
return true;
}
// Берет ряд mysql и возвращает ассоциативный массив, в котором
// названия колонок являются ключами массива. Если singleRow - true,
// тогда выводится только один ряд
public function processRowSet($rowSet, $singleRow=false)
{
$resultArray = array();
while($row = mysql_fetch_assoc($rowSet))
{
array_push($resultArray, $row);
}
if($singleRow === true)
return $resultArray[0];
return $resultArray;
}
//Выбирает ряды из БД
//Выводит полный ряд или ряды из $table используя $where
public function select($table, $where) {
$sql = "SELECT * FROM $table WHERE $where";
$result = mysql_query($sql);
if(mysql_num_rows($result) == 1)
return $this->processRowSet($result, true);
return $this->processRowSet($result);
}
//Вносит изменения в БД
public function update($data, $table, $where) {
foreach ($data as $column => $value) {
$sql = "UPDATE $table SET $column = $value WHERE $where";
mysql_query($sql) or die(mysql_error());
}
return true;
}
//Вставляет новый ряд в таблицу
public function insert($data, $table) {
$columns = "";
$values = "";
foreach ($data as $column => $value) {
$columns .= ($columns == "") ? "" : ", ";
$columns .= $column;
$values .= ($values == "") ? "" : ", ";
$values .= $value;
}
$sql = "insert into $table ($columns) values ($values)";
mysql_query($sql) or die(mysql_error());
//Выводит ID пользователя в БД.
return mysql_insert_id();
}
}
?>
Объяснение кода
После создания класса Вы видите 4 переменные: $db_name, $db_user, $db_pass, и $db_host. В них необходимо внести данные для подключения к БД. $db_host обычно localhost. Перед этими переменными указано «protected» — это означает, что они будут не доступны вне этого класса. Внутри же класса их можно выводить используя $this->db_name, $this->db_user, и т.д.
Первая функция называется connect(). Эта функция содержит защищенные значения для соединения с БД. Это соединение будет открыто для использования в любом месте текущей страницы (не только внутри класса).
Вот пример использования этой функции вне класса:
$db = new DB();
$db->connect();
Вторая функция называется processRowSet(). Цель данной функции — взять объект результата mysql и конвертировать его в ассоциативный массив, в котором ключами являются название колонок. Функция проходит по каждому ряду и функция mysql_fetch_assoc() преобразовывает каждый ряд в массив. Ряд далее передается массиву и возвращается с помощью функции.
Существует второй аргумент $singleRow, который содержит значение по умолчанию. Если значение true, выводится только один ряд вместо массива. Это очень полезно, если Вы ожидаете получить один результат (например, при выборе юзера из БД используя уникальный id).
Последние 3 функции выполняют простые функции MySQL: select, insert, update. Цель данных функций минимизировать количество SQL кода, который необходимо использовать где-либо в другом месте приложения. Каждая функция создает SQL запрос на основе переданного значения и выполняет этот запрос. В случае select(), результаты форматируются и выводятся. В случае update(), выводится true при успешном выполнении. В случае insert(), выводится id нового ряда.
Вот пример как Вы можете изменить данные пользователя в БД используя функцию update():
$db = new DB();
$data = array(
"username" => "'johndoe'",
"email" => "'johndoe@email.com'"
);
//Найти юзера с id = 3 в БД и внести изменения в ряд
//username - johndoe и e-mail - johndoe@email.com
$db->update($data, 'users', 'id = 3');
Вот и все на сегодня! До следующих частей!
Вторая часть урока тут, третья — тут
Время на прочтение
5 мин
Количество просмотров 65K
Основная задача программирования — заставить компьютер выполнять определенные и нужные программисту действия. Поэтому, наша первая программа будет выглядеть так:
<?php
$me = ‘Programmer’;
makeHappy($me);
Рассмотрим подробнее что же написано в этой программе. Опытные программисты советуют читать код подобно книге, пытаясь понять смысл написанного исходя из смысла попадающихся слов и символов. Ну и использовать логику, конечно.
Для тех кто и так знает, что делает этот код — в статье для вас есть блудницы и дух черно-белого верблюда.
Мы последуем этому совету и разберем код, пытаясь понять его смысл.
Первая строчка — <?php
— говорит нам о том, что дальше будет код на языке PHP. Все наши программы, написанные на php мы будем в обязательном порядке начинать с этой строчки. Иначе PHP просто пройдет мимо, даже не подозревая, какую важную задачу мы пытаемся на него возложить.
Поехали дальше.
Вторая строка:
$me = ‘Programmer’;
Первое слово, которое мы встречаем в этой строке — слово «me», на основании чего делаем вывод, что разговор тут идет о создателе данной программы. Доллар перед словом означает, что данная последовательность символов обретает свой смысл в виде переменной.
Что же такое переменная? Переменная — это место, где хранятся наши данные, а для удобства обращения, мы даем имя этой части памяти.
Если у нас есть выделенная память, то глупо ее оставлять пустой, верно? Поэтому следующим символом «=» мы говорим компьютеру, что в это место, которое мы только что создали нужно записать данные, фактически присваивая переменной какое-то значение. Поэтому данный символ называется не «равно», как мы привыкли в математике, а «оператор присваивания».
Прежде чем продолжить, хотелось сказать пару слов про лексику, которой пользуются программисты. Людям не посвященным, мир программистов кажется странным. Ведь нам ничего не стоит сделать фабрику мостов, а стринги разложить на чары. Но, как и все в программировании, лексика подчиняется логике, и имеет вполне определенную смысловую нагрузку. А еще чтение вслух программ на PHP способно призывать дух Черно-белого верблюда, который будет говорить что-то про «шаблонизатор».
Как вы догадались, речь пойдет о довольно знакомом для слуха слове «оператор». Чаще всего слово «оператор» применяется рядом с названиями техники, требующей определенных знаний и умений для работы с ней. Фактически, оператор — это кто-то, кто выполняет определенные действия, следуя задачам, поставленными начальством. Но в программе нет живых людей, способных выполнить за нас работу, а программист — единственный и бессменный тут начальник. Поэтому, когда мы говорим об «операторах» в программе, мы имеем в виду что-то, что делает для нас определенные действия. Это простейшие приказы или указания, которые компьютер выполнит в точности, как это описано в документации. Ну или не выполнит, если обиделся, устал и хочет мороженку.
Поэтому, для программистов «+» — это не «плюс», а «оператор сложения», «-» — «оператор вычитания», «*» — «оператор умножения», а «» — оператор деления. Конечно, этот список операторов далеко не полный, но смысл остается тот же — «оператор» — это что-то, что совершает определенные действия (у программистов называется «совершает операцию») над исходными данными, которые называются операндами.
Говоря языком программирования —
$a+$b
Означает оператор сложения, выполняющий операцию сложения над операндом-переменной $a и операндом-переменной $b. Ну или «а плюс б», если вы не на экзамене по программированию.
Если оператор работает не с двумя, а с одним операндом, он называется «унарным» от испанского слова «уно» — один. Старый знакомый из математики минус — пример такого оператора, совершающего операцию отрицания своего операнда. Если $a — положительное, то -$a — отрицательное, по модулю равное $a.
Подобно математическим уравнениям, мы можем комбинировать операторы вместе.
Например,
<?php
$a=1;
$b=2;
$c=-($a*2 + $b);
Чему в итоге равно $c?
Строчкой «$c=-(2*$a + $b)» мы говорим компьютеру присвоить переменной $c «отрицание суммы 2 умножить на $a и $b». Так как две строчки выше присваивают переменной $a значение 1, а переменной $b 2, то вычисление результата сводится к решению простого примера -(2*1+2), результатом которого является «-4»
Ответ: -4.
Но в нашей программе переменной присваивается не число, а последовательность букв в кавычках. Это превращает переменную в «переменную строкового типа», или просто «строку». А последовательность букв в кавычках означает ровно то что вы видите — последовательность букв. Кавычки используются для обозначения границы этой последовательности. Иногда содержимое строки не носит абсолютно никакого смысла, но у хорошего программиста нет бессмысленных мест в программе, поэтому в строке
$me=’Programmer’, мы говорим о себе, присваивая себе строку «Programmer», и с данного момента считаем себя программистом (конкретно в этой программе).
Силой кода вы объявили себя программистом, и все что осталось — это закончить мысль. Для этого служит символ «;». Этот символ завершает оператор, сообщая, что больше действий в этом операторе производиться не будет.
Например, мы хорошо знаем что будет в переменной $c после выполнения кода
<?php
$a=1;
$b=2;
$c=-($a*2 + $b);
но что будет, если мы уберем скобки и поставим точку с запятой в другое место? Скажем, так:
<?php
$a=1;
$b=2;
$c=-$a*2; + $b;
Теперь оператор присваивания для $c заканчивается не после прибавления $b, а перед ним, и следовательно, суммирование с $b не происходит, т.к. оператор заканчивается на -$a*2. Теперь значение $c — это отрицание результата умножения $a на 2.
Ответ: -2;
Закончив с присвоением себе титула программиста, мы переходим к следующей строке.
makeHappy($me);
Мы уже знаем про операторы, и их способность беспрекословно выполнять наши приказы. Но что делать, когда хочется совершить действие, выходящее за рамки возможностей оператора? Тут на помощь нам приходит функция. Если переменная дает название области памяти, то функция — это название для последовательности действий. Когда нам нужно совершить эти действия над данными, мы должны вызвать функцию.
Для вызова функции нужно, одевшись в черный плащ с капюшоном, в полнолуние читать вслух учебник по латыни, стоя лицом на запад внутри круга, нарисованного кровью старых блудниц.
Ну или просто написать имя функции, в скобках через запятую перечислив данные, с которыми эта функция будет работать.
И если эффективность первого метода сомнительна, второй способ работает всегда. И обратно — если мы видим имя, после которого в скобках идет перечисление переменных, других данных или просто ничего, то скорее всего перед нами — вызов функции.
Будучи переданными в функцию данные становятся «аргументами» функции. В качестве аргументов мы так же можем использовать операторы.
Например, func($a) вызывает функцию для аргумента-переменной $a, в то время как func($a+$b) вызывает функцию, получая в качестве аргумента результат сложения $a и $b.
Как догадаться что делает функция? Нужно взглянуть на ее имя. Хорошие программисты всегда используют в именах функции глаголы, означающие действия, совершаемые над аргументами. Стоящие рядом существительные говорят о том, что выбрано для воздействия, а прилагательные — раскрывают дополнительные особенности существительных.
Сложновато, правда? Поэтому просто читайте что написано. Если написано «printReport
«, то скорее всего функция печатает отчет, а если написано «eatCat
«, то функция отправит вашего кота есть. Или съест вашего кота.
Возвращаясь к нашему коду —
makeHappy($me)
Судя по названию, делает счастливым, а судя по списку операндов, делает счастливым программиста, создавшего ее. Данная программа является универсальным личным генератором счастья. На этом я заканчиваю рассказ о программировании — ведь теперь у вас есть универсальный способ доставить счастье кому угодно. Заказчику, начальнику и самому себе конечно. Все. Занавес, выключаем рубильник и расходимся.
Что, что простите? Функция не определена. Ой, извините, забыл маленькую деталь.
Прежде чем компьютер принесет вам счастье, вы должны научить его это делать. Как? С помощью магии, конечно! Магии программирования — так что одеваем черные плащи, берем в руки клавиатуру, учебник латыни и вперед — к созданию личных генераторов счастья. И хватит уже на сегодня — полнолуние, и у меня запланирован интересный вечер в компании старых блудниц.