ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

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

Выражения PHP. Вызов внешней программы PHP

Вызов внешней программы

Выражения PHP — это один из "кирпичей", на которых держится здание PHP. Действительно, практически все, что вы пишете в программе — это выражение. Самый простой пример выражения — переменная или константа, стоящая, скажем, в правой части оператора присваивания. Например, цифра 5 в операторе

$a=5;

есть выражение, т. к. оно имеет значение 5. После такого присваивания мы вправе ожидать, что в $a окажется 5. Теперь, если мы напишем

$b=$a;

то, очевидно, в $b окажется также 5, ведь выражение $a в правой части оператора имеет значение 5.

Выходит, что $b=$a — тоже выражение! И оно имеет значение: 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.

Логические выражения PHP

Логические выражения — это выражения, у которых могут быть только два значения: ложь и истина (или, что почти то же самое, 0 и 1). Что, поверили? Напрасно — на самом деле абсолютно любое выражение может рассматриваться как логическое в "логическом" же контексте (например, как условие для конструкции if-else). Ведь, как уже говорилось, в качестве истины может выступать любое ненулевое число, не пустая строка и т. д., а под ложью подразумевается все остальное.

Для логических выражений справедливы все те выводы, которые мы сделали насчет логических переменных. Эти выражения чаще всего возникают при применении операторов >, < и = = (равно), || (логическое ИЛИ), && (логическое И), ! (логическое НЕ) и других.

Например:

$a=10*20;
$b="".(123*3);
echo "$a:",gettype($a)," $b:",gettype($b); // выведет "200:integer 200:string"

Как осуществляется проверка истинности той или иной логической переменной? Да точно так же, как и любого логического выражения:

$b = $a>=1&&$a<=10; // присваиваем $b значение логического выражения
if($b) echo "a в нужном диапазоне значений";

Строковые выражения PHP

Строки в PHP — одни из самых основных объектов. Как мы уже говорили, они могут содержать текст вместе с символами форматирования или даже бинарные данные. Определение строки в кавычках или апострофах может начинаться на одной строке, а завершаться — на другой.

Вот пример, который синтаксически совершенно корректен:

<?php
$a="Это текст, начинающийся на одной строке
и продолжающийся на другой,
третьей и т. д."
;
echo $a;
?>

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

Строка в апострофах

Начнем с самого простого. Если строка заключена в апострофы (например, 'строка'), то она трактуется почти в точности так же, как записана, за исключением двух специальных последовательностей символов:

  • последовательность \' трактуется PHP как апостроф и предназначена для вставки апострофа в строку, заключенную в апострофы;
  • последовательность \\ трактуется как один обратный слэш и позволяет вставлять в строку этот символ.

Все остальные символы обозначают сами себя, в частности, символ $ не имеет никакого специального значения (отсюда вытекает, что переменные внутри строки, за иключенной в апострофы, не интерполируются, т. е. их значение не подставляется).

Строка в кавычках

По сравнению с апострофами, кавычки более "либеральны". То есть, набор специальных метасимволов, которые, будучи помещены в кавычки, определяют тот или иной специальный символ, гораздо богаче. Вот некоторые из них:

  • \n — обозначает символ новой строки;
  • \r — обозначает символ возврата каретки;
  • \t — обозначает символ табуляции;
  • \$ — обозначает символ $, чтобы следующий за ним текст случайно не был интерполирован, как переменная;
  • \" — обозначает кавычку;
  • \\ — обозначает обратный слэш;
  • \xNN — обозначает символ с шестнадцатеричным кодом NN.

Переменные в строках интерполируются.

Например:

<?php
$a="Привет";
echo "$a всем!";
?>

Этот фрагмент выведет Привет всем!, т. е. $a в строке была заменена на значение переменной $a (этому поспособствовал знак доллара, предваряющий любую переменную).

Here-документ

В четвертой версии PHP появился и еще один способ записи строковых констант, который исторически называется here-документом (встроенный документ). Фактически он представляет собой альтернативу для записи многострочных констант. Выглядит это примерно так:

$a=<<<MARKER
Далее идет какой-то текст,
возможно, с переменными, которые интерполируются:
например, $name будет интерполирована здесь.
MARKER;

Строка MARKER может быть любым алфавитно-цифровым идентификатором, не встречающимся в тексте here-документа в виде отдельной строки. Синтаксис накладывает 2 ограничения на here-документы:

  • после <<<MARKER и до конца строки не должны идти никакие непробельные символы;
  • завершающая строка MARKER; должна оканчиваться точкой с запятой, после которой до конца строки не должно быть никаких инструкций.

Эти ограничения настолько стесняют свободу при использовании here-документов, так что, думаю, нам стоит совсем от них отказаться.

Вызов внешней программы PHP

Последняя строковая "константа" — строка в обратных апострофах (например, `команда`), заставляет PHP выполнить команду операционной системы и то, что она вывела, подставить на место строки в обратных апострофах. Вот так, например, мы можем в системе Windows узнать содержимое текущего каталога, которое выдает команда dir:

<?php
$st=`dir`;
echo "<pre>$st</pre>";
?>

Впрочем, если в настройках PHP установлен так называемый безопасный режим, который ограничивает возможность запуска внешних программ лишь некоторыми, указанная команда может и не сработать.