Типы переменных php. Знакомство с PHP переменными


Всем доброго времени суток. На связи Алексей Гулынин. В данной статье я бы хотел рассказать о типах переменных в php . Как и во всех языках программирования, в PHP существует понятие переменной. Если в программе что-то где-то хранится, то это хранится именно в переменной. Объявление переменной в PHP начинается со знака "$". Поначалу это может казаться непривычным, и многие ошибки вначале будут связаны с тем, что вы будете забывать ставить знак "$". Имена переменных чувствительны к регистру букв , например переменная $myvar не то же самое, что и $MyVar . В официальной документации сказано, что имена переменных могут состоять не только из латинских букв и цифр, но также и из любых символов, код которых старше 127 (даже можно использовать русские буквы), но я вам не советую этого делать, хотя бы потому, что в различных кодировках наши с вами буквы имеют разные коды. В PHP не нужно явно указывать тип переменной, как, например, в Pascal, интерпретатор PHP всё сделает сам.

Кратко опишем основные типы переменных:

1) Integer , целое число;
2) Double , вещественное число, данного числа должно хватить для большого числа математических операций;
3) String , всеми нами любимая строка;
4) Array , массив;
5) Object , объект;
6) Resourse , некоторый ресурс, который PHP обрабатывает особым образом (пример, дескриптор открытого файла);
7) Boolean , логический тип, данная переменная может принимать 2 значения: true или false;
8) NULL , специальный тип.
Все эти типы переменных я будут использовать в следующих примерах и в новых статьях.

Давайте напишем нашу с вами первую программу на языке PHP:

Данная программа выведет "Hello PHP".
Если вы не знаете, как проверить работоспособность данного скрипта, то советую вам почитать статью работа с Denwer .
Давайте поподробнее посмотрим, что здесь происходит. Конструкция на языке PHP начинается с "". Переменной $myvar мы присваиваем значение "PHP". Оператор echo выведет нам следующее сообщение в браузер "Hello PHP" .

Давайте с вами разберемся, как определить тип переменной .
Существует множество различных функций для определения типа переменной:
1) is_integer($var) . Возвращает true, если $vаr - целое число.
2) is_double($var) . Возвращает true, если $vаr - действительное число.
3) is_string($var) . Возвращает true, если $vаr является строкой.
4) is_bool($var) . Возвращает true, если $vаr имеет значение true.
5) is_numeric($var) . Возвращает true, если $var является либо числом, либо строковым представлением числа.
6) is_null($var) . Возвращает true, если $vаr хранит значение null.
7) is_array($var) . Возвращает true, если $vаr является массивом.
8) is_object($var) . Возвращает true, если $vаr содержит ссылку на объект.

Синтаксис PHP заимствован непосредствено из C. Java и Perl также повлияли на синтаксис данного языка.

Переход из HTML

Есть три способа выхода из HTML и перехода в "режим PHP кода":

Разделение инструкций

Инструкции (утверждения) разделяются также как в C или Perl - точкой с запятой.

Закрывающий тэг (?>) тоже подразумевает конец утверждения, поэтому следующие записи эквивалентны:

Типы переменных

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

  • integer - целое
  • double - число с дробной частью
  • string - строковая переменная
  • array - массив
  • object - объектная переменная
  • pdfdoc - PDF-документ (только при наличии поддержки PDF)
  • pdfinfo - PDF-инфо (только при наличии поддержки PDF)

Тип переменной обычно не устанавливается программистом; вместо этого, он определяется PHP во время выполнения программы, в зависимости от контекста в котором данная переменная используется.

Если вам нравится указывать тип переменной непосредственно, вы можете использовать для этого инструкцию либо функцию .

Учтите, что переменная может вести себя по разному в определенных ситуациях, в зависимости от того, какой тип определен для нее в данное время. Более подробно это описано в разделе .

Инициализация переменной

Для инициализации переменной в PHP вы просто присваиваите ей значение. Для большинства переменных это именно так; для массивов и объектных переменных, однако, может использоваться несколько иной механизм.

Инициализация Массивов

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

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

$names = "Jill"; // $names = "Jill" $names = "Jack"; // $names = "Jack"

Как в C и Perl, элементы массива нумеруются начиная с 0, а не с 1.

Инициализация объектов

Для инициализации объектной переменной используйте новое предписание для сопоставления данного объекта объектной переменной.

Class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar -> do_foo ();

Область Переменной

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

$a = 1; /* глобальная область */ Function Test () { echo $a; /* ссылка на переменную локальной области */ } Test ();

Этот скрипт не выдаст что-либо на выходе, поскольку инструкция echo относится к локальной версии переменной $a, значение которой присваивается не внутри этой области. Вы можете заметить, что здесь имеется некоторое отличие от языка C, в том что глобальные переменные в C автоматически действуют и внутри функций, если только они не переписываются локальными определениями. Это может вызвать некоторые проблемы, т.к. по неосторожности можно изменить глобальную переменную. В PHP глобальные переменные должны быть продекларированы глобально внутри функции, если предполагается их использование в данной функции. Например:

$a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;

Вышеописанный скрипт выдаст значение "3". Поскольку $a и $b декларируются глобально внутри функции, ссылки на данные переменные трактуются как ссылки на их глобальные версии. Нет ограничений на количество глобальных переменных, которыми можно манипулировать внутри функции.

Вторым способом доступа к переменным из глобальной области является использование специального опеределяемого PHP массива $GLOBALS. При этом предыдущий пример может быть записан как:

$a = 1; $b = 2; Function Sum () { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum (); echo $b;

Массив $GLOBALS является ассоциативным массивом, в котором имя глобальной переменной является ключом, а значение этой переменной является значением элемента массива.

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

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

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

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

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

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

Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; }

Изменяемые переменные

Иногда бывает удобно давать переменным изменяемые имена. Такие имена могут изменяться динамически. Обычная переменая устанавливается так:

Изменяемая переменная берет некое значение и обрабатывает его как имя переменной. В приведенном выше примере значение hello может быть использовано как имя переменной, посредством применения двух записанных подряд знаков доллара, т.е.:

С этой точки зрения, две переменных определены и сохранены в символьном дереве PHP: $a с содержимым "hello" и $hello с содержимым "world". Так, инструкция:

Echo "$a ${$a}";

осуществляет то же самое, что и инструкция:

Echo "$a $hello";

а именно, обе они выводят: hello world .

Чтобы использовать изменяемые переменные с массивами, необходимо решить проблему неоднозначности. Это означает, что если вы пишете $$a, то синтаксическому анализатору необходимо знать, имеете ли вы в виду использовать $a как переменую, или вы предполагаете $$a как переменную а как индекс этой переменной. Синтаксис для разрешения подобной неоднозначности такой: ${$a} для первого случая и ${$a} для второго.

Переменные вне PHP

HTML Формы (GET и POST)

Когда программой-обработчиком формы является PHP-скрипт, переменные этой формы автоматически доступны для данного скрипта PHP. Например, рассмотрим следующую форму:

Пример 5-2. Простая переменная формы

Name:

При активизации формы PHP создаст переменную $name , значением которой будет то содержимое, которое было введено в поле Name: данной формы.

PHP также воспринимает массивы в контексте переменных формы, но только одномерные. Вы можете, например, группировать взаимосвязанные переменные вместе или использовать это свойство для определения значений переменных при множественном выборе на входе:

Если PHP-атрибут track_vars включен, через установку конфигурации или директивой , тогда переменные, активизированные посредством методов POST или GET, будут также находиться в глобальных ассоциативных массивах $HTTP_POST_VARS и $HTTP_GET_VARS соответственно.

Имена переменных РИСУНКА АКТИВИЗАЦИИ

При активизации (запуске) формы можно использовать рисунок (изображение) вместо стандартной кнопки запуска, в тэге подобном этому:

Когда пользователь нажимает кнопку мыши где-либо над таким рисунком, сопровождающая форма передается на сервер с двумя дополнительными переменными, sub_x и sub_y. Они содержат координаты места нажатия кнопки мыши пользователем внутри данного рисунка. Можно отметить, что практически, реальные имена переменных передаваемые браузером, содержат точку вместо символа подчеркивания, но PHP конвертирует точку в элемент подчеркивания (underscore) автоматически.

HTTP Кукисы

PHP очевидным образом поддерживает HTTP кукисы, как это определено в . Кукисы являются механизмом хранения данных в удаленном браузере, используемым для поддержки процедуры обмена или идентификации ответа пользователя. Кукисы можно устанавливать используя функцию . Кукисы являются частью заголовка HTTP, поэтому функция должна вызываться прежде чем какие-либо передаваемые данные посылаются браузеру. Это такое же ограничение, как и для функции . Любые кукисы, посылаемые вам клиентом, автоматически преобразовываются в переменные PHP, также как данные методов GET и POST.

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

SetCookie ("MyCookie", "Testing", time()+3600);

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

Пример 5-4. Пример функции SetCookie

$Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600);

Переменные окружения

PHP автоматически создает переменные окружения, как и обычные переменные.

Echo $HOME; /* Показывает переменную окружения HOME, если она установлена. */

Хотя при поступлении информации механизмы GET, POST и Cookie также атоматически создают переменные PHP, иногда лучше явным образом прочитать переменную окружения, для того чтобы быть уверенным в получении ее правильной версии. Для этого может использоваться функция . Для установки значения переменной окружения пользуйтесь функцией .

Директивы конфигурации сервера

Изменение типа

PHP не требует явного определения типа при объявлении переменной, тип переменной определяется по контексту в котором она используется. То есть, если вы присваиваете строковое значение переменной var , var становится строкой. Если затем присвоить переменной var значение целого (числа), то она станет целым.

Примером автоматического преобразования типа в PHP может служить оператор сложения "+". Если какой-либо из оперендов является числом с дробной частью (тип double), то затем все операнды оцениваются как double и результат будет иметь тип double. Иначе, эти операнды будут интерпретированы как целые (integers) и результат будет так же иметь тип integer. Отметим, что при этом НЕ меняются типы самих операндов, меняется только оценка этих операндов.

$foo = "0"; // $foo является строкой (ASCII 48) $foo++; // $foo является строкой "1" (ASCII 49) $foo += 1; // $foo сейчас является целым (2) $foo = $foo + 1.3; // $foo сейчас имеет тип double (3.3) $foo = 5 + "10 Little Piggies"; // $foo является целым (15) $foo = 5 + "10 Small Pigs"; // $foo является целым (15)

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

Последнее обновление: 1.11.2015

PHP является языком с динамической типизацией. Это значит, что тип данных переменной выводится во время выполнения, и в отличии от ряда других языков программирования в PHP не надо указывать перед переменной тип данных.

PHP поддерживает восемь простых типа данных:

    boolean (логический тип)

    integer (целые числа)

    double (дробные числа)

    string (строки)

    array (массивы)

    object (объекты)

    resource (ресурсы)

Integer (целочисленный тип)

Представляет целое число со знаком размером в 32 бита (от -2 147 483 648 до 2 147 483 647).

$int = -100; echo $int;

Здесь переменная $int представляет целочисленный тип, так как ей присваивается целочисленное значение.

Кроме десятичных целых чисел PHP обладает возможностью использовать также двоичные, восьмеричные и шестнадцатеричные числа. Шаблоны чисел для других систем:

    шестнадцатеричные: 0

    восьмеричные: 0

    двоичные: 0b

Например:

"; echo "int_2 = $int_2
"; echo "int_8 = $int_8
"; echo "int_16 = $int_16"; ?>

Тип double (числа с плавающей точкой)

Размер числа с плавающей точкой зависит от платформы. Максимально возможное значение, как правило, составляет ~1.8e308 с точностью около 14 десятичных цифр. Например:

Тип boolean (логический тип)

Переменные логического типа могут принимать два значения: true и false или иначе говоря истина и ложь. Чаще всего логические значения используются в условных конструкциях:

"; if($foo) echo $a+$b; else echo $a-$b; $foo = false; echo "
foo = false
"; if($foo) echo $a+$b; else echo $a-$b; ?>

Выражение if() проверяет истинность выражения. В данном случае проверяется значение переменной $foo . Или оно истинно или равно true, то выполняется следующее за оператором if выражение. А если переменная или выражение в операторе if равно false , то выполняется выражение после оператора else .

Специальное значение NULL

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

Использование значения NULL поможет избежать данной ситуации. Кроме того, мы сможем проверять наличие значения и в зависимости от результатов проверки производить те или иные действия:

Константа NULL не чувствительна к регистру, поэтому мы можем написать и так:

$a=null;

Тип string (строки)

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

"; echo $result; $result = "$a+$b"; echo $result; ?>

В этом случае мы получим следующий вывод:

10+5 $a+$b

Кроме обычных символов, строка может содержать специальные символы, которые могут быть неправильно интерпретированы. Например, нам надо добавить в строку кавычку:

$text = "Модель "Apple II"";

Данная запись будет ошибочна. Чтобы исправить ошибку, мы можем сочетать различные типы кавычек ("Модель "Apple II"" или "Модель "Apple III"") или использовать слеш, чтобы ввести кавычку в строку:

$text = "Модель \"Apple II\"";

Тип resource (ресурсы)

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

Тип array (ассоциативные массивы)

Ассоциативный массив определяет набор элементов, каждый из которых представляет пару ключ=>значение. Создадим массив из 4-х элементов:

Массив создается с помощью конструкции array() , в котором определяются элементов. Далее выводим второй элемент массива. Поскольку отсчет элементов в массиве начинается с нуля, то чтобы обратиться ко второму элементу, нам надо использовать выражение $phones

Так как в массиве только четыре элемента, мы не можем использовать в качестве ключа число, большее чем 3, например, $phones .

Известно, что PHP относится к слабо типизированным языкам программирования. Что же это значит? Мы можем проводить различные операции между переменными разного типа, и получать «что-то» на выходе. С одной стороны, это удобно. Строка превращается в целое число, целое число может стать объектом, а объект плавно перейти в массив.

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

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

Повышения прав пользователя в ранних версиях WordPress путём передачи имени пользователя как массива, а не строки, в скрипт аутентификации в admin панели, или же подстановки в строку запроса вместо целых чисел (например, id новости) – специально сформированных запросов sql с целью несанкционированного доступа, создание на сайте так называемых sql инъекций.

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

  • (string) trim($str) Принимаемые параметры: $var – строка для удаления пробельных символов и символов разрыва строки. Обрезает символы конца строки и пробельные символы вначале и в конце строки, возвращает переменную строкового типа.
  • (bool) is_string($var) Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var строкой? Возвращает: true: если является, false: если не является.
  • (bool) is_numeric($var) Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var набором цифр? Возвращает: true: если является, false: если не является.
  • (bool) is_float($var) Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var вещественным числом? Возвращает: true: если является, false: если не является.
  • (bool) is_array($var) Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var массивом? Возвращает: true: если является, false: если не является.
  • (bool) is_int($var) Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var целым числом? Возвращает: true: если является, false: если не является.
  • (bool) isset($var) Принимаемые параметры: $var – переменная для проверки. Проверяет, существует ли переменная $var (любой тип данных), если существует, возвращает true, иначе возвращает false.
  • (bool) is_resource($var) Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var ресурсом? Возвращает: true: если является, false: если не является.
  • (bool) empty($var) Принимаемые параметры: $var – переменная для проверки. Проверяет, пуста ли существующая переменная или нет, возвращаемые значения: true для значений («», 0, 0.0, «0», NULL,FALSE,array()), false в остальных случаях.

Пример использования при программировании в PHP скриптах. Передаем в форму через пост запрос массив данных $user, полученный при регистрации пользователя:

Еще один пример использования в PHP скриптах. Зададим вопрос к базе данных :

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

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

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

Присвоение имени и создание переменной в PHP

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

Посмотрим на некоторые допустимые и недопустимые имена переменных PHP :

$_myName // допустимо. $myName // допустимо. $__myvar // допустимо. $myVar21 // допустимо. $_1Big // недопустимо, подчеркивание должно следовать после буквы. $1Big // недопустимо - должно начинаться с буквы или символа подчеркивания. $_er-t // недопустимо - содержит буквенно-цифровой символ (-).

Имена PHP переменных чувствительны к регистру. Это означает, что PHP считает переменную $ _myVariable отличной от переменной » $ _myvariable .

Присвоение значения переменной РНР

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

Начнем с присвоения слова «Круг » переменной с именем myShape :

$myShape = "Круг";

Мы объявили переменную с именем myShape и присвоили ей строковое значение «Круг «. Аналогичным образом можно объявить переменную, содержащую численное значение:

$numberOfShapes = 6;

Мы создаем переменную numberOfShapes и присваиваем ей числовое значение 6 . После того, как PHP переменная была создана, присвоенное ей значение может быть изменено с помощью оператора присваивания:

Доступ к PHP значениям переменных

Теперь мы должны рассмотреть, как получить доступ к текущему значению, присвоенному переменной. Например, если мы хотим вывести на экран значение, которое мы присваивали переменной numberOfShapes , нужно сослаться на него в команде echo :

Это приведет к следующему выводу в браузере:

Номер фигуры 6.

Точно так же можно отобразить значение переменной myShape :

Примеры, использованные для демонстрации доступа к значениям переменных, простые, потому что у нас всегда был пробел после имени переменной. Возникает вопрос, Что делать, если нужно поставить другие символы сразу после имени PHP переменной. Например:

То, что нам нужно в этом случае выводится следующим образом:

Круг это 6-я фигура.

К сожалению, PHP будет видеть th на конце имени переменной $ numberOfShapes как часть имени. Затем он попытается вывести значение переменной $ numberOfShapesth , которой не существует. Это приводит к тому, что значение этой переменной не отображается:

Круг это фигура.

Можно обойти эту проблему, поставив фигурные скобки ({ }) вокруг имени переменной, чтобы экранировать ее от других символов:

Что дает нам желаемый результат:

Круг это 6-я фигура.

Изменение типа РНР переменной

PHP типы переменных: целое, вещественное, логическое, массив, объект и строка. Для начала рассмотрим изменение типа переменной после ее создания.

PHP является слабо типизированным языком. Правила строго типизированного языка диктуют, что как только переменная была объявлена как определенный тип, ее тип не может быть изменен позже. В Java , например, нельзя присвоить число с плавающей точкой переменной, которая первоначально была объявлена как строка.

Слабо типизированные языки, такие как PHP и JavaScript , позволяют изменять тип переменной в любой момент существования переменной путем присвоения ей значения другого типа. Например, можно создать переменную, присвоить ей целое значение, а позже поменять на string :

Процесс динамического изменения типа переменной называется автоматическим преобразованием типов.

Проверка установлена ли переменная

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

Перевод статьи “An Introduction to PHP Variables ” был подготовлен дружной командой проекта .

Хорошо Плохо







2024 © gtavrl.ru.