Переменные в php

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

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

Но РНР предназначен далеко не только и не столько для формирования ста­тичного текста. Для того, чтобы обрабатывать различные данные, в языке пре­дусмотрены переменные.

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

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

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

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

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

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

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

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

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

Рассмотрим пример. В нем переменной $apples сперва присваивается значение 1, которое потом отображается:

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

После этого значение переменной увеличивается на три, и результат снова отображается на экране:

code: #html
$apples = $apples + 3;
echo  "Теперь число яблок:   ",   $apples,   "<BR>";
<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>

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

результат выполнения скрипта

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

Значение переменной может быть отображено, например, следующим спосо­бом:
code: #php
$apples = 1;
echo "Число яблок:   ",  $apples,   "<BR>";  

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

code: #php
$ арр1е s = 1;
echo "Число яблок:   $apples <BR>";  
code: #html
<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> 
Результат выполнения этого примера: результат выполнения скрипта

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

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

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

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

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

code: #html
 <HTML>
<HEAD>
<TITLE>Интерполяция переменных </TITLE>
</HEAD>
<BODY>
<H1>Интерполяция переменных </H1>
<?php
$text = "news";
echo "Where's the {$text}paper";
?>
</BODY>
</HTML>

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

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

code: #php
<?php
Sapples = 4;
?>   

Далее создается переменная $fгuitname, которая содержит имя переменной Sapples:

code: #php
<?php
$apples = 4; $fruitname =  "apples";
?>   

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

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

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

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

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

результат выполнения скрипта

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

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

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

Книга: PHP в примерах. Купить книгу
Автор: Стивен Хольцнер. Переводчик: С. Банников
Поделиться:

Похожие статьи: