- •1.3. Комментарии в рнр-сценариях
- •2. Переменные и типы данных
- •3. Константы
- •4. Операции с переменными
- •5. Выражения и операции
- •5.1. Понятие «выражение» в php
- •5.2. Операции в php
- •5.3. Строки и строковые выражения
- •6. Ссылки
- •7. Основные конструкции языка
- •7.1. Условный оператор
- •7.2. Циклы
- •7.3. Инструкция switch-case (конструкция выбора)
- •8. Собираем один скрипт из нескольких отдельных скриптов
- •8.1. Инструкции require
- •8.2. Инструкции include
- •8.3. Особенности использования include и require
- •8.4. Инструкции однократного включения include_once и require_once
- •9. Обработка ошибок
5.3. Строки и строковые выражения
Строки в апострофах и строки в кавычках
Рассмотрим небольшой пример:
Ss = "Hello";
echo "$s";
echo ' $s ' ;
Оба оператора echo выведут строки. Первый оператор echo выведет строку Hello, а второй — Ss. Между строками в кавычках и в апострофах существует большая разница. Если строка заключена в апострофы, то все символы трактуются как есть. Исключения составляют последовательности Y и \\. Первая представляет собой обыкновенный апостроф, а вторая — обратную наклонную черту.
Строки в кавычках позволяют, кроме всего прочего, вывести значение переменной, поэтому никогда не используйте строку в апострофах для этой цели. Предположим, что у нас есть переменная $а = 10. Проанализируем вывод двух операторов echo:
echo "$a"; // строка в кавычках
echo '$а'; // строка в апострофах
Первый оператор выведет 10 — значение переменной $а. Второй напечатает то, что заключено между апострофами — $а. Улавливаете разницу?
Кроме того, строки в кавычках могут содержать следующие специальные символы:
\n — символ новой строки;
\r — символы возврата каретки;
\t — символ табуляции;
\$ — знак доллара;
\" — кавычка;
\\ — обратный слэш;
\хNN — символ с кодом NN (в шестнадцатеричной системе).
Строковые операции
Строковых операций в PHP всего две:
sl.s2 — конкатенация (слияние) двух строк;
sl[n] — обращение к символу в строке.
Все остальные действия над строками выполняются стандартными функциями.
Присвоить значение строке очень просто:
s = "hello";
s = "Это большая многострочная строковая константа";
Многострочные строковые переменные
Начиная с четвертой версии PHP, появились так называемые Неге-документы. Это еще один способ записи многострочных констант. Длина строки в PHP ограничена только объемом свободной оперативной памяти, поэтому в переменную можно записать даже небольшой файл. Записать большое текстовое сообщение можно так:
$s =<<<LABEL
Текст
LABEL;
При использовании этого способа записи многострочных строковых переменных, нужно помнить три правила:
* LABEL может быть любым идентификатором.
* После LABEL и до конца строки не должно быть непробельных символов.
* После второго (завершающего) LABEL должна стоять точка с запятой.
Предположим, что нам нужно написать небольшую программу, выводящую строку «Hello world». Нет ничего проще? А я так не думаю:
<?
$а = "Hell";
echo "$ao world"; ?>
В этом случае интерпретатор сообщит, что переменная $ао не найдена. Как выйти из этой ситуации? Можно использовать операцию слияния двух строк: echo $a."o world";
А можно взять имя переменной в фигурные скобки: echo "$ao world"
ИЛИ echo "$ao world"
Однако лучше использовать первый вариант, поскольку иногда фигурные скобки могут трактоваться как спецсимволы.
Строки в обратных кавычках (вызов внешней программы) вы хотите запустить внешнюю программу и присвоить переменной результат ее работы? Нет ничего проще! Для этой цели используйте строки в обратных каиычках (они находятся под тильдой):
$directoriy= 'dir';
echo "<h1>Содержимое каталога :</h1>< BR><PRE> Sdirectory" ;
5.4. Оператор эквивалентности (===)
Иногда обычный оператор сравнения == работает не совсем корректно точнее не так, как нам хочется, в некоторых ситуациях даже получаются минн-анегдоты. Рассмотрим следующий пример:
<?
Sx = 0; // число, разно О
Ss = ""; //пустая строка
echo gettype (Sx) . " \r." ;
echo gettype($s) . "\n" ;
if ($x==$s) echo "x -s";
?>
Переменные $х и Ss не могут быть равны даже с логической точки зрения, программа сначала выводит сообщение о том, что переменная $х является целым числом (integer), а переменная $s — строкой (string). А после этого программа сообщает, что переменные равны. Все дело том, что PHP трактует одну из переменных (какую именно — не знаю, поскольку и 0, и " " — это false, вполне может быть, что интерпретатор считает логическими обе переменные), как логическую переменную, а если хотя бы одна переменная логическая, то вторая тоже считается логической. Поэтому мы получаем false==false, следовательно, программа выведет строку "x=s".
Чтобы избежать подобной ситуации, нужно использовать оператор эквивалентности = = =. Если модифицировать нашу программу так:
<?
$х = С;// число, равно О
$s — '; //пустая строка
echo gettype($x) ." \п";
echo gettype ($s) . "\г.";
if ($x===Ss) echo "x =s";
?>
то сейчас строка "x=s" выведена не будет. Проведем еще один эксперимент; с использованием массивов. Понимаю, что о массивах в PHP вы еще ничего не знаете, но сейчас просто необходимо забежать немного наперед.
<?
$А = array (' 1 '=>' 0001 ' ) ; // используются апострофы, а не кавычки.
?В = аггау('2'=>'0010') ;
if ($А == $В) echo "А= =В";
if ($A === $В) echo "A= = =В";
?>
Будет выведена первая строка, но не вторая. В версиях PHP 4.0.x и ниже массивы $А и SB преобразовывались в строки "array", которые и сравнивались. Вот из-за этого оператор == неправильно работал. Оператор = = = с самого начала лишен этого недостатка. Сейчас у меня установлена версия 4.1.2 (не самая новая), но в ней оператор == работает корректно.
Для оператора === должен быть обратный оператор !===, но его нет. Если вы напишете: if ($A !=== $В) echo "AOB"; вы получите сообщение об ошибке. Но можно обойти это неудобство так: if (!($А === $В) ) echo "AOB";
