Часть 2

advertisement
Лекция №2 Введение в язык PHP
2.1 Введение в язык PHP
PHP - язык создания сценариев, который давно перерос свое название.
Дело в том, что PHP - это аббревиатура от слов Personal Home Page. Первая
версия PHP была создана Расмусом Лердорфом в 1994 г. и представляла
собой набор инструментов для отслеживания посетителей Web-страницы. Со
временем PHP из набора инструментов превратился в полноценный язык
программирования, а его название было изменено как рекурсивное
образование PHP HyperText Preprocessor (препроцессор гипертекста PHP).
PHP - это серверный язык создания сценариев. Конструкции PHP,
вставленные в HTML-текст, выполняются сервером при каждом посещении
страницы. Результат их обработки вместе с обычным HTML-текстом
передается браузеру.
2.2 Правила написания программ PHP
Текст программы на PHP состоит из последовательности операторов.
Именно
в
такой
последовательности
операторы
и
исполняются
интерпретатором (браузером). Особенности записи программ на языке PHP:
- Синтаксис языка PHP близка очень близок языку С++;
- Один оператор в PHP может быть разбит на несколько строк, или,
наоборот, в одной строке может быть несколько операторов;
- В программе отдельные операторы записываются через точку с
запятой (допускается не ставить ; если оператор является в строке
последним);
- PHP не имеет жестких требований к форматированию текста
программы, таким образом возможно использование символов перевода
строки и отступов для придания тексту программы лучшей читабельности;
- Однострочные комментарии в JavaScript записываются после
символов //, многострочные – между символами /* */.
PHP-программы состоят из простого текста, поэтому набирать их
можно в любом текстовом редакторе. Популярные HTML-редакторы имеют
встроенную поддержку для редактирования PHP-программ.
Расширение файлов PHP-программ по умолчанию в PHP4 - .php. На
основании этого расширения сервер распознает файл как PHP-программу и
запускает интерпретатор.
PHP-программа должна быть отделена от обычного HTML-текста.
Существует четыре стиля обрамления PHP-кода(табл.1):
Таблица.1
Стиль
Сокращенный
XML (стандартный)
ASP
SCRIPT (программный)
Открывающийся тег
<?
<?php
<%
<SCRIPT
LANGUAGE="php">
При помощи тега SCRIPT
<script language="PHP">
echo "Hello, world!";
</script>
При помощи конструкции <? … ?>
<?
echo "Hello, world!";
?>
При помощи конструкции < php … ?>
< php
echo "Hello, world!";
?>
При помощи конструкции <%… %>
<%
echo "Hello, world!";
%>
Закрывающийся тег
?>
?>
%>
</SCRIPT>
2.3 Типы данных
PHP поддерживает восемь простых типов данных:
Четыре скалярных типа:
- boolean (двоичные данные);
- integer (целые числа) ;
- float (числа с плавающей точкой или 'double');
- string (строки).
Два смешанных типа:
- array (массивы);
- object (объекты).
И два специальных типа:
resource (ресурсы);
NULL ("пустые").
Существуют также несколько псевдотипов:
- mixed (смешанные);
- number (числа);
- callback (обратного вызова).
Тип данных при объявлении переменной не указывается. Тип
присваивается переменной только тогда, когда ей присваивается какое-либо
значение. Имена переменных в программе всегда должны начинаться с
символа $, например:
$x=1;
$y=”string”;
Тип boolean (булев или логический тип)
Этот простейший тип выражает истинность значения, то есть
переменная этого типа может иметь только два значения – истина TRUE или
ложь FALSE.
Чтобы определить булев тип, используют ключевое слово TRUE или
FALSE. Оба регистронезависимы.
<?php
$test = True;
?>
Тип integer (целые)
Этот тип задает число из множества целых чисел Z = {..., -2, -1, 0, 1, 2,
...}. Целые могут быть указаны в десятичной, шестнадцатеричной или
восьмеричной системе счисления, по желанию с предшествующим знаком «» или «+».
Для
использования восьмеричной системы счисления, необходимо
поставить перед числом число 0 , для использования шестнадцатеричной
системы нужно поставить перед числом 0x.
<?php
# десятичное число
$a = 1234;
# отрицательное число
$a = -123;
# восьмеричное число (эквивалентно
# 83 в десятичной системе)
$a = 0123;
# шестнадцатеричное число (эквивалентно
# 26 в десятичной системе)
$a = 0x1A;
?>
Тип float (числа с плавающей точкой)
Числа с плавающей точкой (они же числа двойной точности или
действительные числа) могут быть определены при помощи любого из
следующих синтаксисов:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
Тип string (строки)
Строка – это набор символов. В PHP символ – это то же самое, что
байт, это значит, что существует ровно 256 различных символов. Это также
означает, что PHP не имеет встроенной поддержки Unicode. В PHP
практически не существует ограничений на размер строк, поэтому нет
абсолютно никаких причин беспокоиться об их длине.
Строка в PHP может быть определена тремя различными способами:
- с помощью одинарных кавычек;
- с помощью двойных кавычек;
- heredoc-синтаксисом.
Простейший способ определить строку – это заключить ее в одинарные
кавычки «'». Чтобы использовать одинарную кавычку внутри строки, как и во
многих других языках, перед ней необходимо поставить символ обратной
косой черты «\», т. е. экранировать ее. Если обратная косая черта должна
идти перед одинарной кавычкой либо быть в конце строки, необходимо
продублировать ее «\\'».
Если внутри строки, заключенной в одинарные кавычки, обратный
слэш «\» встречается перед любым другим символом (отличным от «\» и «'» ),
то он рассматривается как обычный символ и выводится, как и все
остальные. Поэтому обратную косую черту необходимо экранировать,
только если она находится в конце строки, перед закрывающей кавычкой.
В PHP существует ряд комбинаций символов, начинающихся с символа
обратной косой черты. Их называют управляющими последовательностями,
и они имеют специальные значения.
В отличие от двух других синтаксисов, переменные и управляющие
последовательности для специальных символов, встречающиеся в строках,
заключенных в одинарные кавычки, не обрабатываются
Если строка заключена в двойные кавычки «"», PHP распознает
большее количество управляющих последовательностей для специальных
символов. Некоторые из них приведены в таблице 3.
Таблица 3.
Управляющие последовательности
Последовательность
Значение
\n
Новая строка (LF или 0x0A (10) в ASCII)
\r
\t
\\
Возврат каретки (CR или 0x0D (13) в ASCII)
Горизонтальная табуляция (HT или 0x09 (9) в ASCII)
Обратная косая черта
\$
Знак доллара
\"
Двойная кавычка
Самым важным свойством строк в двойных кавычках является
обработка переменных
Тип object (объекты)
Объекты – тип данных, пришедший из объектно-ориентированного
программирования (ООП). Согласно принципам ООП, класс – это набор
объектов, обладающих определенными свойствами и методами работы с ним,
а объект соответственно – экземпляр класса. Например, программисты – это
класс людей, которые пишут программы, изучают компьютерную литературу
и, кроме того, как все люди, имеют имя и фамилию. Теперь, если взять
одного конкретного программиста, Александра Иванова, то можно сказать,
что он является объектом класса программистов, обладает теми же
свойствами, что и другие программисты, тоже имеет имя, пишет программы
и т.п.
В PHP для доступа к методам объекта используется оператор ->. Для
инициализации объекта используется выражение
переменной экземпляр объекта.
new, создающее в
<?php
//создаем класс людей
class Person
{
// метод, который обучает человека PHP
function know_php()
{
echo "Теперь я знаю PHP";
}
}
$bob = new Person; // создаем объект
// класса человек
$bob -> know_php(); // обучаем его PHP
?>
Resource (ресурсы)
Ресурс – это специальная переменная, содержащая ссылку на внешний
ресурс (например, соединение с базой данных). Ресурсы создаются и
используются
специальными
функциями
(например,
mysql_connect(),
pdf_new() и т.п.).
NULL ("пустые")
Специальное значение NULL говорит о том, что переменная не имеет
значения. Переменная считается NULL, если:
- ей была присвоена константа NULL ($var = NULL);
- ей еще не было присвоено какое-либо значение;
- она была удалена с помощью unset().
Существует только одно значение типа NULL – регистронезависимое
ключевое слово NULL.
Псевдотип Mixed (смешанный)
Mixed говорит о том, что параметр может принимать множество (но не
обязательно все) типов.
Это может быть целое или дробное число, строка, массив или объект...
Например, параметр типа mixed имеет стандартная функция gettype() или
функция settype(). Если написано, что функция возвращает mixed, это
значит, что тип результата зависит от операндов и уточняется при описании
функции.
А вообще, при написании функций не нужно набирать имена типов!
Они нужны только для того, чтобы уточнить синтаксис какой-то функции.
Псевдотип Number (числа)
Псевдотип number говорит о том, что параметр может быть либо
integer, либо float.
Псевдотип Callback (обратный вызов)
Некоторые функции, такие как call_user_func() или usort() принимают
в качестве параметра определенные пользователем callback-функции.
Callback-функции могут быть не только простыми функциями, но также
методами объектов, включая статические методы классов.
PHP-функция передается просто как строка ее имени. Можно передать
любую
встроенную
или
определенную
пользователем
функцию
за
исключением array(), echo(), empty(), eval(), exit(), isset(), list(), print() и
unset().
Метод созданного объекта передается как массив, содержащий объект
в элементе с индексом 0 и имя метода в элементе с индексом 1.
Методы статических классов также могут быть переданы без создания
экземпляра объекта передачей имени класса вместо имени объекта в
элементе с индексом 0.
Преобразования типов данных
Для преобразования переменной к конкретному типу нужно перед
переменной указать в скобках нужный тип. Например, для преобразования
переменной $a=0.5 к целому типу необходимо написать (integer)(0.5) или
(integer) $a или использовать сокращенную запись (int)(0.5). Возможность
явного приведения типов по такому принципу существует для всех типов
данных (однако, не всегда значение одного типа можно перевести в другой
тип). Мы не будем углубляться во все тонкости приведения типов, поскольку
PHP делает это автоматически в зависимости от контекста.
В ситуациях, когда требуется конкретный тип данных, например при
выполнении операции
математического деления, PHP автоматически
выполнит преобразование типов данных. Так, если у вас имеется строка из
одного символа "2", она будет преобразована в целое число 2. Такие
преобразования - практически всегда именно то, что вам и требовалось от
PHP, и он делает это незаметно для вас.
2.4 Массивы PHP
Основное назначение массивов в PHP - организация групп связанных
значений. Каждый элемент массива имеет индекс (ключ) и значение. Индекс
элемента массива указывается в квадратных скобках после имени массива.
Для того, чтобы обратиться к пятому элементу массива $array1, надо
написать:
$array1[5]
Нужно помнить, что по умолчанию массив начинается не с первого
элемента, а с нулевого.
Индекс может быть как числом, так и текстовой строкой. Массив со
строковыми индексами называют ассоциативным, а сами индексы - именами
элементов. Например, цены на товары хранятся в ассоциативном массиве
$prices, индексами которого являются наименования товаров. Чтобы
получить значение цены на конкретный товар, надо написать:
$prices["яблок 20 шт. 2 сорт"]
Значение элемента массива может иметь любой тип. Возможна
организация многомерных массивов, так как элемент массива может в свою
очередь являться массивом. Примеры обращений к элементам многомерных
массивов:
$array3[0][4][1]
$цены["фрукты"]["ананас"]
$список[1]["фамилия"]
Тип массив введен в JavaScript для возможности манипулирования
разными объектами: это список всех гипертекстовых ссылок страницы,
список всех картинок на странице, список, список всех элементов формы и
т.п. Пользователь может создать и свой собственный массив, используя
конструктор Array(). Например:
new_array = new Array();
new_array5 = new Array(5);
colors = new Array ("red","white","blue")
Размерность массива может динамически изменяться. Можно сначала
определить массив, а потом присвоить одному из его элементов значение.
Как только это значение будет присвоено, изменится и размерность массива:
colors = new Array();
colors[5] = "red"
В данном случае массив будет состоять из 6 элементов, т.к. первым
элементом массива считается элемент с индексом 0.
Перечень основных свойств и методов массивов приведен в табл. 3.
Таблица 3.
Объект
length
join
reverse
sort
Значение
число элементов массива
объединяет элементы массива в строку символов, в
качестве аргумента в этом методе задается
разделитель, например: string = acolors.join("+")
изменяет порядок элементов массива на обратный
сортирует элементов массива в порядке возрастания
Просмотр массива в цикле
Для итерационного просмотра содержимого массива служит функция
foreach. С ее помощью можно просмотреть и простой (проиндексированный
числами) массив, и ассоциативный, и многомерный.
Управление массивами.
Для
управление
массивами
в
PHP
существует
целый
ряд
специализированных функций. Наиболее употребимыми являются:
- array_merge() - объединение (слияние) массивов. Последующее
значение элемента перекрывает предыдущее, если ключи строковые и
одинаковые.
- array_shift() - удаление первого элемента.
- array_pop() - удаление последнего элемента.
- array_push() - добавление элементов в конец массива.
- array_unshift() - добавление элементов в начало массива.
- array_slice() - выделение фрагмента массива.
Имеется три параметра: сам массив, смещение и длину выделяемого
фрагмента. При положительном смещении отсчет выполняется от начала
массива, при отрицательном - от конца. При положительной длине
результирующий фрагмент будет содержать заданное число элементов. При
отрицательной длине последним элементом фрагмента станет тот, который
находится на указанном расстоянии от конца массива. Если параметр
опущен, то фрагмент будет содержать все элементы от начального смещения
и до конца массива.
Сортировки
Сортировать можно как простые, так и ассоциативные массивы. Для
сортировки массивов в PHP существуют определенные функции:
sort() - сортирует массив в алфавитном порядке, если хотя бы один из
его элементов является строкой, и в числовом порядке, если все его элементы
– числа;
rsort() - работает как sort( ), но в обратном порядке;
asort() - сортирует ассоциативный массив; работает как sort( ), но
сохраняет имена элементов;
arsort() - работает как asort( ), но в обратном порядке;
ksort() - сортирует ассоциативный массив по именам элементов;
krsort() - работает как ksort( ), но в обратном порядке.
Пример кода приведен ниже:
<html>
<head>
<title>Сортировка ассоциативного массива</title>
</head>
<body>
<?php
$a = array("первый" => 6, "второй" => 2, "третий" => 1);
echo "\$a:<br>"
asort ($a);
echo "asort (\$a):<br>"
foreach ($a as $k => $t) echo " $k = $t<br>";
ksort ($a);
echo "ksort (\$a):<br>"
foreach ($a as $k => $t) echo "$k = $t<br>";
?>
</body>
</html>
РЕЗУЛЬТАТ
$a:
первый = 6
второй = 2
третий = 1
asort ($a):
третий = 1
второй = 2
первый = 6
ksort ($a):
второй = 2
первый = 6
третий = 1
Поиск элемента
Для проверки наличия элемента в массиве существуют функции:
- in_array() - если элемент найден, возвращает true, иначе - false;
- array_search() - если элемент найден, возвращает его ключ, иначе false.
<html>
<head>
<title>Поиск элемента в массиве</title>
</head>
<body>
<?php
$a = array("первый" => 6, "второй" => 2, "третий" => 1);
if (in_array (2, $a)) echo "2 нашли!<br>";
echo "ключ найденного элемента - ".array_search(2, $a);
?>
</body>
</html>
РУЗУЛЬТАТ
2 нашли!
ключ найденного элемента – второй
Возврат значений
Для возврата значений из функции используется оператор return.
Можно вернуть несколько значений, если применить список list().
Возвращаемое значение может быть любого типа, включая списки и
объекты. Когда интерпретатор встречает команду return в теле функции, он
немедленно прекращает ее исполнение и переходит на ту строку, из которой
была вызвана функция.
В результате своей работы функция также может возвращать ссылку на
какую-либо
переменную.
Это
может
пригодиться,
если
требуется
использовать функцию для того, чтобы определить, какой переменной
должна быть присвоена ссылка. Чтобы получить из функции ссылку, нужно
при объявлении перед ее именем написать знак амперсант (&) и каждый раз
при вызове функции перед ее именем тоже писать амперсант (&). Обычно
функция возвращает ссылку на какую-либо глобальную переменную (или ее
часть – ссылку на элемент глобального массива), ссылку на статическую
переменную (или ее часть) или ссылку на один из аргументов, если он был
также передан по ссылке.
Глобальные переменные
Чтобы переменная, созданная вне функции, была доступна внутри
функции, надо объявить ее глобальной с помощью инструкции global.
Пример кода приведен ниже:
global $var1, $var2; ";
echo "вне функции $a=',$a,', ";
Test_g();
?>
РЕЗУЛЬТАТ
вне функции $a=1, в результате работы
функции $a=2
вне функции $a=2, в результате работы
функции $a=4
Статистические переменные
Чтобы переменная сохраняла свое значение между вызовами функции,
нужно объявить ее статической с помощью инструкции static.
Пример кода приведен ниже:
static $var1, $var2;
Статической переменной может быть присвоено любое значение, но не
ссылка.
2.4 Как работают сценарии? Языки сценариев
Что происходит, когда вы открываете в браузере (Internet Explorer,
Opera, FireFox или любой другой) страницу какого-нибудь сайта?
- браузер, он же веб-клиент, запрашивает страницу, обращаясь к вебсерверу (чаще всего это Apache, реже — IIS).
- если веб-сервер обнаруживает на запрошенной странице обращения к
сценариям, то обращается к их интерпретаторам, которые выполняют
сценарии и формируют на их основе или всю страницу, или отдельные ее
фрагменты.
- веб-сервер отсылает сформированную страницу на клиентскую
сторону, то есть в окно браузера посетителя сайта.
Собственно, динамические сайты как раз и отличаются от статических
тем, что без второго этапа не обойтись. Существенная часть различий между
языками сценариев определяются именно тем, как они выполняют этот этап.
Ну и, разумеется, синтаксис тоже играет роль.
Наиболее
распространенные
языки
сценариев
со
свободно
распространяемыми кодами для веб-сервера Apache - PHP, Perl и Python. Все
они достаточно гибкие и
допускают подключение новых модулей,
библиотек и т. п. Все они выполняются на стороне сервера. Это и
обеспечивает быстродействие (из-за возможности использовать ресурсы
мощных серверов), и гарантирует исполнение (пользователь не может
отключить выполнение программы), и
не позволяет посетителям сайта
видеть исходные коды сценариев.
Исключительная же популярность языка PHP связана с тем, что, в
отличие,
скажем,
от
Perl,
он
позволяет
внедрять
текст
сценария
непосредственно в HTML-текст страницы и выполнять сценарий в контексте
основного процесса обработки HTML.
Как PHP-сценарии встраиваются в HTML-страницу?
Существует несколько синтаксически различных конструкций для
внедрения PHP-кода в HTML-текст страницы. Самый употребляемый из них:
<?php
...
?>
Все,
что
будет
написано
вместо
троеточия
между
этими
окаймляющими тегами, и есть PHP-сценарий.
Этот сценарий выполнится целиком на стороне веб-сервера. В
результате выполнения будет создан фрагмент HTML-текста, который и
будет показан пользователю. Даже любопытный пользователь, открыв у себя
в браузере исходный код HTML-страницы, эти теги, в отличие от кода на
JavaScript, не увидит. Так, в этом простейшем примере
<HTML>
<BODY>
<?php
echo
("<P>Журнал
игры»</B></P>");
?>
</BODY>
</HTML>
<B>«Лучшие
компьютерные
вместо блока PHP-сценария в ходе серверной обработки возникнет
HTML-строка.
На страницу эту строку выведет встроенная функция echo, синтаксис
которой достаточно понятен. Именно с такой строкой страница вернется в
браузер к читателю сайта.
Хотя PHP-сценарии и можно встраивать в HTML-страницы, они могут
существовать и автономно, в отдельных файлах. Это очень удобно для
создания больших сайтов – общий код хранится в одном экземпляре. Что
самое важное – при этом и ошибки исправлять приходится только в одном
месте.
2.5 Контрольные вопросы
1. Основные правила при написании программ PHP?
2. Какие основные стили подключения PHP-кода?
3. Какие типы данных поддерживает PHP
4. Какие правила создания массивов вы знаете?
5. Для чего используется Array()?
6. Перечислите основные свойства и методы массивов?
7. Назовите функции для сортировки?
8. Какие функции существуют для поиска элемента в массиве?
9. Что значит глобальные и статические переменные?
Download