#1.5 php Переменные: создание, интерполяция в строках, имена переменных в переменных

стр. 29-35

Текст, отображаемый до сих пор, был неизменным, например:

<?php
echo "Привет от РНР";
?>

Но РНР предназначен далеко не только и не столько для формирования статичного текста. Для того, чтобы обрабатывать различные данные, в языке предусмотрены переменные. Переменные являются контейнерами для данных. Каждая переменная содержит определенное значение. Например, пусть требуется отобразить текущую температуру. В случае использования постоянных значений — констант — соответствующий код мог бы выглядеть следующим образом:

<?php
echo "Температура сегодня: ", 36;
?>

При использовании переменной этот же код примет следующий вид:

<?php
echo "Температура сегодня: ", $temperature;
?>

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

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

Переменная создается тогда, когда ей присваивается какое-либо значение. Для присвоения значения переменной в РНР используется оператор присваивания, виды которого подробно описаны в гл. 2. Наиболее часто употребительная форма оператора присваивания состоит из знака равенства ( = ). Ниже приведены примеры операторов присваивания, которые создают соответствующие переменные:

<?php
$temperature = 24;
$number_of_earths = 1;
$pi = 3.1415926535;
$reassurance = "Без паники!";
$message = "Доброе утро!";

Обратите внимание, что одним переменным присвоены числа, а другим — строки. В других языках программирования переменные требуют явного описания с указанием их типа, но РНР — язык с нестрогой типизацией переменных, что упрощает программирование на нем.

Замечание

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

Рассмотрим пример 1. В нем переменной $apples сперва присваивается значение $1$, которое отображается на экране. Затем значение переменной увеличивается на три, и результат снова выводится на экран.

Пример 1. Присваивание значений переменным

<HTML>
  <HEAD>
    <TITLE>Присваивание значений переменным</TITLE>
  </HEAD>
  <BODY>
    <H1>Присваивание значений переменным</H1>
    <?php
    echo "Количество яблок устанавливается в 1.<BR>";
    $apples = 1;
    echo "Число яблок: ", $apples, "<BR>";
    echo "Добавляется 3 яблока.<BR>";
    $apples = $apples + 3;
    echo "Теперь число яблок: ", $apples, "<BR>";
    ?>
  </BODY>
</HTML>

Результат выполнения этого примера приведен на ниже. Как видно, присваивать значение переменным и изменять эти значения достаточно просто.



Присваивание значений переменным

Интерполяция переменных в строках

Значение переменной может быть отображено, например, следующим способом:

$apples = 1;
echo "Число яблок: ", $apples, "<BR>";

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

<?php
$apples = 1;
echo "Число яблок: $apples <BR>";

Пример 2. повторяет пример 1, но с использованием интерполяции переменных

Пример 2. Интерполяция переменных.

<HTML>
  <HEAD>
    <TITLE>Интерполяция переменных</TITLE>
  </HEAD>
  <BODY>
    <H1>Интерполяция переменных</H1>
    <?php
    echo "Количество яблок устанавливается в 1.<BR>";
    $apples = 1;
    echo "Число яблок: $apples <BR>";
    echo "Добавляется 3 яблока.<BR>";
    $apples = $apples + 3;
    echo "Теперь число яблок: $apples <BR>";
    ?>
  </BODY>
</HTML>

Существует одна тонкость при использовании интерполяции переменных. Рассмотрим следующий пример:

<?php
$text = "news";
echo "Where's the $textpaper <BR>";
?>

Ожидается, что имя переменной $text будет заменено на ее значение. Но этого не происходит, вместо этого выдается сообщение об ошибке:

PHP Notice: Undefined variable: textpaper in C:\php\t.php on line 4

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

Пример 3. Интерполяцияпеременных в сплошном тексте.

<HTML>
  <HEAD>
    <TITLE>Интерполяция переменных</TITLE>
  </HEAD>
  <BODY>
    <H1>Интерполяция переменных</H1>
    <?php
    $text = "news";
    echo "Whehe is the {$text}paper";
    ?>
  </BODY>
</HTML>

Рис. 2 содержит результат выполнения этого примера.



Интерполяция переменных в строках

Переменные, содержащие имена переменных

РНР позволяет размещать в переменных не только простые значения, но и имена других переменных. Пусть, например, создана переменная $apples:

<?php
$apples = 4;
?>

Далее создается переменная $fruitname, которая содержит имя переменной

<?php
$apples = 4;
$fruitname = "apples";
?>

После этого к переменной $apples можно обратиться как $$fruitname:

<?php
$apples = 4;
$fruitname = "apples";
echo "Число яблок: ", $$fruitname;
?>

Для корректной интерполяции подобных переменных в строковых константах, заключенных в двойные кавычки, следует также использовать фигурные скобки, например: "{${$fruitname}}" . Пример 4 показывает использование этих приемов.

Пример 4. Переменные, содержащие имена переменных.

<HTML>
  <HEAD>
    <TITLE>Переменные, содержащие имена переменных</TITLE>
  </HEAD>
  <BODY>
    <H1>Переменные, содержащие имена переменных</H1>
    <?php
    $apples = 4;
    $oranges = 3;
    $fruitname = "oranges";
    echo "Число апельсинов: {${$fruitname}} <BR>" ;
    $fruitname = "apples";
    echo "Число яблок: {${$fruitname}} <BR>";
    ?>
  </BODY>
</HTMLL>

Результат выполнения примера отображен на рисунке ниже.



Переменные, содержащие имена переменных

Если бы фигурные скобки отсутствовали, результат выполнения примера 4 был бы следующим:

Число апельсинов: $oranges
Число яблок: $apples

Переменные, содержащие имена переменных, могут выглядеть курьезом, но на самом деле они могут быть очень полезны, что показано далее в гл. 3.