PHP: Полезные приемы
Автор: Антон Орлов, orlovs.pp.ru

  Главная   Учебник   Статьи   FAQ   Книги   Ссылки  

Глава 3

PHP: основы

Синтаксис PHP прост. Программы на PHP встраиваются в текст web-страницы так же, как и сценарии на JavaScript, VBScript, - окайм-ляясь угловыми скобками с вопросительными знаками и указанием языка:

<?php
...
текст программы
...
?>

Команды PHP обязательно разделяются символом точки с запятой - ";" (символы конца абзаца или конца строки не учитывается никак), после последней в программе команды его можно не ставить. Также символ ";" не ставится после условных операторов (if, switch) и опера-торов цикла (for, while и других).

Пример программы на PHP - на рис. 3.1.


Рис. 3.1. Программа на PHP (выделена жирным) в тексте web-страницы.

Как и во всех языках программирования, в PHP есть возможность работать с переменными - некиими обьектами, имеющими имя и мо-гущими принимать различные значения. Однако работа с переменны-ми в PHP, пожалуй, самая легкая из всех возможных. Переменные не надо заранее обьявлять (если не знаете, что это такое - и не надо), раз-ве что за исключением использования их в функциях. Для введения новой переменной достаточно просто присвоить ей какое-либо значе-ние, а для помещения значения переменной в строку текста, имя фай-ла или параметр команды нужно просто написать ее имя в том месте, где должно быть ее значение. Чтобы PHP мог отличать переменные от строк или команд, ее имя должно начинаться со знака доллара - "$" и не должно содержать пробелов или знаков апострофа и некоторых других. При анализе программного кода интерпретатор PHP считает именем переменной все, что содержится между $ и ближайшим к не-му символом, недопустимым в имени переменной.

В качестве имен переменных можно также использовать другие переменные - для этого другую переменную следует просто указать на месте имени первой: $$a.

Переменные в PHP могут быть четырех типов - число (целое и дробное), строка текста, массив и объект. Есть еще два типа переменных - PDF-документ и PDF-инфо, но они применяются только при работе с файлами PDF (и при установленном модуле поддержки PDF). Интерпретатор PHP авто-матически определяет тип переменной на основании анализа ее со-держимого. Подробнее о типах данных вы можете узнать в руково-дстве по PHP (например, в том, что доступно с сайта "PHP по-русски"), там же рассказано и об особенностях работы с массивами (и вообще объяснено, что это такое, если вы еще не знаете).

Для включения числовой или строковой переменной в строку тек-ста достаточно просто поместить переменную туда, где она должна стоять в этой строке. Например, в итоге выполнения кода $a="птица певчая"; $b="Дятел - $a"; переменной $b будет присвоено значение "дятел - птица певчая".

Помните, что в PHP нельзя для сложения строковых переменных использовать символ "+" - он пригоден лишь для числовых выражений. Помещайте переменные в строки или используйте команду конкатенации - точку: $c=$a.$b.

Довольно часто используются сокращенные обозначения арифме-тических действий над переменными и действий по присваиванию им каких-либо значений. Например, команда $a+=3 означает, что пере-менную $a надо увеличить на 3, что и будет сделано, если она имеет числовой формат. Точно так же команда $a-=3 уменьшает перемен-ную $a на 3, а команды $a*=2 и $a/=2 соответственно умножают и делят на два переменную $a. Команда $a.=" строка" эквивалентна команде $a="$a строка".

В PHP применяются также операции инкремента и декремента - то есть измене-ния значения переменной на 1. Так, команды $a++, $a-- - они соответственно увели-чивают и уменьшают значение переменной $a на единицу. То же самое делают и команды ++$a, --$a, однако в том случае, если подобная команда используется в выражении, они в отличие от предыдущих сначала изменяют значение переменной, а потом выдают его в выражение. Иными словами, если переменная $a равна 2, то после выполнения команды $b=$a++; ее значение достигнет 3, а $b будет установ-лена в 2. В то же время команда $b=++$a; установит обе переменные в 3.

Массив - это совокупность под одним именем перенумерованных переменных. Имя каждой переменной в массиве состоит из имени этого массива и индекса переменной - нечто вроде номера перемен-ной в массиве или ее имени в нем. Индекс переменной может быть цифровым или символьным - то есть представлять собой либо номер переменной в массиве, либо ее имя в нем.

Например, вот массив с числовыми индексами (нумерация индек-сов начинается с нуля, а не единицы!):

$a[0]=100; $a[1]=101; $a[2]=102;

а вот с символьными:

$a['first']=100; $a['second']=101; $a['third']=102;

(Массив с числовыми индексами называется еще "скалярным", а с символьными - "ассоциативным".)

Зачем нужны массивы? А для того, чтобы можно было к ним об-ращаться как к чему-то целому, тем самым имея возможность совер-шать автоматические действия со всеми элементами массива или с их частью, не указывая имени каждого их элемента.

Иными словами - скажем, в какие-то переменные мы записали, до-пустим, имена клиентов и теперь желаем вывести их все вместе. Как это сделать? Только перебрав все эти переменные, для чего, естест-венно, нам понадобятся их имена. Имена, естественно, придется же-стко задать в программе. А если заранее неизвестно, сколько будет клиентов - как тогда быть? Если же имена клиентов поместить в мас-сив, то все их можно перебрать специальной командой, добавить же новое имя - тоже нетрудно.

В PHP добавлять элементы в массив можно как явно указывая ин-декс элемента (например, $a[100]="Андрей";), так и просто упоминая, в какой массив этот элемент добавляется - $a[]="Андрей";. В послед-нем случае добавляемый элемент становится последним в массиве.


Ниже перечислены некоторые основные команды PHP, которых вполне хватит для реализации несложных проектов. Для более полно-го ознакомления с командами PHP можно изучить Руководство по этому языку, доступное, например, с адреса http://php.spb.ru или дру-гие публикации.

" include "имя файла" - команда для включения содержимого од-ного файла в другой. Содержимое того файла, имя которого указыва-ется в команде, целиком и полностью вставляется на то место, где располагается эта функция, при этом все коды PHP, содержащиеся во вставляемом файле, исполняются так же, как если бы они были на месте этой функции. (Помните, что файл именно вставляется - то есть, например, пути к картинкам, которые должны присутствовать во вставляемом файле, следует указывать от местонахождения того фай-ла, в котором находилась команда include.)

Если тот файл, который включается в страницу с помощью коман-ды include, отсутствует, то вместо него размещается уведомление об этом, а программа на PHP выполняется дальше. (Если необходимо, чтобы при отсутствии включаемого файла обработка и выдача web-страницы завершились, вместо команды include следует использовать команду require.)

" mail ("Кому", "Тема", "Текст сообщения", "Дополнительные заголовки") - отправка почтового сообщения. При выполнении данной команды на сервере формируется электронное письмо в соответствии с указанными параметрами и отправляется с помощью установленной на сервере почтовой программы. Вы можете установить почтовый сервер и на своем компьютере - используйте, например, Office Mail Server Юрия Кучуры (доступен с http://eu3eu.chat.ru) или Courier Mail Server Романа Ругаленко (доступен с http://courierms.narod.ru). В качестве параметра "Кому" может выступать набор адресов, разделенных запятыми. "Дополнительные заголовки" могут быть любые (естественно, допустимые почтовыми протоколами!), разделяться они должны комбинацией символов /n, которая в PHP означает перевод строки. (Если среди "Дополнитель-ных заголовков" не указано поле From, то оно заполняется по умол-чанию, например, именем "Unprivileged User".)

" echo ("текст") - вывод на web-страницу какого-либо текста. Чтобы вывести на web-страницу значение какой-либо переменной, достаточно просто написать ее имя внутри выводимой строки: коман-да echo "это цифра $a" выведет в web-страницу текст "это цифра 1", если ранее переменной $a присваивалось значение единицы. В случае необходимости использовать в выводимой строке кавычки или иные специальные символы перед этими символами следует ставить сим-вол "\".

" if (условие) {…команды, которые должны выполняться, если условие верно…;} else {…команды, которые должны выполняться, если условие неверно…} - команда, позволяющая выполнить то или иное действие в зависимости от верности или неверности того или иного условия. В фигурных скобках может располагаться несколько команд, разделенных точкой с запятой. В качестве условия может быть оператор сравнения "равно" - "==" (именно два знака равенст-ва!), "больше" - ">", "меньше" - "<" и их комбинации - скажем, "<=" - "меньше или равно". Можно использовать и несколько условий, взяв каждое из них, а также все вместе в скобки и разделяя знаками "&&" - "и" или "||" - "или".

Для того, чтобы выполнять различные команды в зависимости от условия, могущего принимать три или больше значений, следует ис-пользовать оператор switch (описание смотрите в руководстве), - ана-лог оператора case в VBA и некоторых других языках.

" for (начальное значение счетчика, условие продолжения цикла, изменение счетчика на каждом цикле) {...команды...;} - цикл, то есть повторение указанных в нем команд столько раз, сколько позволет условие изменения счетчика (т.е. переменной, специально выделен-ной для подсчета числа выполнений команд цикла). К примеру цикл for ($i = 1; $i <= 10; $i++) {echo $i;} выводит в web-страницу числа с 1 до 10, так как в нем изначально устанавливается значение счетчика в 1 - $i=1, каждый цикл его значение увеличивается на 1 - $i++, а продолжаться он будет до тех пор, пока значение счетчика не превы-сит 10 (т.е. пока $i<=10).

" while (условие) {...команды...} - цикл с условием. Команды в фигурных скобках выполняются до тех пор, пока выполняется усло-вие в заголовке цикла. Для того, чтобы цикл прервался, нужно, чтобы условие выполняться перестало - поэтому внутри цикла необходимо предусмотреть возможность влиять на это условие. Скажем, цикл while ($i<=10) {...команды...; $i++;} будет выполняться до тех пор, пока значение переменной $i не превысит 10 - если изначально оно было равно 1, то цикл выполнится 10 раз.

Цикл do {...команды...} while (условие) работает так же, однако ко-манды, указанные в фигурных скобках, будут выполнены по меньшей мере один раз - даже если условие выполняться не будет.

Прервать выполнение любого цикла можно оператором break - дальнейшее выполнение программы пойдет со следующей после фи-гурных скобок команды. Оператор же continue прерывает текущую стадию выполнения цикла - то есть после этого оператора дальнейшее выполнение программы начнется с очередной проверки условия заго-ловка цикла.

" switch (выражение) {case значение: ... команды…; break; case другое значение: ... команды…; break;} - оператор выбора. При его работе содержимое фигурных скобок просматривается сверху вниз, и как только будет найден оператор case со значением, совпадающим со значением выражения в заголовке оператора switch, PHP начнёт вы-полнять весь код, следующий за эти оператором, до последней фи-гурной скобки оператора switch или до первого оператора break. (Об-ратите внимание, что если команду break не указать в конце кода, от-носящегося к одному варианту значения выражения в заголовке опе-ратора switch, PHP будет выполнять код дальше - то есть тот, кото-рый принадлежит уже следующему оператору case! Это - одно из от-личий данного оператора от аналогичных в других языках програм-мирования.)

В конце оператора switch можно указать оператор default - код, стоящий после него, выполнится в том случае, если значение выраже-ния в заголовке оператора не совпадет ни с одним из значений после операторов case.

" foreach (переменная as массив) {...команды...;} - поочередное считывание всех элементов массива. Foreach считывает в указанную в его параметрах переменную все элементы указанного в них же мас-сива по очереди, выполняя каждый раз указанный после него в фи-гурных скобках код, в котором указанная переменная может исполь-зоваться. (Значения элементов массива этим оператором только счи-тываются - их модификация foreach невозможна.) Оператор foreach может быть использован только в PHP версии 4.0 и выше.


Программа на PHP может прерываться кодом web-страницы, - для этого достаточно вставить закрывающий тэг до этого кода и откры-вающий - после. Все, что находится между ними, будет выдаваться в браузер без какой-либо обработки, рассматриваясь как выводимое с помощью команды echo. Иными словами, код

<?php if ($a==1) { ?><p>Переменная а равна 1</p><?php }?>

эквивалентен коду

<?php if ($a==1) {echo "<p> Переменная а равна 1</p>";} ?>,

однако первый вариант меньше нагружает процессор компьютера, на котором расположен интерпретатор PHP.

Из сказанного также следует, что все программы на PHP, располо-женные на одной web-странице, представляют из себя одну большую программу, - несмотря на то, что они разделяются блоками обычного текста страницы. Именно поэтому переменная, обьявленная в распо-ложенном в начале страницы коде, сохраняет свое значение не только до ее конца, но и во всех присоединяемых с помощью команды in-clude файлах. Пример - на рис. 3.2.


Рис.3.2. Пример PHP-кода.

Посмотрите внимательно на код и итог его отображения. Обратите внимание, что переменная a, ко-торой присвоено значение еще в первом программном блоке левой страницы, сохранила его не только в других ее блоках, но и в про-грамме, расположенной во включаемой с помощью команды include страницы.

В PHP можно создавать функции - подпрограммы, которые можно вызывать по своим именам, при необходимости передавая им опреде-ленную информацию. Необходимы они в том случае, когда один и тот же код нужно выполнять несколько раз для разных данных, особенно если требуемое количество выполнений заранее неизвестно. Создать функцию на PHP можно, вставив в программу инструкцию function имя (переменные, в которые записываются передаваемые парамет-ры, и их тип) {...команды функции...}, а вызвать - простым указанием имени этой функции и параметров.

Помните, что переменные, созданные в функции, по умолчанию имеют установленное значение только внутри функции. Кроме того, также по умолчанию переменные, обьявленные вне функции, в ней самой никакого значения не имеют, а если надо, чтобы имели, то в начале функции их следует "подключить" командой global перемен-ная; - и лишь после этого они станут доступными в функции. Под-робнее о функциях и о переменных в них читайте в руководстве по PHP, например, с того же сайта http://php.spb.ru.

Обычно web-сервер настраивается так, что на предмет наличия программ на PHP просматриваются файлы, имеющие расширение .php, .php3, .phtml, остальные же файлы передаются в браузер пользо-вателя без поиска в них команд PHP. Делается так для более быстрой работы сервера, а также для обеспечения возможности установки на сервере разных интерпретаторов (например, SSI - Server Side Includes, в технологии, в какой-то мере предшествовавшей PHP), так как тогда каждому из интерпретаторов назначаются свои расширения для обра-ботки соответствующих файлов.

Так как PHP-код полностью исполняется на web-сервере, то в страницах, выдаваемых браузеру, он будет отсутствовать, и если кто заинтересуется вашим опытом программирования, то вам придется отправлять ему этот код по почте, так как при просмотре сайта каким-нибудь образом узнать исходный PHP-код его страниц нельзя.

Работа с формами.

Значения переменных можно передавать между различными стра-ницами сайта - с помощью использования форм. Формой называется конструкция, состоящая из поименованных элементов особых типов, заключенных между HTML-тэгами <form…> и </form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпа-дающие меню, переключатели, квадратики для отметки галочкой - checkbox'ы, а также картинки формата jpg или gif. Каждый элемент формы может иметь свое имя.

Наиболее важным свойством формы является то, что в ее заголовке - в открывающем тэге <form…> можно указать адрес какого-либо файла, и тогда при его загрузке в программный код этого файла, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме - в частности, значения всех элементов формы, как если бы эти значения были установлены в программе, расположенной в самом загружаемом файле. Таким образом можно передавать значения переменных между различными web-страницами, используя их в программном коде.

Во всех версиях PHP (Если в конфигурационном файле PHP - php.ini - параметр register_globals ус-тановлен в on) имена передаваемых переменных соответст-вуют тем именам, которые были даны элементам формы в их тэгах, а значения - соответственно значениям этих элементов: для поля ввода текста - введенному тексту, для переключателя или checkbox'а - True при отмеченном и False при неотмеченном, для рисунка - координаты указателя мыши относительно верхнего левого угла изображения, для выпадающего меню (элемент <select name="имя"><option value="text1">text</option>…</select>) - значение параметра value выбранного пункта option.

Кроме того, переменные, передаваемые через форму, помещаются в ассоциативные массивы $HTTP_POST_VARS и $HTTP_GET_VARS (Если в конфигурационном файле PHP - php.ini - параметр track_vars установ-лен в on) с именами элементов, соответствующими име-нам переменных (то есть содержимое поля ввода текста <input type=text name=qwerty size=30> окажется в элементе $HTTP_POST_VARS['qwerty']). $HTTP_POST_VARS содержит пере-менные, переданные с помощью метода POST (метод указывается в заголовке формы), а $HTTP_GET_VARS - метода GET. Различие ме-жду методами состоит в том, что при передаче данных методом GET эти данные отображаются в адресной строке браузера, а при исполь-зовании метода POST - нет.

Начиная с PHP версии 4.1, передаваемые через форму переменные помещаются еще и в массивы $_POST и $_GET. Отличие этих масси-вов от предыдущих в том, что их переменные доступны еще и во всех функциях, расположенных в программе PHP, - то есть они являются автоглобальными.

Hosted by uCoz