автордың кітабын онлайн тегін оқу PHP для начинающих
А. Жадаев
PHP для начинающих
Технический редактор Н. Гринчик
Литературный редактор Н. Гринчик
Художники Л. Адуевская, Н. Гринчик
Корректоры Е. Павлович, Е. Павлович
Верстка О. Богданович, К. Подольцева-Шабович
А. Жадаев
PHP для начинающих. — СПб.: Питер, 2014.
ISBN 978-5-496-00844-0
© ООО Издательство "Питер", 2014
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
От издательства
Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты vinitski@minsk.piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.
Глава 1. Что такое язык PHP
Аббревиатурой PHP называют один из наиболее популярных языков, используемых для создания веб-приложений. Первоначально PHP означало Personal Home Page — персональная домашняя страница, но потом, с расширением области применения языка, аббревиатура PHP стала расшифровываться как PHP: Hypertext Preprocessor — PHP: гипертекстовый препроцессор. Текущая версия языка PHP предназначена для создания веб-приложений самого широкого назначения, например, на его основе создана небезызвестная социальная сеть Facebook. В настоящее время PHP поддерживается подавляющим большинством хостинг-провайдеров, его используют сотни тысяч программистов.
Язык PHP разрабатывается группой энтузиастов в рамках проекта с открытым кодом. Проект распространяется под собственной лицензией, несовместимой с GNU GPL. Официальный сайт языка находится по адресу www.php.net. На момент написания книги последним стабильным релизом языка являлся PHP 5.4.12 и 5.3.22. Несколько лет назад были предприняты попытки создания версии PHP 6, но сейчас этот проект по некоторым соображениям признан неперспективным. Поэтому при знакомстве с PHP мы будем основываться на версиях 5.3, 5.4, имея в виду, что при практическом применении своих программ, то есть размещении их в Сети, вы всегда будете ограничены возможностями, предлагаемыми хостинг-провайдерами. Опыт же показывает, что провайдерам свойственен вполне понятный консерватизм, и ныне наиболее распространена поддержка версий 5.2–5.4, причем не самых последних релизов. Так что новые и новейшие возможности языка PHP следует использовать осторожно.
1.1. Работа сценария PHP
Как работает приложение, созданное на основе языка PHP? Принцип очень похож на тот, что используют обычные, статические веб-страницы, созданные на основе языка HTML. В последнем случае на веб-сервере создается сайт, состоящий из нескольких страниц с кодом HTML. Посетитель, зашедший на сайт, загружает их в браузере, щелкая на гиперссылках, представленных на этих страницах.
Щелчок на ссылке инициирует цепочку операций взаимодействия между компьютером пользователя и веб-сервером. Когда вы щелкаете на ссылке какой-то веб-страницы, ваш браузер отсылает запрос на веб-сервер, который считывает HTML-код запрашиваемой страницы, формирует ответ и отправляет его обратно браузеру. В результате содержимое страницы, отображаемой в ответ на запрос пользователя, будет всегда одним и тем же, то есть эта веб-страница статична. Вы не можете никаким образом изменить ее, уточнить отображаемый контент, передав в запросе серверу определенные данные.
Например, если вы посетите сайт со статическими веб-страницами, предлагающими данные о прогнозах погоды по всей стране, то не сможете указать веб-серверу, что вас интересует погода в определенном месте, скажем в Москве, введя название города в специальное поле ввода и щелкнув на ссылке для отображения данных. Чтобы реализовать такую функцию на статическом сайте, вам пришлось бы создать огромный список городов и для каждого из них оформить ссылку на статическую страницу с нужной информацией. Это крайне неудобно и совершенно нереализуемо, когда список выбора достаточно велик или запрашиваемая информация непрерывно изменяется, как на сайтах погоды.
Все это легко решается средствами языка PHP, позволяющего создавать динамические сайты! С помощью PHP при создании веб-страниц вы сможете включать в них специальный сценарий и передавать сценарию данные, которые он должен использовать при обработке запроса вашего браузера. Например, для предыдущего примера сайта погоды вы сможете на одной из его веб-страниц с помощью HTML-формы выбрать нужный город и нажать кнопку подтверждения выбора. Браузер автоматически запросит сервер, указав ему адрес той веб-страницы, которая должна отобразиться в ответ на ваш запрос, и передаст ей всю информацию, введенную вами в форму, в данном случае название выбранного города. Далее сценарий, размещенный внутри запрашиваемой страницы, получит эти данные, обработает их и передаст вам в ответ именно то, что требуется, — прогноз по Москве.
Такие веб-страницы, «начиненные» кодом сценария PHP (или другого аналогичного языка), называются динамическими, поскольку могут реагировать на действия посетителя сайта, передавая ему в ответ на сделанный выбор именно ту информацию, которая нужна. В отличие от статического сайта на динамическом она может меняться с течением времени. Это важно, поскольку, например, погода — вещь переменчивая, а сайт с прогнозом погоды должен показывать самую свежую информацию. Для этого сценарий PHP постоянно обновляет свои данные, обращаясь к нужным источникам: базам данных, показаниям приборов и т. д. Все эти функции легко реализуются средствами PHP, достаточно обширными и развитыми для решения огромного круга задач.
Для исполнения функций, реализуемых сценариями PHP, на веб-сервере должны содержаться специальные средства обработки кода сценария. Их и используют средства PHP, которые играют роль препроцессора, то есть предварительного обработчика запроса. Именно они исполняют код сценария внутри запрошенной страницы, передают ему данные из запроса и отправляют ответ браузеру, пользуясь возможностями веб-сервера. Таким образом, средства языка PHP представляют собой дополнение веб-сервера, которое делает возможным интерактивное взаимодействие посетителя сайта с его содержимым.
Итак, чтобы ваш PHP-сценарий смог работать, ему нужны следующие компоненты: браузер, веб-сервер и средства самого препроцессора PHP, входящие в состав веб-сервера. Эти средства предназначены для обработки кода сценария внутри страниц динамического сайта, отображаемых по запросам посетителей в ответ на их действия на сайте.
Кроме того, для создания полнофункциональных PHP-сценариев требуется обеспечить сохранение данных на веб-сервере. Это можно реализовать сохранением информации в файле, и для простых сценариев такой метод вполне приемлем. Но для сложных, профессиональных сценариев применяются более развитые средства — базы данных, обеспечивающие хранение и извлечение данных любого типа по специальным запросам. Эти запросы формируются на специальном языке, называемом SQL (Structured Query Language — язык структурированных запросов). SQL — это международный стандартный язык для работы с базами данных, и мы познакомимся с ним далее в этой книге.
Для исполнения запросов на веб-сервере с поддержкой PHP должен быть установлен еще один сервер, который будет воспринимать запросы к базе данных, поступающие из сценария, и исполнять их. Таких серверов множество, но в среде разработчиков PHP наиболее популярен MySQL, поддерживаемый и бесплатно распространяемый на сайте mysql.com. Его мы и выберем для изучения.
Подведем итог: для практической работы по созданию и исполнению сценариев PHP нам нужен браузер и веб-сервер, средства самого языка PHP и сервер MySQL. Любой провайдер, обеспечивающий работу с PHP, предоставляет эти инструменты для развертывания сайта на хостинге. Однако для создания своих профессиональных сценариев лучше будет установить инструменты работы с PHP на рабочем компьютере, локально, что даст вам более гибкий и удобный доступ к PHP-сценарию и средствам его отладки. Поэтому для изучения материала этой книги вам нужно обзавестись всеми этими компонентами, установив их на свой компьютер. Это можно сделать следующим образом.
• Вы можете загрузить на свой компьютер установочный пакет PHP с сайта www.php.net и установить его самостоятельно, пользуясь инструкцией на сайте.
• Можете установить на свой компьютер сервер MySQL, загрузив с сайта mysql.com соответствующий дистрибутив.
• Если на вашем компьютере отсутствует веб-сервер (IIS, Apache и др.), поддерживающий PHP, вы должны запустить его. Для системы Windows вам нужно только ввести в действие сервер IIS, воспользовавшись инструментом добавления компонентов Windows на Панели управления. Другой вариант — загрузка установочного пакета сервера Apache с сайта производителя www.apache.org с последующей установкой и настройкой.
• Воспользоваться специальными средствами для создания среды разработки PHP-приложений — так называемыми интегрированными пакетами работы с PHP. В их состав входит все, что нужно для разработки сценариев PHP: веб-сервер, SQL-сервер, средства PHP, дополнительные полезные инструменты, причем в интегрированном виде. Вам не придется самостоятельно устанавливать веб- и SQL-сервер и подключать к нему PHP (тем более что это требует достаточно глубоких познаний в этой сфере) — за вас все сделает инсталлятор пакета.
• Прибегнуть к интегрированным средам разработки (IDE), включающим, помимо компонентов среды для работы с PHP, средства отладки сценариев PHP. Это очень полезные возможности, которые значительно облегчают разработку сценариев, позволяя их пошагово исполнять и контролировать результаты работы кода.
Рекомендую использовать две последние возможности как самые доступные для начинающего программиста, чтобы не усложнять себе освоение самого языка установкой и настройкой установочных пакетов PHP и MySQL. В качестве интегрированного пакета средств PHP мы выберем XAMPP, дистрибутив которого можно бесплатно загрузить на сайте производителя www.apachefriends.org. Он включает в себя веб-сервер Apache, сервер MySQL, средства PHP и множество других полезных вещей, например почтовый сервис, сервер FTP. Пакет XAMPP устанавливается на компьютерах Windows XP/Vista/7 и Linux, в процессе установки инсталлятор потребует от вас лишь ответить на несколько вопросов, уточняющих конфигурацию среды, а в результате вы получите полный набор средств разработки PHP. Это избавит вас от непростой установки и настройки средств PHP из отдельных компонентов.
В качестве среды IDE рекомендую использовать программу PHPEdit, условно бесплатно распространяемую на сайте разработчика www.phpedit.com. Лицензия предоставляется на месяц, но использовать бесплатно программу вы сможете два месяца, после чего решите, нужна ли она вам настолько, что следует купить ее (около $100). Для сложных сценариев PHP такие средства отладки, которые предлагает PHPEdit, весьма полезны, кроме того, программа помогает вводить код, отображая подсказки и подсвечивая различные компоненты PHP-кода разным цветом.
1.2. Основы синтаксиса языка PHP
Синтаксис языка PHP достаточно прост для изучения, а его корни лежат в языках Perl, Java и C. Однако в отличие от этих языков PHP изначально был разработан как язык программирования, специально предназначенный для написания веб-приложений (сценариев), исполняющихся на веб-сервере. В этом состоит его преимущество, поскольку его средства позволяют быстро и эффективно создавать полнофункциональные веб-приложения.
Другое достоинство PHP — предоставляемая им возможность внедрять свои сценарии в HTML-код веб-страниц, что значительно упрощает задачу создания динамических сайтов. Благодаря PHP разработчики могут динамически изменять HTML-код страниц в зависимости от действий посетителя сайта. Например, при вводе им данных в поля формы, или установке переключателей, флажков, или выборе определенного элемента списка сервер учтет все эти данные и динамически перестроит всю информацию, передаваемую браузеру.
Вместе с тем язык PHP весьма прост и легок для освоения. Даже начинающие программисты смогут быстро научиться создавать на нем достаточно сложные сценарии, реализующие функции и интерфейс на уровне профессиональных сайтов.
Итак, приступим к изучению языка PHP. Надеюсь, что вы прочли предыдущий раздел этой книги и у вас на компьютере установлены серверы Apache и MySQL, чтобы вы могли повторять вслед за изложением примеры конструкции языка PHP. Если вы этого не сделали — настоятельно рекомендую вернуться назад и выполнить установку этих средств.
Сначала мы займемся изучением синтаксиса языка PHP. Мы познакомимся с типами данных, используемых в PHP, базовыми конструкциями по управлению ходом работы программы, функциями, способами передачи данных в сценарии, работы с базами данных MySQL, открытия сеансов работы со сценарием и записью cookie-файлов. По мере изложения материала применение этих средств будет демонстрироваться на примерах сценариев, исполняемых на локальном сервере пользовательского компьютера. Отсюда видна важность установки этих средств.
1.3. Создание и запуск первого сценария PHP
Первый сценарий будет простым, так как он нужен только для демонстрации общей структуры PHP-кода и его совместного использования с кодом HTML. Откройте какой-либо текстовый редактор, например Блокнот системы Windows, и запишите в него такой PHP-код:
<?php
phpinfo();
?>
Далее откройте корневую папку htdocs вашего сервера Apache, в котором сохраняются исполняемые сценарии, и создайте там подпапку с названием examples. Мы будем сохранять в ней файлы PHP-сценариев, создаваемых в процессе изучения. Назовите файл start.php и сохраните его в этой папке.
ПРИМЕЧАНИЕ
Если вы используете пакет XAMPP, то папка htdocs находится внутри папки, в которую вы установили пакет. Обычно эта папка называется так: имя_диска:\XAMPP. При работе с сервером Apache напрямую этот каталог должен быть указан в директиве DocumentRoot в файле httpf.conf. Если же вы предпочитаете работать с сервером IIS, то должны помещать свои сценарии в папку inetpub//wwwroot.
Теперь все готово для исполнения первого сценария. Откройте свой браузер и в адресной строке введите http://localhost/examples/start.php. В окне браузера отобразятся сведения об установленной версии и конфигурации установленного языка PHP (рис. 1.1).
Рис. 1.1. Окно со сведениями об установленной версии языка PHP
Запись phpinfo() внутри сценария означает вызов встроенной функции PHP — одной из многих, которые этот язык предлагает разработчикам сценариев. Запомните, что в конце любого оператора языка PHP должна стоять точка с запятой (;). Функция phpinfo() отображает сведения об установленных компонентах языка PHP и настройках.
Обратите внимание на остальные записи внутри файла. Строки <?php и ?> соответствуют начальному и конечному тегу PHP-кода, внутри которых помещаются сценарии, внедряемые в код HTML веб-страницы. Посмотрим, как это делается на практике. Откройте новый документ текстового процессора и запишите в него такой код (листинг 1.1).
Листинг 1.1. Документ HTML с кодом PHP
<html>
<head>
<title>
Эта страничка содержит код PHP
</title>
<body>
<h1>
Внедрение сценария PHP в код HTML
</h1>
<?php
echo "Привет, Мир! Это PHP-сценарий внутри странички Web!";
?>
</body>
</html>
Сохраните этот код в файле hello.php и поместите его в папку examples. Введите в адресную строку браузера вызов сохраненного кода http://localhost/examples/hello.php, после чего в окне браузера отобразится результат его исполнения (рис. 1.2).
Рис. 1.2. Приветствие PHP-сценария внутри HTML-кода
Рассмотрим содержимое листинга 1.1 внимательнее. Мы видим, что внутри тела документа HTML в содержимое тега <h1> помещен заголовок, после которого внутри тегов <?php и ?> расположен оператор echo с текстом приветствия. Оператор echo — один из основных в языке PHP, он позволяет отображать любой текст внутри веб-страницы. В листинге 1.1 показан простейший пример использования этого оператора:
echo "Здесь помещается выводимый текст";
Выводимый текст должен быть заключен либо в одинарные кавычки (апострофы), либо в двойные кавычки. Числа могут отображаться без кавычек, например корректно писать так:
echo 872976;
Вы можете включать в выводимую строку теги HTML, которые будут восприниматься браузером как обычный HTML-код. Например, код:
echo "<b>Этот текст</b> выделен полужирным начертанием";
приведет к выделению строки Этот текст полужирным начертанием.
В операторе echo можно выводить несколько строк по отдельности, например запись:
echo "Привет", "это", "PHP";
приведет к выводу текста «ПриветэтоPHP». Чтобы отделить слова друг от друга, помещайте внутри кавычек пробелы:
echo " Привет ", " это ", " PHP ";
Если вы хотите отобразить текст в кавычках, пишите так:
echo "Петя сказал: \"Я пошел в школу\"";
В результате отобразится:
Петя сказал: "Я пошел в школу"
Иначе говоря, обратный слеш перед кавычками экранирует, предотвращает их интерпретацию языком PHP как служебного символа.
1.4. Комментарии внутри кода PHP
Любой программист при создании сценария оставляет в нем свои замечания, или комментарии, которые должны информировать пользователя программы о функции и назначении определенного фрагмента кода. Не следует пренебрегать этой возможностью, так как без комментариев вам придется все время вспоминать, что и как вы реализовали в своем сценарии, и тратить на это силы и время (а программные коды забываются очень быстро). Так что используйте комментарии, они вам очень пригодятся, если вы захотите вернуться к ранее написанным программам.
Поместить в PHP-сценарий комментарий можно несколькими способами. Во-первых, можно заключить комментарий в знаки /* Текст комментария */, например, так:
<?php
/* Этот сценарий просто отображает сведения
о версии и конфигурации языка PHP
в окне браузера */
phpinfo();
?>
Такие комментарии допустимо располагать в нескольких строках. Учтите, что вложенные сценарии недопустимы. Такого рода запись приведет к ошибке:
<?php
/* Этот сценарий просто отображает сведения
/* о версии и конфигурации языка PHP */
в окне браузера */
phpinfo();
?>
Здесь строка:
в окне браузера */
не будет распознана как комментарий, поскольку начальная метка комментария /* завершится в конце второй строки меткой */.
Есть и еще два способа размещения комментариев, но только находящихся в одной строке. Их следует помещать после символов // или #, например:
<?php
// Этот сценарий просто отображает сведения
// о версии и конфигурации языка PHP
// в окне браузера
phpinfo(); # Это встроенная функция PHP вывода информации о PHP
?>
Писать или нет комментарии? И если да — то сколько? Общее мнение таково — много комментариев не бывает. Настоятельно рекомендую не пренебрегать ими. В идеале каждая функция и значимый оператор сценария должны быть закомментированы.
1.5. Переменные
Все данные, с которыми работает сценарий, хранятся в переменных. Переменные — это контейнеры данных, обозначенные определенным идентификатором. В языке PHP идентификатор каждой переменной начинается со знака доллара ($). Переменная создается после того, как ей присваивается какое либо значение:
$message= "Здравствуй, мир!";
$counter=10;
$amount=3.62;
Переменные могут хранить данные разных типов — целочисленные, вещественные, логические, текстовые и др., что мы и видим в вышеприведенном примере. В отличие от других языков программирования, в PHP не требуется явно указывать тип данных, поскольку он определяется автоматически. Однако если вы используете в одном выражении переменные разных типов, могут возникнуть трудности. Например, в коде:
$temperature="0";
$temperature=$temperature+2;
к текстовой переменной $temperature, хранящей символ "0" (ноль), добавляется число 2. В этом случае выполняется неявное преобразование типов. Чтобы явно определить преобразование типов, следует писать:
$int_variable=(integer)$variable;
то есть указать в скобках нужный тип данных. Вот список допустимых типов данных PHP:
• boolean — логический тип со значениями true или false;
• string — текстовые данные;
• integer — целые числа;
• float — вещественные числа;
• object — объект;
• array — массив;
• resourse — ресурс;
• NULL — пустое значение.
Рассмотрим эти типы данных подробнее (кроме типа object — ему целиком отведена глава 7).
1.6. Типы данных PHP
Далее будут перечислены все типы данных и приведены варианты их использования на простых примерах. Пока мы опустим описание типа object, поскольку такие данные используются для создания сценариев методами объектно-ориентированного программирования, которое мы подробно обсудим в главе 7.
boolean
Логический тип данных позволяет переменной иметь два значения: true — истина и false — ложь. Для определения переменной этого типа данных ей следует присвоить одно из указанных значений:
<?php
$variable = false; // присвоить $variable значение false
?>
Обычно логические типы данных используются для конструкций, в которых операторы или функции проверяют исполнение какого-либо условия и возвращают результат в виде булевой переменной. Например, в такой конструкции:
<?php
if (MyFunction() == true) {
echo "Функция MyFunction выполнена успешно";
}
?>
Здесь оператор if проверяет значение, возвращаемое функцией MyFuction(), и, если оно равно true, сообщает об успешности выполнения функции.
string
Строковые переменные хранят текстовые данные любой длины. Длина строки ограничена только размером свободной оперативной памяти.
Строки обрабатываются с помощью набора функций, предоставляемых PHP, либо к любому символу строки можно обратиться непосредственно операторами языка. Ниже представлен пример строковой переменной:
<?php
$string = "Пример текста, хранимого строковой переменной";
echo $string;
?>
Функция echo отображает содержимое строки string в окне браузера.
integer
Этот тип предназначен для хранения целочисленных данных разрядностью 32 бита. Значения этих чисел лежат в пределах от –2 147 483 648 до 2 147 483 647. Они могут иметь знак + или – и записываться с использованием десятичной, восьмеричной и шестнадцатеричной системы счисления.
• При использовании восьмеричной системы счисления перед значением пишется символ 0 (ноль), например $variable=0735.
• Если вы используете шестнадцатеричную систему, то должны предварять число символами 0x, например $variable=0xA37.
float
Этот тип данных предназначен для хранения вещественных чисел. Максимальное значение вещественного числа зависит от платформы, на которой исполняется сценарий, и обычно ограничено числом с 14 десятичными знаками. Вещественные числа записываются в одном из ниже представленных форматов:
<?php
$variable1 = 1.264;
$variable2 = 1.3e3;
$variable3 = 3E-10;
?>
array
В любом языке программирования массивами называются упорядоченные наборы данных, в которых для каждого хранимого значения указан соответствующий индекс, или ключ. Индекс используется для идентификации элемента, и между значениями индекса и элементом массива установлено взаимно однозначное соответствие.
Массивы могут быть по-разному организованы, в зависимости от того, как организовано соответствие между ключом и индексом. Например, в простейшем массиве каждый индекс — это целое число от 0 и выше:
<?php
$array[0]="Диван";
$array[1]="Кресло";
$array[2]="Стол";
$array[3]="Стул";
?>
Здесь $array обозначает имя массива, а 0, 1, 2, 3 — его индексы.
Массивы могут быть ассоциативными, в которых индексами служат строки, например:
<?php
$array["Имя"]="Иван";
$array["Отчество"]="Николаевич";
$array["Фамилия"]="Семенов";
?>
Здесь ключами массива служат названия пунктов анкетных данных, а значениями — соответствующие сведения.
Массивы могут быть многомерными. Синтаксис элементов многомерного простого массива таков:
$имя_массива[индекс_1][индекс_2]..[индекс_N];
Например, вы можете определить многомерный массив так:
<?php
$array[0][0]="Диван";
$array[0][1]="Кровать";
$array[1][0]="Кресло";
$array[1][1]="Тумбочка";
$array[1][2]="Стол";
$array[2][0]="Стул";
$array[2][1]="Шкаф";
$array[2][2]="Комод";
?>
Чтобы создать массив, можно воспользоваться PHP-функцией под названием array(). Вот пример:
<?php
$array["Семенов"] = array("Возраст"=>"34", "Имя"=>"Игорь", "Отчество"=>"Онуфриевич");
$array["Козлов"] = array("Возраст"=>"44", "Имя"=>"Егор", "Отчество"=>"Тимофеевич");
$array["Федотов"] = array("Возраст"=>"32", "Имя"=>"Степан", "Отчество"=>"Лукич");
?>
Здесь c каждой фамилией сопоставлены данные анкеты по трем пунктам: Возраст, Имя, Отчество. Метка => в вышеприведенном примере как раз и задает соответствие между индексом массива и значением элемента.
resource
Тип данных resource содержит ссылку на внешний ресурс, который будет далее использован в сценарии. Например, это может быть ссылка на файл или запись в базе данных. Для создания данных этого типа используются специальные функции, которые мы еще обсудим в дальнейшем.
NULL
Тип NULL также называется пустым типом данных и говорит о том, что переменной еще не установлено значение. Переменная будет иметь значение NULL, если оно было ей присвоено, либо при исполнении сценария переменной еще не было присвоено какое-либо значение, либо значение переменной было удалено с помощью специальной функции unset().
1.7. Константы в PHP
Часто для работы сценария необходимо использовать какой-либо параметр, с помощью которого понадобится выполнять расчеты или который нужно будет отображать в каких-то информационных сообщениях и т. д. Классический пример — число π, с помощью которого вычисляется длина окружности. Можно, конечно, везде использовать его значение в виде вещественного числа, но это крайне неудобно, особенно если требуется обеспечить точность и нужно все время писать много знаков после десятичной точки: 3.1415926535. В этом случае можно просто определить константу pi с помощью такого оператора:
define ("pi", 3.1415926535);
После этого можно во всех выражениях использовать pi. Ее значение будет автоматически подставляться в код программы. Константы могут хранить данные только логического, вещественного, целого и строкового типа.
Общий формат функции define() таков:
define (имя_константы, значение константы, $case_sen);
Здесь $case_sen — это переменная логического типа, определяющая чувствительность имени константы к регистру: значение true делает ее чувствительной, false — нет.
В листинге 1.2 представлен сценарий подсчета длины окружности и площади круга с помощью определенной константы pi.
Листинг 1.2. Расчет длины окружности и площади круга
<?php
define("pi", 3.1415926535, true);
$r=10;
$lenght=2*pi*$r;
echo "Длина окружности радиуса ", $r, " равна ", $lenght;
$square=pi*pow($r, 2);
echo "<br>Площадь круга радиуса ", $r, " равна ", $square;
?>
Результат исполнения сценария представлен на рис. 1.3.
Рис. 1.3. Вычисление длины окружности и площади круга
При работе с константами следует учесть, что они определяются только функцией define(), могут быть определены и будут доступны в любом месте сценария.
Язык PHP предоставляет множество предопределенных констант, которые можно использовать в своих сценариях. Набор этих констант обусловлен конфигурацией той среды, которую вы используете для работы. Для проверки наличия константы существует функция defined(), возвращающая true, если константа объявлена.
1.8. Операторы PHP
Язык PHP содержит множество операторов, то есть средств, с помощью которых обрабатываются данные в программе. Ниже мы обсудим основные операторы языка, выполняющие различные функции при построении программного кода: присвоение значений различным переменным, математические операции с числами, обработку текстовых и битовых данных, операторы, управляющие ходом выполнения программы.
Операторы присвоения
Основной оператор присвоения данных любой переменной представляет собой знак равенства = и используется так:
Левый_операнд=Правый_операнд;
Здесь оператор присвоения получает значение правого операнда и устанавливает его в левый операнд. Таким образом, результатом исполнения кода:
<php?
$variable1=5;
$variable2=variable1;
?>
будет присвоение переменным $variable1 и $variable2 значения 5.
Операцию присвоения можно использовать для присвоения значения сразу нескольким переменным:
$var1=$var2=$var3=$var4=2;
Это очень удобно и значительно упрощает код программы.
Математические операторы
Математические операторы позволяют выполнять различные арифметические вычисления с переменными и числами. К ним относятся операторы:
• суммы двух чисел +;
• разности двух чисел –;
• произведения двух чисел *;
• частного от деления двух чисел /;
• остатка от деления двух чисел %.
Примеры применения этих операторов представлены в листинге 1.3.
Листинг 1.3. Применение математических операторов
<?php
echo "7 + 3 = ", 7 + 3, "<br>";
echo "7 - 3 = ", 7 - 3, "<br>";
echo "7 * 3 = ", 7 * 3, "<br>";
echo "7 / 3 = ", 7 / 3, "<br>";
echo "7 / 3 = ", 7 % 3, "<br>";
?>
Результат исполнения кода представлен на рис. 1.4.
Рис. 1.4. Пример исполнения арифметических операторов PHP
Обратите внимание на операцию деления. Ее результатом всегда будет значение вещественного типа, даже если оба операнда были целочисленными. При использовании арифметических операций возможно использование скобок, как в обычных арифметических выражениях. Приоритет выполнения арифметических операций над другими соответствует обычным математическим правилам.
Комбинированные операторы присвоения
При работе с арифметическими операторами в PHP можно использовать комбинированные операторы присвоения, в которых значение левого операнда применяются в арифметической операции, а затем результат сохраняется в той же переменной. Например, операция:
$variable += 21;
означает добавление к переменной $variable числа 21 и сохранение результата в самой переменной $variable, то есть вышеприведенная операция эквивалентна такой:
$variable = $variable + 21;
Ниже приведены примеры комбинирования оператора присвоения с различными арифметическими операторами:
$variable-=24; // Вычитание из $variable числа 24
$variable*=5; // Умножение $variable на 5
$variable/=3; // Деление $variable на 3
Строковые операторы
Для работы со строковыми типами данных язык PHP предоставляет оператор конкатенации (.), объединяющий в одну строку свои операнды, и оператор присвоения с конкатенацией, присоединяющий правый операнд к левому. Вот примеры их использования.
<?php
$variable1 = "Здравствуй ";
$variable2 = $variable1 . "мир!";
?>
В этом примере переменной $variable2 присваивается строка "Здравствуй, мир!". Это же самое можно сделать с использованием комбинированной операции присвоения и конкатенации.
<?php
$variable1 = "Здравствуй, ";
$variable1 .= "мир!";
?>
Здесь к переменной $variable1 присоединяется строка "мир!". Результат будет одинаков в обоих случаях.
ПРИМЕЧАНИЕ
Для работы со строковыми переменными PHP предоставляет множество встроенных функций, которые значительно упрощают обработку полученных текстовых данных.
Операторы инкремента и декремента
Эти операции увеличивают или уменьшают на 1 значение переменной. Например, выражение ++$variable увеличивает значение $variable на 1 с последующим присвоением результата переменной $variable, а выражение —$variable уменьшает на 1 значение $variable. Это очень удобно при организации счетчиков, применяемых, например, для создания циклических операций (см. подраздел «Операторы циклов» раздела 1.8).
Операции инкремента и декремента бывают префиксные и постфиксные. Префиксные операции записываются в начале переменной, а постфиксные — в конце. Разница между ними проявляется при использовании инкрементируемой или декрементируемой переменной. При префиксной операции сначала выполняется инкрементация или декрементация переменной, а затем эта переменная используется в соответствующем выражении. В постфиксной операции в выражении используется первоначальное значение переменной, а ее инкрементация или декрементация выполняется после.
В листинге 1.4 показаны способы применения операций инкрементации и декрементации в обоих вариантах.
Листинг 1.4. Постфиксное и префиксное выполнение инкремента и декремента
<?php
$var1=$var2=$var3=var4=2;
echo "\$var1++ = ", $var1++, "<br>";
echo "++\$var2 = ", ++$var2, "<br>";
echo "\$var3— = ", $var3—, "<br>";
echo "—\$var4 = " , —$var4, "<br>";
?>
Результат выполнения сценария листинга 1.4 представлен на рис. 1.5.
Рис. 1.5. Префиксная и постфиксная инкрементация и декрементация
Учтите, что булевы типы данных не могут быть инкрементированы или декрементированы.
Битовые операторы
Битовые операторы позволяют устанавливать значения 1 или 0 бит в двоичном представлении целочисленных переменных. Целые числа в PHP представлены 32-разрядными переменными. Вот пример такого числа:
0000 0000 0000 0000 0000 0000 0000 0101
В десятичном представлении это число 5. Иногда возникает необходимость установить в 1 или же сбросить в 0 бит в каком-то двоичном разряде или группе разрядов. Для этого и служат двоичные переменные, которые позволяют сравнивать биты в двоичных разрядах двух переменных, скажем $var1 и $var2, и по результатам этого сравнения устанавливать соответствующий бит в возвращаемом значении. Рассмотрим эти операторы.
• & — побитовое «И», устанавливает в результате var1 & var2 только те биты, которые установлены и в $var1, и в $var2.
• | — побитовое «ИЛИ», устанавливает в var1 | var2 биты, которые установлены или в $var1, или в $var2.
• ^ — исключающее «ИЛИ», устанавливает в var1 ^ var2 биты, которые установлены или только в $var1, или только в $var2.
• ~ — отрицание, устанавливает в ~$var1 биты, которые в $var1 не установлены, и наоборот.
• << — выражение $var1 << $var2 сдвигает влево все биты переменной $var1 на $var2 позиций влево.
• >> — выражение $var1 >> $var2 сдвигает вправо все биты переменной $var1 на $var2 позиций вправо.
Эти операции на практике редко применяются.
Операторы сравнения
Операторы сравнения представляют собой множество логических операторов, предназначенных для использования в других операторах для управления их работой. Самым популярным оператором такого рода является условный оператор if, используемый для разветвления процесса исполнения программы в зависимости от различных условий. Вот его общий вид:
if (логическое_выражение)
оператор
В этом примере логическое выражение может принимать значение true или false, в зависимости от текущих значений входящих в него переменных. Если логическое выражение внутри if истинно, то исполняется оператор, стоящий сразу после if.
В логическое выражение могут входить многие операторы, включая функции, возвращающие логические значения. Но чаще всего в нем используются операторы сравнения. Например, выражение $x<$y истинно, если значение $x меньше $y. Вот какие операторы сравнения имеются в PHP:
• == (равенство), выражение $x==$y истинно, если значение $x равно $y;
• === (идентичность, или тождество), выражение $x===$y истинно, если значение $x равно $y и они одного типа;
• != (неравенство), выражение $x!=$y истинно, если $x не равно $y;
• <> (неравенство), выражение $x!=$y истинно, если $x не равно $y;
• !== (неидентичность), выражение $x!==$y истинно, если или $x не равно $y или они не одного типа;
• < (меньше), выражение $x<$y истинно, если $x меньше $y;
• > (больше), выражение $x<$y истинно, если $x больше $y;
• <= (меньше или равно), выражение $x<=$y истинно, если $x меньше или равно $y;
• >= (больше или равно), выражение $x>=$y истинно, если $x больше или равно $y.
Приведу пример использования операторов сравнения:
<?php
$temperature=26;
if($temperature>=24)
echo "На улице тепло"
?>
Операторы сравнения разрешается применять только для скалярных переменных, но не для массивов и объектов.
Логические операторы
Эти операторы также позволяют управлять ходом вычислений в программе, делая его максимально гибким и интуитивно понятным. Например, они разрешают объединять вместе два условных оператора:
if(логическое_выражение_1&&логическое_выражение_2)
оператор
Здесь оператор после if выполняется, если истинно И логическое выражение_1, И логическое выражение_2. Таким образом, комбинируя логические выражения и операторы, можно строить весьма сложные конструкции, реализующие любую, самую изощренную, логику работы программы.
Вот какие логические операторы имеются в PHP:
• AND (логическое «И»), выражение $x AND $y истинное, если и $x, и $y истинны;
• OR (логическое «ИЛИ»), выражение $x OR $y истинно, если или $x, или $y истинно;
• XOR (исключающее «ИЛИ»), выражение $x XOR $y истинно, если истинно или $x, или $y, но не оба;
• ! (отрицание), выражение !$x истинно, если $x ложно;
• && (логическое «И»), выражение $x && $y истинно, если и $x, и $y истинны;
• || (логическое «ИЛИ»), выражение $x OR $y истинно, если или $x, или $y истинно.
Возникает вопрос, зачем нужны совпадающие по функциям операторы AND и && или OR и ||. Дело в том, что операторы && и || имеют более высокий приоритет операций. Обсудим этот вопрос подробнее, он очень важен при создании в программе сложных управляющих конструкций.
Приоритеты операторов
Приоритет операторов языка PHP представлен в табл. 1.1. При знакомстве с ней помните, что операторы с более высоким приоритетом выполняются в первую очередь.
Таблица 1.1. Приоритет операторов
Уровень приоритета
Оператор
1
=, +=, –=, *=, /=, %=, >>=, <<==, &=, ^=, |=
2
||
3
&&
4
|
5
^
6
&
7
!=
8
<<=, >>=
9
<<, >>
10
+–
11
*, /, %
12
++, – –
В любом случае использование скобок позволяет решить все проблемы — в PHP правила приоритета операторов вполне соответствуют школьной арифметике.
Условные операторы
Условные операторы в языке PHP применяются для управления ходом исполнения программы. Выше, при описании операторов сравнения, я упомянул самый популярный оператор if, но, кроме него, PHP предлагает и другие условные операторы.
Оператор if
Синтаксис оператора if в общем случае таков:
if (логическое_выражение)
{
оператор1;
…
оператор2;
}
Если логическое выражение в операторе if истинно, то выполняются операторы, следующие за конструкцией if. Если таких операторов должно быть несколько, то их помещают в фигурные скобки. Приведу пример использования оператора.
<?php
if ($x < $y) {
echo "x меньше y";
$z=$y;
$y = $x;
$x=$z;
}
?>
Здесь выполняется сравнение двух переменных — $x и $y, и если $x меньше $y, переменной $x присваивается значение $y, а $y — значение $x.
Конструкция if…else
Если необходимо, как это часто бывает, совершить в программе некоторые действия в случае как выполнения, так и НЕвыполнения определенных условий, используется конструкция if…else. Общий вид этой конструкции таков:
if (логическое_выражение)
оператор_1;
else
оператор_2;
Здесь при истинности логического выражения в операторе if выполняется оператор_1, а иначе — оператор_2. Если исполняемых операторов должно быть несколько, то их заключают в фигурные скобки:
<?php
if ($x > $y) {
echo "x меньше y";
$z=$y;
$y=$x;
$x=$z;
} else
echo "y больше или равно x";
?>
Конструкцию if…else можно записать и так:
if (логическое_выражение_1):
набор_операторов_1;
elseif(логическое_выражение_2):
набор_операторов_2;
else:
набор_операторов_3;
endif
В этой конструкции после каждого блока if…else вместо фигурных скобок ставится двоеточие, после которого располагаются наборы операторов. Обратите внимание на новую конструкцию elseif, расширяющую возможности оператора if. Общий синтаксис конструкции elseif таков.
if (логическое_выражение_1) {
набор_операторов_1;
} elseif (логическое_выражение_2) {
набор_операторов_2;
} elseif(логическое_выражение_3) {
набор_операторов_3;
}
Описанные выше конструкции позволяют эффективно разветвлять процесс исполнения кода программы в зависимости от условий, но ими возможности PHP не ограничиваются.
Оператор switch
Если программе следует выбрать варианты действий в зависимости от значений какого-либо выражения, не обязательно логического, то вместо оператора if удобнее использовать конструкцию switch-case. Синтаксис конструкции switch-case таков:
switch(выражение) {
case значение_выражения_1:
набор_операторов_1;
[break;]
case значение_выражения_2:
набор_операторов_2;
[break;]
. . .
case значение_выражения_N:
набор_операторов_N;
[break;]
[default: операторы_выполняемые_по_умолчанию;
[break]]
}
В приведенной выше конструкции в операторе switch вычисляется выражение и полученный результат сравнивается с параметрами значения_выражения каждого блока case. Если значения совпадают, то исполняется набор операторов данного блока case. Если ни одно значение_выражения в блоках case не совпадет с результатом подсчета выражения, выполняются операторы блока default.
Нужно учесть одну тонкость: после исполнения операторов блока case выполнение сценария переходит на следующий блок, потом на следующий и так далее до конца оператора switch либо пока не встретится оператор break. Приведу пример конструкции switch-case.
<?php
switch ($x) {
case 0:
case 1:
case 2:
echo "x меньше 3<br>";
break;
case 3:
echo "x=3<br>";
break;
case 4:
echo "x=4<br>";
break;
case 5:
echo "x=5<br>";
break;
case 6:
echo "x больше 5<br>";
}
?>
Как видим, здесь набор операторов case для значений 0, 1 пуст, но если значение $x равно 0 или 1, управление перейдет соответственно на блок case 0: или case 1:, после чего будет выполнен оператор третьего блока case 2: и отобразится сообщение x меньше 3.
Операторы циклов
Циклы — это следующая по значимости категория PHP-операторов после условных. Они предназначены для повторения исполнения определенного набора операторов по заданному условию. Повторяемые операторы образуют тело оператора цикла, а повторяемые проходы по этим операторам и представляют собой цикл.
В PHP имеются четыре вида операторов циклов.
• for — цикл со счетчиком.
• while — цикл с предусловием.
• do…while — цикл с постусловием.
• foreach — цикл перебора массивов.
Рассмотрим эти операторы по порядку.
for
Оператор for позволяет выполнить операторы тела цикла заданное количество раз. Синтаксис оператора цикла for таков:
for (операторы_инициации_цикла; условие_цикла; операторы_после_выполнения_цикла) {
тело_цикла;
}
Вот пример такого оператора:
<?php
for(x=2, $i=1; $i<12; i++) {
x +=2;
echo "<br> i = ", $i, " x = ", $x;
}
?>
В этом примере в начале цикла инициализируется значение счетчика $i и переменной $x, после чего начинается выполнение цикла (обратите внимание, что операторы инициализации цикла разделяются запятыми). Порядок действий после инициализации таков.
1. Проверяется условие цикла $i<12, то есть НЕдостижение переменной цикла $i значения 12.
2. Если условие цикла истинно, выполняется тело цикла, иначе итерации завершаются.
3. Далее выполняются операторы после исполнения цикла $i++.
4. Переходим на шаг 1.
Если при задании цикла требуется ввести несколько операторов иниализациации цикла, проверки условий цикла или операторов после цикла, то их можно разделить запятыми, как в приведенном выше примере.
do…while
Оператор цикла while также проверяет значение выражения после каждого прохода, поэтому, в отличие от for, тело цикла while выполняется хотя бы один раз. Синтаксис цикла while таков:
do {
тело_цикла;
}
while (логическое_выражение);
После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается. Вот пример применения цикла с постусловием do…while:
<?php
$i = 1;
do {
echo "<br> i = ", $i;
} while ($i++< 10);
?>
Здесь перед выполнением цикла счетчику $i присваивается начальное значение, после чего цикл выполняется десять раз.
while
Синтаксис оператора цикла while таков:
while (логическое_выражение) {
набор_операторов
}
Оператор цикла while называется циклом с предусловием, поскольку работает следующим образом.
1. Вычисляется значение логического выражения.
2. Если значение истинно, выполняется тело цикла, в противном случае переходим на следующий за циклом оператор.
Иными словами, в отличие от ранее описанного оператора do…while проверка логического условия проводится в начале цикла. Приведу пример цикла с предусловием while:
<?php
$i=0;
while ($i++<12) {
echo "<br> i = ", $i;
}
?>
Важно учитывать последовательность выполнения операций условия $i++<12 с постфиксной инкрементацией. Сначала проверяется условие, и только потом увеличивается значение переменной. Если операция инкремента префиксная, то есть записывается как ++$i<12, то сначала будет выполнено увеличение переменной, а только затем сравнение.
foreach
Оператор foreach предназначен специально для перебора массивов. Синтаксис оператора foreach таков:
foreach (массив as $ключ=>$значение) {
набор_операторов
}
Вот пример работы цикла foreach:
<?php
$fruits["бананы"] = "30 руб.";
$fruits["ананасы"] = "50 руб.";
$fruits["яблоки"] = "20 руб.";
$fruits["апельсины"] = "30 руб.";
foreach ($fruits as $key => $value) {
echo "<br> Фрукт: ", $key, " Цена: ", $value;
?>
В примере циклически просматривается массив $fruits и для каждого элемента выводится пара $key и $value, содержащая соответственно название фрукта и его цену:
Фрукт: бананы Цена: 30 руб.
Фрукт: ананасы Цена: 50 руб.
Фрукт: яблоки Цена: 20 руб.
Фрукт: апельсины Цена: 30 руб.
break
Чтобы прервать выполнение цикла в ходе любой итерации, не дожидаясь ее завершения, используется оператор break. С этой целью его помещают в нужное место внутри тела цикла, например:
<?php
$i=1;
while ($i++<9) {
if ($i==3) break;
echo "<b> Итерация", $i";
}
?>
Здесь при достижении $i значения 3 цикл прерывается.
Если используются вложенные циклы, то можно указать номер прерываемого цикла. Нумерация циклов выглядит следующим образом:
for (...) // Третий цикл
{
for (...) // Второй цикл
{
for (...) // Первый цикл
{
}
}
}
Чтобы прервать выполнение какого-то вложенного цикла, следует использовать такую конструкцию:
break(номер_цикла);
По умолчанию для номера цикла используется 1, то есть выполняется выход из текущего цикла, но иногда применяются и другие значения.
continue
Оператор continue немедленно завершает текущую итерацию цикла и при выполнении условия цикла переходит к новой итерации. Для continue можно указать уровень вложенности цикла, который будет продолжен после возврата управления.
В основном continue позволяет вам сэкономить количество фигурных скобок в коде и увеличить его удобочитаемость. Это чаще всего бывает нужно в циклах-фильтрах, когда требуется перебрать определенное количество объектов и выбрать из них только те, которые удовлетворяют заданным условиям. Приведу пример использования конструкции continue:
<?php
$i=-3;
while ($i++< 5) {
if ($i==0) continue;
echo " 1/ $i = ", 1/$i, "<br>";
}
?>
Здесь в цикле отображается обратное значение переменной цикла 1/$i и оператор continue позволяет отбросить деление на нуль. В результате отобразится следующее:
1/ -2 = -0.5
1/ -1 = -1
1/ 1 = 1
1/ 2 = 0.5
1/ 3 = 0.333333333333
1/ 4 = 0.25
1/ 5 = 0.2
Как видим, некорректная арифметическая операция отменена.
1.9. Работа с функциями в PHP
В PHP, как и в любом языке программирования, существуют подпрограммы, то есть фрагменты кода PHP, оформленные так, что к ним можно обратиться из любого места программы. Это позволяет значительно упростить программу за счет исключения повторяющихся кодов, улучшить ее читабельность, а также сократить объем памяти, необходимый для хранения и исполнения программы.
В PHP подпрограммы называются пользовательскими функциями и обладают некоторыми особенностями, отличающими их от подобного рода средств в других языках программирования.
• Функции PHP возвращают любой тип данных.
• Имеется возможность изменять параметры, переданные функции.
• Поддерживаются параметры по умолчанию, вы можете вызывать одну и ту же функцию с переменным количеством параметров.
Кроме того, имеются отличия в видимости, то есть доступности переменных в различных частях программного кода. Этот вопрос мы подробно обсудим чуть позже, а сейчас посмотрим, как в PHP задаются пользовательские функции.
Синтаксис функций PHP
Синтаксис объявления функций таков:
function имя_функции (аргумент1[=значение1],...,аргумент1[=значение1])
{
тело_функции
}
В начале объявления функции стоит служебное слово function, после указано имя функции и далее в скобках через запятую перечислены аргументы функции. Каждому аргументу может быть присвоено значение по умолчанию. Далее находится тело функции, содержащее список операторов, заключенный в фигурные скобки.
Функцию можно объявить в любом месте программы, но обязательно до момента ее первого использования. Имена функций в общем случае могут содержать русские буквы, но этого делать не рекомендуется — возможны проблемы совместимости. Имена функций не должны содержать пробелов и должны быть уникальными. Регистр символов при этом не учитывается.
Пользовательские функции могут возвращать значения любого типа. Для этого используется оператор return, который может вернуть что угодно, включая массивы. Если этот оператор опустить, то функция не вернет никакого значения.
Приведу пример функции.
<?php
function user_function() {
$return_value = 666;
return $return_value;
}
$x = user_function();
echo "<br>x= ", $x;
?>
Здесь функция user_function с помощью оператора return возвратит число 666.
Передача аргументов
Если при объявлении функции был указан список аргументов, то этой функции при вызове можно передавать параметры. Например, пусть функция объявлена так:
<?php
function user_function ($x, $y, $z) {
…
}
?>
Тогда при вызове функции user_function() обязательно нужно указать все передаваемые параметры.
Аргументы можно передавать по ссылке. Для этого перед именем аргумента в определении функции следует поместить амперсанд (&).
<?php
function user_function(&$string_argument) {
$string_argument = 'ПОСЛЕ ВЫЗОВА';
}
$string = 'ДО ВЫЗОВА ';
echo "До вызова функции: ", $string;
user_function($string);
echo "<br> После вызова: ", $string;
?>
В результате будет выведено:
До вызова функции: ДО ВЫЗОВА
После вызова: ПОСЛЕ ВЫЗОВА
Передав функции ссылку на аргумент, мы позволили ей изменить значение переменной $string внутри функции. Сравните, что получилось бы, если бы в определении функции мы убрали передачу значения по ссылке (удалили амперсанд).
function user_function($string_argument) {
$string_argument = 'ПОСЛЕ ВЫЗОВА';
}
В результате отобразится:
До вызова функции: ДО ВЫЗОВА
После вызова: ДО ВЫЗОВА
Получается, функция не смогла изменить значение переданного параметра! Такого рода ошибки — частое явление при написании программ, приводящее к проблемам при отладке кода. Дело в том, что все переменные, объявленные внутри функции, существуют только во время ее исполнения и их видимость ограничена телом функции. Изменив значение такой переменной внутри функции, мы никак не повлияли на значение одноименной переменной вне функции. Передача параметра по ссылке решает эту проблему — изменение параметра, переданного по ссылке, внутри функции, приводит к изменению соответствующей переменной вне функции.
Функции также могут возвращать ссылки как результат своей работы. В определении такой функции в начале ее названия ставится амперсанд (&). Рассмотрим пример такой конструкции:
function &reference_ret(&$reference)
{
return $reference;
}
Здесь функция &reference_ret() просто возвращает ссылку на переданный ей параметр. Вот пример ее использования:
$var=7;
echo "Начальное значение: ", $var;
$reference = &reference_ret($var);
$reference -=3;
echo "<br>Новое значение: ", $var;
В результате отобразится:
Начальное значение: 7
Новое значение: 4
Таким образом, мы получили из функции &reference_ret() ссылку $reference на переменную $var и с помощью этой ссылки изменили значение самой переменной (вычли 3). Ссылки указывают на места памяти, хранящие переменную, и работать с ними следует осторожно — получив такую ссылку, мы можем изменять значение соответствующей переменной из любого места программы.
Значения параметров по умолчанию
Если при задании функции указать для аргументов значения по умолчанию, то можно опускать передачу параметров. В этом случае будут использованы значения по умолчанию. Приведу пример.
<?php
function sale_fruit($argument = "банан") {
return "Дайте мне $argument";
}
echo "<br>", sale_fruit();
echo "<br>", sale_fruit("яблоко");
?>
При исполнении программы отобразятся две строки:
Дайте мне банан
Дайте мне яблоко
Первая строка отображает значение аргумента по умолчанию, а вторая — переданное значение. Учтите, что значение по умолчанию должно быть константой.
Видимость переменных
Видимость переменной определяет, в каком месте программы мы можем обратиться к ней для выполнения своих операций. В PHP с точки зрения видимости переменные подразделяются на глобальные и локальные.
• Глобальные переменные доступны из любого места программы, включая функции.
• Локальные переменные определяются внутри функции и доступны только из нее.
В зависимости от способа и места своего определения для каждой переменной задается ее видимость. Для определения видимости переменных, то есть их доступности из различных частей сценария, в PHP используются следующие правила.
• В сценариях PHP применяются суперглобальные переменные, видимые в любом месте сценария.
• После своего объявления константы видны везде, как внутри, так и вне функций.
• Переменные, объявленные в сценарии, по умолчанию являются глобальными, которые будут видны везде, но не внутри функций.
• Переменные, объявленные внутри функций, являются локальными для своих функций и прекращают свое существование после завершения работы функции.
• Переменные, объявленные глобальными внутри функций, ссылаются на глобальные переменные с теми же именами.
• Переменные, объявленные статическими внутри функций, невидимы за пределами функций, но сохраняют значения между вызовами функций.
Поясню вышесказанное примерами. По умолчанию все используемые внутри функции переменные локальны и вы не можете изменить их вне тела функции. Даже если ее имя совпадает с именем глобальной переменной, объявленной где-то в другом месте программы, вне функции, то никакие изменения локальной переменной не скажутся на глобальной.
Например, рассмотрим такую программу:
<?php
$var = 45;
function myfunction() {
$var = 54;
echo "<br> внутри функции var = ", $var;
}
myfunction();
echo "<br> извне функции var = ", $var;
?>
Она отобразит следующее:
внутри функции var = 54
извне функции var = 45
Чтобы переменная была доступна из любого места программы, ее следует объявить глобальной с помощью такой конструкции:
global $variable1, $variable 2… ;
Рассмотрим пример использования глобальной переменной.
<?php
$a = 6;
$b = 8;
function myfunc() {
global $a, $b, $c;
$c = $a + $b;
}
myfunc();
echo "<br> c = ", $c;
?>
Программа этого примера выведет c = 14. После определения внутри функции myfunc() переменных $a, $b и $c глобальными все обращения к этим переменным будут указывать на глобальную версию. Не существует никаких ограничений на количество глобальных переменных, которые могут обрабатываться пользовательскими функциями.
В сценариях PHP, кроме локальных и глобальных переменных, можно использовать статические переменные. Для этого переменную внутри функции с помощью ключевого слова static объявляют статической, в результате чего ее значения не будут изменяться после вызова функции. Ниже приведен пример работы функции, реализующей счетчик, в котором статическая переменная накапливает количество обращений к функции.
function mycounter() {
static $counter;
$counter = $counter + 1;
echo $counter;
}
for ($i = 5; $i<12; $i++) mycounter();
Программа в данном примере выведет строку:
1234567
При каждом вызове функции статическая переменная $counter сохраняет значение, полученное при предыдущем вызове. Если удалить объявление статической переменной, то отобразится строка:
1111111
Причина в том, что в этом случае при каждом новом вызове функции mycounter() переменные внутри функции будут инициализироваться, а переменным присваивается значение нуль. Далее в нашем примере это значение инкрементируется и выводится оператором echo.
Суперглобальные переменные введены в PHP как место хранения данных системного характера, определяющих работу всего сценария на системном уровне. Перечислю эти переменные, так как мы будем постоянно сталкиваться с ними в дальнейшем.
• $CLOBAL — массив всех глобальных переменных. С его помощью можно получить доступ к любой глобальной переменной внутри функции, например $GLOBAL['myglobalvar'].
• $_SERVER — массив параметров работы сервера.
• $_GET, $_POST — массивы параметров, переданных в сценарий, например, при обработке формы.
• $_COOKIE — массив данных, сохраняемых в файлах cookie.
• $_REQUEST — массив введенных пользователем данных, включая информацию в массивах $_GET, $_POST, $_COKIE.
• $_FILES — массив данных о загруженном файле.
• $_ENV — массив переменных окружения.
• $_SESSION — массив переменных сеанса работы пользователя со сценарием.
Вышеперечисленные суперглобальные переменные будут встречаться на протяжении всей книги, и мы подробно рассмотрим их назначение и применение. А пока запомните, что все переменные, объявленные в сценарии вне функций, по умолчанию являются глобальными, внутри функций — локальными, а суперглобальные переменные доступны в любой части сценария.
1.10. Операторы повторного использования кода
Кроме функций, язык PHP предлагает еще одно полезное средство повторного использования кода — операторы include() и require(). С их помощью вы можете включить в сценарий любой код, который будет исполняться так, как если бы он был помещен в исходный код сценария обычным образом. Поясню примером.
Допустим, у вас имеется простейший сценарий:
<?php
echo '<p>Это исходный код сценария<p />';
?>
При исполнении отобразится текст Это исходный код сценария. Теперь предположим, что нам требуется включить в свой сценарий несколько констант, которые предполагается использовать во многих местах, например число π. Мы можем просто определить константу:
define("pi", 3.14159);
и далее использовать ее в коде сценария. Но можно сделать и так — записать в отдельный ф
...