Синтаксис: типы переменных

Материал из PhpWiki.

Перейти к: навигация, поиск

Типы данных

PHP поддерживает следующие типы данных:

  • integer (целочисленные)
  • floating-point numbers или double (числа с плавающей запятой)
  • string (строки, текст)
  • array (массивы)
  • object (обьекты)

Преобразование типов происходит следующим образом. Если переменной приравнивается строка (текст в кавычках), то эта переменная становится строковой. Если же с ней совершается одна из многих математических функций или она приравнивается численной переменой, она становится численной, причем, если приравнивается не целому значению, то станет типом double. Пример:

$foo = "0"; // $foo строка (ASCII 48) 
$foo++; // $foo тоже строка "1" (ASCII 49)
$foo += 1; // $foo теперь integer (2)
$foo = $foo + 1.3; // $foo теперь double (3.3)
$foo = 5 + "10 поросят"; // $foo теперь снова integer (15)
$foo = 5 + "10 ящиков"; // $foo и по-прежнему integer (15)

Значение в скобках – результирующее значение переменной. Преобразовывать типы можно стиле C:

$foo = 10; // $foo это integer
$bar = (double) $foo; // $bar это double

Разрешенные преобразования:

  • (int), (integer) - cast to integer
  • (real), (double), (float) - cast to double
  • (string) - cast to string
  • (array) - cast to array
  • (object) - cast to object

Кстати, определить тип переменной можно функциями gettype(), is_long(), is_double(), is_string(), is_array() и is_object().

Использование переменных. Области видимости.

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

$a = 1; /* глобальное определение */
Function Test () {
$a=2;
echo $a; /* локальная переменная */
}
Test ();
echo $a;

Таким образом в функции используется локальная, собственная переменная, и результатом программы будет вывод чисел 2 и 1, а не 2 и 2, как некоторые могли подумать. Ну а если вы хотите в функции использовать глобальные переменные, необходимо сделать так (декларировать с помощью оператора global):

$a = 1; /* глобальное определение */
Function Test () {
global $a;
$a=2;
echo $a; /* локальная переменная */
}
Test ();
echo $a;

Теперь в функции вы переопредилили глобальную переменную, и вывод будет: числа 2 и 2. Но есть и другой способ добраться до глобально-определенных данных – через ассоциативный массив $GLOBALS[]. Пример предыдущей программы, реализованный новым способом:

$a = 1; /* глобальное определение */
Function Test () {
$GLOBALS["a"]=2;
echo $a; /* локальная переменная */
}
Test ();
echo $a;

Обратите внимание: переменная в массиве указывается без символа $

Статические переменные

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

function Test ()
{
$a = 0;
echo $a;
$a++;
}

Эта функция бесполезна как счетчик. При каждом вызове переменная $a будет установлена в 0 и выведена на печать. $a++ увеличит переменную а на 1, но значение переменной $a будет утеряно после выхода из функции. Надо объявить переменную $a как статическую для того, чтобы она выполняла роль счетчика, и ее значение не терялось после завершения функции:

function Test()
{
static $a = 0;
echo $a;
$a++;
}

Теперь при каждом вызове функции Test() она будет выводить на печать значение переменной $a и увеличивать его на 1.

Статические переменные ведут себя точно так же при рекурсивном вызове функций. Функция называется рекурсивной, если она вызывает саму себя. Вы должны быть очень аккуратны при написании рекурсивных функций, поскольку можно получить бесконечную рекурсию при неправильном подходе. Вы должны быть уверены в том, что ваша рекурсия будет прервана в какой-либо момент. Следующий пример демонстрирует рекурсивный счетчик до 10, используя статическую переменную $count для того, чтобы прервать рекурсию.

function Test() {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}
Copyright http://phpclub.ru/faq/
Ссылки
Реклама