
- •Пособие по работе в среде программирования php 4
- •1.Установка php
- •Настройка Apache для работы с php
- •Тестирование php
- •Установка дополнительных модулей
- •2. Характеристика языка php
- •Интерпретатор или компилятор?
- •Достоинства и недостатки интерпретатора
- •Использование php в Web
- •3. Переменные, константы, выражения
- •Переменные
- •Integer
- •Действия с переменными
- •1.Присвоение значения.
- •2.Проверка существования.
- •3.Уничтожение.
- •4.Определение типа переменной.
- •Константы
- •Выражения
- •Операции
- •4. Работа с данными формы
- •5. Конструкции языка
- •6. Ассоциативные массивы
- •Операции над массивами
- •1.Одинаковые ключи
- •2.Нулевой ключ
- •7. Функции и области видимости
- •8. Строковые функции
- •9. Работа с массивами
- •10. Математические функции
- •11. Работа с файлами
- •12. Работа с каталогами
- •13. Каналы и символические ссылки
Константы
Встречаются случаи, когда переменные довольно неудобно использовать для постоянного хранения каких-либо определенных величин, которые не меняются в течение работы программы. Такими величинами могут быть математические константы, пути к файлам, разнообразные пароли и т. д. Как раз для этих целей в PHP предусмотрена такая конструкция, как константа. Константа отличается от переменной тем, что, во-первых, ей нигде в программе нельзя присвоить значение больше одного раза, а во-вторых, ее имя не предваряется знаком $, как это делается для переменных. Например:
// Предположим, определена константа PI, равная 3.146
$a=2.34*sin(3*PI/8)+5; // использование константы
echo "Это число PI"; // выведет "Это число PI"
echo "Это число ".PI; // выведет "Это число 3.14"
То, что не надо писать "доллар" перед именем константы – это, конечно хорошо. Однако, как мы можем видеть из примера, есть и минусы: мы уже не можем использовать имя константы непосредственно в текстовой строке.
Предопределенные константы
Константы бывают двух типов: одни – предопределенные (то есть устанавливаемые самим интерпретатором), а другие определяются программистом. Существуют несколько предопределенных констант.
●__FILE__
Хранит имя файла программы, которая выполняется в данный момент.
●__LINE__
Содержит текущий номер строки, которую обрабатывает в текущий момент интерпретатор. Эта своеобразная "константа" каждый раз меняется по ходу исполнения программы.
●PHP_VERSION
Версия интерпретатора PHP.
●PHP_OS
Имя операционной системы, под которой работает PHP.
●TRUE или true
Эта константа нам уже знакома и содержит значение "истина".
●FALSE или false
Содержит значение "ложь".
Определение констант
Вы можете определить и свои собственные, новые константы. Делается это при помощи оператора define(), очень похожего на функцию. Вот как она выглядит (заодно мы попрактикуемся в наших условных обозначениях для описания синтаксиса вызова функции):
void define(string $name, string $value, bool $case_sen=true);
Определяет новую константу с именем, переданным в $name, и значением $value.
Если необязательный параметр $case_sen равен true, то в дальнейшем в программе регистр букв константы учитывается, в противном случае – не учитывается (по умолчанию, как мы видим, регистр учитывается). Созданная константа не может быть уничтожена или переопределена. Например:
define("pi",3.14);
define("str","Test string");
echo sin(pi/4);
echo str;
Прошу обратить внимание на кавычки, которыми должно быть обрамлено имя константы при ее определении. А также на то, что нельзя дважды определять константу с одним и тем же именем – это породит ошибку во время выполнения программы.
Проверка существования константы
В PHP существует также функция, которая проверяет, существует ли (была ли определена ранее) константа с указанным именем. Вот она.
bool defined(string $name)
Возвращает true, если константа с именем $name была ранее определена.
Выражения
Выражения – это один из "кирпичей", на которых держится здание PHP. Действительно, практически все, что вы пишете в программе – это выражение. Мне нравится следующее определение понятия "выражение": "нечто, имеющее определенное значение". И обратно: если что-то имеет значение, то это "что-то" есть выражение.
Самый простой пример выражения – переменная или константа, стоящая, скажем, в правой части оператора присваивания. Например, цифра 5 в операторе $a=5; есть выражение, т. к. оно имеет значение 5. После такого присваивания мы вправе ожидать, что в $a окажется 5. Теперь, если мы напишем $b=$a; то, очевидно, в $b окажется также 5, ведь выражение $a в правой части оператора имеет значение 5.
Нетрудно догадаться, какое оно имеет значение: 5 (тут просто не может быть никаких других вариантов, не правда ли?). А это значит, что мы можем написать что-то типа следующих команд:
$a=($b=10); // или просто $a=$b=10
При этом переменным $a и $b присвоится значение 10. А вот еще пример, уже менее тривиальный:
$a=3*sin($b=$c+10)+$d;
Что окажется в переменных после выполнения этих команд? Очевидно, то же, что и в результате работы следующих операторов:
$b=$c+10;
$a=3*sin($c+10)+$d;
Мы видим, что в PHP при вычислении сложного выражения можно (если какая-то его часть понадобится нам впоследствии) задавать переменным значения этой части прямо внутри оператора присваивания. Этот прием может действительно сильно упростить жизнь и сократить код программы, "читабельность" которой сохранится на прежнем уровне, так что советую им иногда пользоваться. Совершенно точно можно сказать, что у любого выражения есть тип его значения.
Например:
$a=10*20;
$b="".(123*3);
echo "$a:",gettype($a)," $b:",gettype($b);
// выведет "200:integer 200:string"
Чтобы преобразовать одно значение в другое (например, нам может не понравиться, что $b – типа string, хотя содержит целое число), используются операторы преобразования типов. Эти операторы доступны как в функциональной, так и в префиксной операторной форме. Например, следующие две инструкции эквивалентны:
$a = intval($b);
$a = (int)$b;
Итак, вот эти операторы:
●$b=intval(выражение) или $b=(int)(выражение)
Переводит значение выражения в целое число и присваивает его $b.
●$b=doubleval(выражение) или $b=(double)(выражение)
Переводит значение в действительное число и присваивает его $b.
●$b=strval(выражение) или $b=(string)(выражение)
Переводит значение выражения в строку.
●$b=(bool)(выражение)
Преобразует значение выражения в логический тип. То есть, после выполнения этого оператора в $b окажется либо true, либо false. Вообще-то, есть еще два хитроумных оператора (array) и (object), но эти операторы мы рассматривать не будем в силу их крайне слабой распространенности.
Логические выражения
Абсолютно любое выражение может рассматриваться как логическое в "логическом" же контексте (например, как условие для конструкции if-else). Ведь, как уже говорилось, в качестве истины может выступать любое ненулевое число, не пустая строка и т. д., а под ложью подразумевается все остальное. Для логических выражений справедливы все те выводы, которые мы сделали насчет логических переменных. Эти выражения чаще всего возникают при применении операторов >, < и == (равно), // (логическое ИЛИ), && (логическое И), ! (логическое НЕ) и других. Например:
$a = 10<5; // $a=false
$a = $b==1; // $a=true, если $b=5
$a = $b>=1&&$b<=10 // $a=true, если $b в пределах от 1 до 10
$a = !($b||$c)&&$d; // $a=true, если $b и $c ложны, а $d – истинно
Проверка истинности той или иной логической переменной осуществляется точно так же, как и любого логического выражения:
$b = $a>=1&&$a<=10; // присваиваем $b значение логического выражения
if($b) echo "a в нужном диапазоне значений";
Строковые выражения
Строки в PHP – одни из самых основных объектов. Как мы уже говорили, они могут содержать текст вместе с символами форматирования или даже бинарные данные. Определение строки в кавычках или апострофах может начинаться на одной строке, а завершаться – на другой. Вот пример, который синтаксически совершенно корректен:
$a="Это текст, начинающийся на одной строке
и продолжающийся на другой,
третьей и т. д.";
Строка в апострофах
Если строка заключена в апострофы (например, 'строка'), то она трактуется почти в точности так же, как записана, за исключением двух специальных последовательностей символов:
● последовательность \' трактуется PHP как апостроф и предназначена для вставки апострофа в строку, заключенную в апострофы;
● последовательность \\ трактуется как один обратный слэш и позволяет вставлять в строку этот символ.
Все остальные символы обозначают сами себя, в частности, символ $ не имеет никакого специального значения (отсюда вытекает, что переменные внутри строки, заключенной в апострофы, не интерполируются, т. е. их значение не подставляется).
Строка в кавычках
По сравнению с апострофами, кавычки более "либеральны". То есть, набор специальных метасимволов, которые, будучи помещены в кавычки, определяют тот или иной специальный символ, гораздо богаче. Вот некоторые из них:
● \n обозначает символ новой строки;
● \r обозначает символ возврата каретки;
● \t обозначает символ табуляции;
● \$ обозначает символ $, чтобы следующий за ним текст случайно не был интерполирован, как переменная;
● \" обозначает кавычку;
● \\ обозначает обратный слэш;
● \xNN обозначает символ с шестнадцатеричным кодом NN.
Переменные в строках интерполируются. Например:
$a="Hello";
echo "$a world!"
Этот фрагмент выведет Hello world!, т. е. $a в строке была заменена на значение переменной $a (этому поспособствовал знак доллара, предваряющий любую переменную). Давайте рассмотрим еще один пример.
$a="Hell"; // слово Hello без бу квы "o"
echo "$ao world!";
Мы ожидаем, что выведется опять та же самая строка. Но задумаемся: как PHP узнает, имели ли мы в виду переменную $a или же переменную $ao? Очевидно, никак. Запустив фрагмент, убеждаемся, что он генерирует сообщение о том, что переменная $ao не определена. Как же быть? А вот как:
$a="Hell"; // слово Hello без буквы "o"
echo $a."o world!"; // один способ
echo "{$a}o world!"; // другой способ
echo "${a}o world!"; // третий способ!
Мы видим, что существует целых три способа преодолеть проблему. Каким из них воспользоваться – дело ваше. Последний пример показывает, что в некоторых контекстах и фигурные скобки могут трактоваться как спецсимволы.
Here-документ
В четвертой версии PHP появился и еще один способ записи строковых констант, который исторически называется here-документом (встроенный документ). Фактически он представляет собой альтернативу для записи многострочных констант. Выглядит это примерно так:
$a=<<<MARKER
Далее идет какой-то текст, возможно, с переменными, которые интерполируются: например, $name будет интерполирована здесь.
MARKER;
Строка MARKER может быть любым алфавитно-цифровым идентификатором, не встречающимся в тексте here-документа в виде отдельной строки. Синтаксис накладывает 2 ограничения на here-документы:
● после <<<MARKER и до конца строки не должны идти никакие непробельные символы;
● завершающая строка MARKER; должна оканчиваться точкой с запятой, после которой до конца строки не должно быть никаких инструкций.
Эти ограничения настолько стесняют свободу при использовании here-документов, так что, думаю, вам стоит совсем от них отказаться. Например, следующий код работать не будет, как бы нам этого ни хотелось (функция strip_tags() удаляет тэги из строки):
echo strip_tags(<<<EOD);
Какой-то текст с <b>тэгами </b> – этот пример НЕ работает!
EOD;
Надеюсь, в будущем разработчики PHP изменят ситуацию к лучшему, но пока они этого не сделали.
Вызов внешней программы
Последняя строковая "константа" – строка в обратных апострофах (например, команда`), заставляет PHP выполнить команду операционной системы и то, что она вывела, подставить на место строки в обратных апострофах. Вот так, например, мы можем в системе Windows узнать содержимое текущего каталога, которое выдает команда dir:
$st=`dir`;
echo "<pre>$st</pre>";
Впрочем, если в настройках PHP установлен так называемый безопасный режим, который ограничивает возможность запуска внешних программ лишь некоторыми, указанная команда может и не сработать.