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

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

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

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

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

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

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

Переменные и выражения в PHP. Создание переменных PHP. Область действия переменной PHP

Переменные и выражения в PHP

Переменная PHP является контейнером для хранения данных. Данные, сохраняемые в переменной, называются значениями этой переменной. Переменная PHP имеет имя (идентификатор) — последовательность букв, цифр, символов подчеркивания без пробелов и знаков препинания, начинающихся обязательно с символа доллара($), за которым должна следовать буква или символ подчеркивания. Иначе говоря, в имени переменной первым символом является $, а вторым не цифры.

Имена переменных чувствительны к регистру букв: например, $my_variable — не то же самое, что $My_Variable или $MY_VARIABLE. Однако ключевые слова могут использоваться в любом регистре.

Внимание! В официальной документации сказано, что имя переменной может состоять не только из "английских" букв и цифр, но также и из любых символов, код которых старше 127, — в частности, и из "русских" букв! Однако категорически нежелательно применять кириллицу в именах переменных — хотя бы из-за того, что в различных кодировках ее буквы имеют различные коды.

Переменные в PHP — особые объекты, которые могут содержать в буквальном смысле все, что угодно. Если в программе что-то хранится, то оно всегда хранится в переменной (исключение — константа, которая, впрочем, может содержать только число или строку). Такого понятия, как указатель, в языке не существует — при присваивании переменная копируется один-в-один, какую бы сложную структуру она не имела.

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

Создание переменных PHP

Переменная PHP создается при первом ее упоминании в програмном коде с использованием присваивания ей некоторого значения и является контейнером для хранения данных. Оператор присваивания обозначается знаком равенства =. Слева от него указывается имя переменной, справа — выражение языка, возвращающее в результате вычисления некоторое значение. В простейшем случае справа от символа оператора присваивания указывается простое значение — число, строка символов в кавычках, ключевое слово, обозначающее специальное значение некоторых типов (true,false,null).

Создать переменную можно с помощью оператора присваивания = :

$имя_переменной=значение;

Рассмотрим пример:

<?php
$var="Привет всем!"; /*переменной $var присвоено строковое значение "Привет всем!"*/
$x=25.2E2; //переменной $x присвоено числовое значение 2520
echo $var . "<br>";
echo $x ."<br>";
$x=true; //переменной $x присвоено логическое значение true
echo $x
?>

В окне веб-браузера это будет выглядеть ТАК.

Одной и той же переменной можно присвоить то одно, то другое значение. Тип переменной определяется типом значения, которое она в данный момент имеет(содержит). Так в рассмотренном выше примере переменная $x сначала имела значение числового типа, а затем логического.

Не следует путать оператор присваивания с отношением равенства и соответствующей операцией сравнения. Выражение с оператором = интерпретатор вычисляет следующим образом: переменной слева от него присваивается значение, расположенное справа от него.

Значение одной переменной можно присвоить другой переменной:

<?php
$x=3;
$y=$x;
echo $y ."<br>";//значение $y равно 3
/*Переменные могут участвовать в выражениях с операторами*/
$x=5;
$y=$x+2;
echo $y;//значение $y равно 7
?>

Когда мы пишем $y=$x, то тем самым выражаем следующее: значение переменной $x присвоить переменной $y. Это так называемое присвоение по значению, при котором значение однойпеременной копируется в другую переменную.

Однако кроме этого способа в РНР возможно организовать присвоение по ссылке, при котором копирования значения не происходит, а новая переменная становится псевдонимом (еще одним именем) для той переменной, на которую она ссылается.

Для присвоения значения по ссылке используется символ & (амперсанд). Так в выражении $x=&$y переменная $x ссылается на переменную $y. При этом обращении к переменной, $x возвращает значение $y, а изменения значения $x отражается на значении $y, как и наоборот, изменение значения $y, вызывает изменение значения $x.

<?php
$x="Cаша";
$y="Катя";
$x=&$y; //значение $x равно "Катя"
$x="Миша"; //значения $x и $y равны "Миша"
echo "$x=",$x;
echo "<br>";
echo "$y=",$y;
?>

В окне веб-браузера это будет выглядеть ТАК.

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

Отображение значений переменных PHP

Значения переменных можно вывести на экран с помощью оператора echo. Вывод текущих значений переменных можно сделать несколькими способами:

  • echo $var1, $var2, $var3, . . . ,$varN; — в клиентскую область браузера выводятся значения переменных, перечисленных в операторе echo через запятую. При отображении значения, переменные следуют друг за другом без пробелов(запятые между именами переменных не отображаются);
  • echo "Переменные: $var1, $var2, $var3, . . . ,$varN"; — в этом случае выводится символьная строка (заключенная в двойные кавычки), в которых упомянуты переменные. Интерпретатор РНР выведет строку, заменив эти переменные их значениями;
  • echo 'Переменные: $var1, $var2, $var3, . . . ,$varN'; — в этом случае выводится строка так, как есть. Иначе говоря, выводится все, что указано внутри одинарных кавычек без подставок значений переменных.

Пример:

<?php
$var1="Привет";
$var2=" всем!";
echo $var1,$var2; //вывод Привет всем!
echo "<br>";
echo "$var1,$var2";//вывод Привет всем!
echo "<br>";
echo "$var1,$var2";//вывод $var1,$var2
?>

Значения некоторых типов отображаются оператором echo не всегда так, как они были заданы в коде программы. Так логическое значение true отображается как 1, а false — не отображается вовсе; числовые значения отображаются в экспотенциальной или неэкспотенциальной форме в зависимости от их величины.

Для вывода более подробной информации о переменных, которая может понадобиться при отладке программы, служит функция var_dump(список переменных). В списке переменных указывается одно или несколько имен переменных разделенных запятыми. Эта функция ничего не возвращает. Данная функция особенно полезна при выводе информации о массивах. В этом случае выводится тип переменной array, количество элементов массива и список сведений об элементах вида индекс= >элемент. Индекс может быть как числовым, так и символьным, в зависимости от того, как он был задан в определении массива.

Менее информативной, чем var_dump(), функцией вывода сведений о переменных является print_r(список_переменных). Для переменных типа "массив" эта функция выводит список вида индекс= >элемент без указания типов и других характеристик элементов. Для переменных других видов выводится только их значения.

Действия с переменными PHP

Вне зависимости от типа переменной, с ней можно делать три основных действия:

  • Присвоить значение;
  • Проверить, существует ли указанная переменная;
  • Удалить переменную.

Присвоение значения переменным PHP

Мы можем присвоить переменной значение другой переменной (или значение, возвращенное функцией), ссылку на другую переменную, либо же константное выражение (за исключением объектов, для которых вместо этого используется оператор new). Как уже говорилось, за преобразование типов отвечает сам интерпретатор. Кроме того, при присваивании старое содержимое и, что самое важное, тип переменной теряются, и она становится абсолютно точной копией своего "родителя". То есть, если мы массиву присвоим число, это сработает, однако весь массив при этом будет утерян.

Пример:

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

В данном примере переменной $$a присвоено имя переменной $a.

Или так:

<?php
$a="Привет";
$$a=" всем!";
echo "$a ${$a}"; //вывод Привет всем!
?>

Проверка существования переменных PHP

Можно проверить, существует ли (то есть, инициализирована ли) указанная переменная. Осуществляется это при помощи оператора

isset(имя_переменной1, имя_переменной2, ... , имя_переменнойN).

Например:

if(isset($myvar));
echo "Такая переменная есть. Ее значение $myvar" ;

Если переменной в данный момент не существует (то есть нигде ранее ей не присваивалось значение, либо же она была вручную удалена при помощи unset()), то isset() возвращает ложь:

<?php
if(isset($myvar));
echo "Такая переменная есть. Ее значение:".$myvar;
?>

В окне веб-браузера это будет выглядеть ТАК.

в противном случае — истину:

<?php
$myvar="Привет всем!";
if(isset($myvar));
echo "Такая переменная есть. Ее значение:".$myvar;
?>

В окне веб-браузера это будет выглядеть ТАК.

Функция empty(Переменная) проверяет наличие у переменной непустого, ненулевого значения. Возвращает true, если переменная пустая, не существует или имеет нулевое значение.

Например:

<?php
$myvar="Привет всем!";
if (isset($myvar)) echo "Существует".$myvar;
else echo "Нет";
echo "<br>";
if (empty($myvar)) echo "Пустая".$myvar;
else echo "Нет";
?>

В окне веб-браузера это будет выглядеть ТАК.

Важно помнить, что мы не можем использовать неинициализированную переменную в программе — иначе это породит предупреждение со стороны интерпретатора (что, скорее всего, свидетельствует о наличии логической ошибки в сценарии). Конечно, предупреждения можно выключить, тогда все неинициализированные переменные будут полагаться равными пустой строке. Однако я категорически не советую вам этого делать — уж лучше лишняя проверка присутствия в коде, чем дополнительная возня с "отлавливанием" возможной ошибки в будущем. Если вы все же захотите отключить это злополучное предупреждение (а заодно и все остальные), лучше использовать оператор отключения ошибок @, который действует локально (о нем мы тоже вскоре поговорим).

Удаление переменной PHP

Удаление переменной PHP реализуется оператором unset(). После этого действия переменная удаляется из внутренних таблиц интерпретатора, т. е. программа начинает выполняться так, как будто переменная еще не была инициализирована.

unset(имя_переменной) Например:
<?php
// Переменной $a еще не существует
$a="Привет всем!";
// Теперь $a инициализирована
// ... какие-то команды, использующие $a
// А теперь удалим переменную $a
unset($a);
echo $a ;
?>

Впрочем, применение unset() для работы с обычными переменными редко бывает целесообразно. Куда как полезнее использовать его для удаления элемента в ассоциативном массиве. Например, если в массиве $A нужно удалить элемент с ключом for_del, это можно сделать так:

unset($A["for_del"]); Теперь элемент for_del не просто стал пустым, а именно удалился, и последующий перебор элементов массива его не обнаружит.

Область действия переменной PHP

Областью действия (видимости, доступности) переменной PHP является тот програмный код из одного итого же файла, в котором она была определена. При этом она также видна и в РНР-кодах, включаемый в данный из внешнего файла с помощью функции include(). Внутри кода функции такие переменные не видны, если не предпринять специальных мер.

Пример: переменная $x видна во всем програмном коде, включая и код файла 14.php.

Код файла 13.php

<?php
$x=7;
?>

Включаем переменную $x в файле 14.php

<?php
include("81.php"); //включение файла
$x=$x+5;
echo $x; //вывод значения переменной $x: результат 12
?>

В окне веб-браузера это будет выглядеть ТАК.

Таким образом, переменные в РНР были бы глобальными в полном смысле этого слова, если бы не одно обстоятельство. Дело в том, что програмный код может содержать определения и вызовы функции. Если созданная во внешнем коде переменная используется еще и в коде функции, то там она будет не глобальной, как ожидается, а локальной. Это означает, что значение этой переменной, заданное во внешнем коде, не видно внутри кода функции. С другой стороны, изменения значений этой переменной внутри функции не отразятся на этой же переменной во внешнем коде. Чтобы сделать переменные, созданные во внешнем коде, доступными и внутри функций(т.е. обеспечить им настоящую глобальность), они должны быть объявлены глобальными в коде функций с помощью ключевого слова global. Кроме того, переменные внутри функций могут быть объявлены как статические(static). Статическая переменная является локальной, но сохраняет свое значение и при следующем вызове функции, где она была определена, данное значение может быть использовано.

Определение типа переменной PHP

Кроме этих трех действий существуют еще несколько стандартных функций, которые занимаются определением типа переменных и часто включаются в условные операторы. Вот они.

  • is_integer(имя_переменной) — возвращает true, если переменная — целое число.
  • is_double(имя_переменной) — возвращает true, если переменная — действительное число.
  • is_string(имя_переменной) — возвращает true, если переменная является строкой.
  • is_array(имя_переменной) — возвращает true, если переменная является массивом.
  • is_object(имя_переменной) — возвращает true, если переменная объявлена как объект.
  • is_boolean(имя_переменной) — возвращает true, если переменная определена как логическая переменная.
  • gettype(имя_переменной) — возвращает строки, соответственно, со значениями: array, object, integer, double, string, boolean или unknown type в зависимости от типа переменной.

Последнее значение возвращается для тех переменных, типы которых не являются встроенными в PHP (а такие бывают, например, при добавлении к PHP соответствующих модулей, расширяющих возможности языка).

Установка типа переменной PHP

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

settype($a,$type)

Функция пытается привести тип переменной $a к типу $type ($type — одна из строк, возвращаемых gettype(), кроме boolean). Если это сделать не удалось (например, в $a "нечисловая" строка, а мы вызываем settype ($a,"integer")), возвращает false.