Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 семестр / Инструм.средства / ЛЕКЦИИ / Лекция №4 Общие понятия и описание PHP.doc
Скачиваний:
78
Добавлен:
17.02.2016
Размер:
186.88 Кб
Скачать

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";