Тема 2. Переменные в PHP

Опубликовано пользователем Бессонов Л.В. 07.02.2010г.

PHP является Си-подобным языком, но обозначение переменных он унаследовал из языка PERL. Поэтому имя переменной в PHP начинается со знака $.

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

Присваивание в PHP реализуется знаком =. Также как и в языке Си, в PHP есть сокращённые виды присваиваний +=, -=, *= и др.

Типы данных

Целые числа (int)

  1. <?php
  2. $a = 1234; // десятичное число
  3. $a = -123; // отрицательное число
  4. $a = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе)
  5. $a = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
  6. ?>

Дробные числа (float)

  1. <?php
  2. $a = 1.234;
  3. $b = 1.2e3; // 1.2 x 10^3
  4. $c = 7E-10; // 7.0 x 10^-10
  5. ?>

Строки (string)

Строка — это набор символов. В PHP символ это то же самое, что и байт, это значит, что возможно ровно 256 различных символов.

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

Замечание 2. PHP позволяет использовать многобайтовые кодировки, в которых один символ кодируется двумя байтами. В этом случае для работы со строкой требуется использование строковых функций из специальной библиотеки Multi-byte strings.

Строки в PHP можно определить тремя способами: одинарными кавычками, двойными кавычками и heredoc синтаксисом (многострочная строка).

  1. <?php
  2.  
  3. print 'это простая строка';
  4.  
  5. print 'Также вы можете вставлять в строки
  6. символ новой строки таким образом,
  7. поскольку это нормально';
  8.  
  9. // Выведет: Однажды Арнольд сказал: "I'll be back"
  10. print 'Однажды Арнольд сказал: "I\'ll be back"';
  11. // Обратите внимание: в строке присутствует одинарная кавычка. Для того, чтобы php
  12. // понял, что это не конец строки, а часть ее, нам нужно ему об этом сообщить.
  13. // Обратный слэш выполняет функцию экранирования.
  14.  
  15. // Выведет: Это не вставит: \n новую строку
  16. print 'Это не вставит: \n новую строку';
  17. // В операционных системах используются особые специальные символы в тексте
  18. // которые помогают системе понять, где находится конец строки и начинается новая,
  19. // где находится табуляция и где вообще заканчивается весь текст.
  20. // Символ \n обозначает конец строки и переход на новую.
  21. // Слэш является частью символа, а не экранированием.
  22. // Если бы php всё таки вставил этот символ, то мы бы получили вывод в две строки:
  23. // Это не вставит:
  24. // новую строку
  25.  
  26. // Выведет: Переменные $expand также $either не подставляются
  27. print 'Переменные $expand также $either не подставляются';
  28.  
  29. ?>

Так же как и в одинарных, текст взятый в двойные кавычки это строка.

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

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

  1. <?php
  2. $beer = 'Heineken';
  3. print "$beer's taste is great"; // работает, "'" это неверный символ для имени переменной
  4. print "He drank some $beers"; // не работает, 's' это верный символ для имени переменной
  5. print "He drank some ${beer}s"; // работает
  6. print "He drank some {$beer}s"; // работает
  7. ?>

Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc.

  1. <?php
  2. print <<<HEREDOC1
  3. Меня зовут "$name". Я печатаю very$fast.
  4. Теперь я вывожу very{$fast}.
  5. Это должно вывести заглавную букву 'A': \x41
  6. HEREDOC1;
  7. ?>

В данном примере строка "Меня зовут ... ... букву А" образовывается при помощи синтаксиса HereDoc. Обратите внимание что вместо кавычек в начале и конце строки стоит название строки - HEREDOC1. <<

Массив (array)

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

  1. <?php
  2. $array = array('Cтрока1','Строка2');
  3. ?>

В примере массив состоит из двух строк. Пока не наблюдается никаких аномалий относительно известных Вам фактов. Продолжим.

  1. <?php
  2. $array = Array('Строка1','Строка2'); // Определяем массив с двумя строками
  3. print $array[0]; // Обращение к нулевому элементу. Выведет Сыр.
  4. $array[1] = 'Изменённая строка'; // Присвоение первому элементу.
  5. print $array[1]; // Выведет изменённую строку.
  6. ?>

В нашем примере использовались индексы элементов массива. В PHP понятие индекса расширяется до понятия ключа. То есть индексом может быть любая строка.

  1. <?php
  2. $arr = array('key'=>'val' , 'key2'=>'val2'); // Определяем массив с двумя строками
  3. print $arr['key']; // Обращение к элементу с ключом key. Выведет val
  4. print $arr[0]; // Обращение к нулевому элементу. Ошибка. Нет такого элемента
  5. $arr['key2'] = 'Изменённая строка'; // Присвоение элементу с ключом key2 нового значения.
  6. print $arr['key2']; // Выведет изменённую строку.
  7. ?>

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

Всего есть два типа массивов - числовые и ассоциативные.

Первый вид представляет из себя массив с ключами в виде чисел как в самом первом примере. Всё остальное является ассоциативным массивом.

  1. <?php
  2.  
  3. $ARRAY = array // числовой. Ключи 0,1 и 2
  4. (
  5. array('Строка1','Строка2') , // Числовой. Ключами являются 0 и 1
  6. array('key'=>'val' , 'key2'=>'val2') , // Ассоциативный. Ключи key и key2
  7. array('key3'=>'val3', 'Строчка') // Тоже ассоциативный. Ключи key3 и 0
  8. );
  9.  
  10. // Для обращения к какому либо элементу многомерного массива, к примеру к val3
  11. // следует обращаться так:
  12. print $ARRAY[2]['key3'];
  13. // В массиве ARRAY обращаемся сначала к элементу номер 2 [Array('key3'=>'val3', 'Строчка')]
  14. // а там к элементу с ключом key3
  15.  
  16.  
  17. $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
  18. print $arr["somearray"][6]; // 5
  19. print $arr["somearray"][13]; // 9
  20. print $arr["somearray"]["a"]; // 42
  21.  
  22. ?>

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

Создание и заполнение массивов

Содержание массива может быть задано как это было в примерах — заранее.

<?php $arr = Array(1,2,3); // ключи 0,1 и 2 ?>

Так же как мы присваивали ранее элементу в массиве другое значение можно создать и новый элемент

<?php $arr[3] = 5; // Создаётся элемент с индексом 3 и ему тут же присваивается число (integer) 5. ?>

Также можно добавлять элемент со следующим порядковым индексом.

$arr[] = 6;

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

После $arr[3] = 5; максимальный целочисленный индекс стал 3. При $arr[] = 6; максимальный индекс + 1 будет 4. Таким образом, $arr[4] становится 6.

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

Объекты (object)

PHP с 5 версии стал поддерживать объектно-ориентированный подход.

  1. <?php
  2.  
  3. // Определяем что такое машины, что она умеет делать и как.
  4. class car
  5. {
  6. var $color = 'White';
  7. function tut_tut() { print "BIp BIp"; }
  8. }
  9.  
  10. $honda = new car; // присваиваем переменной honda объект - Машину
  11. print $honda->color; // Выводим свойство машины - цвет
  12.  
  13. ?>

Ресурс (resource)

Ресурс представляет из себя указатель, ссылку, на внешний ресурс. В PHP ресурс — это ссылка на дескриптор (описатель) некоторого внешнего для PHP объекта. Например, при работе с базами данных, Вы будете получать в переменную результат, который вернула СУБД в ответ на ваш запрос. Типом переменной результата будет ресурс.

Null

Чтобы понять что такое Null нужно понять как хранит PHP переменные в памяти. Компьютерная память состоит из большого количества ячеек. В эти ячейки и записываются данные. Обращение к той или иной ячейке происходит при помощи идентификатора ячейки в памяти, её места.

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

Когда мы присваиваем переменной значение в первый раз, интерпретатор выбирает ячейку в памяти, заносит туда наше значение и привязывает название переменной к определенному идентификатору.

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

Значение Null сбрасывает привязку названия переменной к ячейке в памяти и переменной больше не соответствует никакая ячейка. Переменная просто никуда не указывает и ни к чему не ведет. В этом случае переменная считается неопределенной, так как название есть а привязка к ячейке отсутствует.

Присвоение переменной значения Null можно делать так: $a = Null; Заметьте что слово Null не взято в кавычки, потому что это не строка с текстом.

Булев тип (boolean)

Тип данных который включает в себя всего два значения: правда и неправда (True и False). Используется в основном в условиях. К примеру выражение ($a > $b) может быть правдой или не правдой.

Мягкость к типам данных

PHP не требует объявлять заранее какого типа будет та или иная переменная. Типы переменных определяются и приводятся в зависимости от контекста.

  1. <?php
  2. $a="5"; // Строка содержащая символ 5
  3. $a=$a+10; // Переменная переведена в тип int и участвует в операции сложения
  4. print $a; // Выведет 15
  5. ?>

Обозначения в документации PHP

mixed
обозначает что функция возвращает разные типы данных, в зависимости от обстоятельств
number
означает что возвращаемый результат представляет из себя integer или float
callback
в PHP функция вызывается как её название и скобочки. К примеру print(). Некоторые функции в PHP (к примеру call_user_func() ) принимают в качестве параметров названия функций с которыми они будут работать. В таком случае параметр формата callback которые они требуют представляют из себя строку с названием функции без скобочек. К примеру call_user_func('increment', $a); Данный аспект будет подробнее рассмотрен и применён во второй практической работе.

 

Полезные функции

isset()
В качестве аргумента функции передаётся переменная. Результат возвращаемый функцией: TRUE — если переменная, переданная в аргументе является определённой, и FALSE в противном случае.
print_r()
Распечатывает в удобном для чтения виде значение переменной. Очень удобная для вывода значений массивов и полей объектов.
gettype()
Возвращает тип переменной, переданной в аргументе
is_float()
Возвращает TRUE, если переменная в аргументе в настоящий момент имеет тип float
is_int()
Возвращает TRUE, если переменная в аргументе в настоящий момент имеет тип int
is_string()
Возвращает TRUE, если переменная в аргументе в настоящий момент имеет тип string
is_array()
Возвращает TRUE, если переменная в аргументе в настоящий момент имеет тип array
is_object()
Возвращает TRUE, если переменная в аргументе в настоящий момент имеет тип object
intval()
Возвращает аргумент в виде целого числа integer
floatval()
Возвращает аргумент в виде дробного числа float
strval()
Возвращает аргумент в виде строки string
settype()
Преобразует первый аргумент в указанный во втором аргументе тип. Наример, settype($a, 'integer');

Баннер SGU.RU