|
Переменные и операторы
Переменная в PHP представлена в виде знака $ за которым идет имя переменной. Имя переменной, как и любое имя в PHP может состоять из букв, цифр и знака подчеркивания, причем не должно начинаться с цифры. Буквой в PHP считаются символы a-z, A-Z, и ASCII символы с 127 по 255 (т.е. в принципе возможны русские имена переменных). Имена переменных регистрозависимы.
Присваивать значение переменным можно как по значению (с копированием данных в переменную), так и по ссылке (by reference) и тогда переменная будет указывает на ту область памяти, которую занимает присваеваемая переменная.
$var = $test //присваивание по значению
$var = &$test //присваивание по ссылке
Больше я на этом останавливаться не буду, т.к. пользы с указателей для наших простеньких занятий все равно никакой, а путаницы с ними много.
Объявлять переменные и, тем более, явно указывать их тип не требуется. Как только вам понадобилась новая переменная, можете смело писать $имя_переменной и пользоваться. Удобно, конечно, если бы не одно "но". Используемые вами переменные никто не контролирует. Поэтому, при обращении к существующим переменным будте предельно внимательны. Например в этом коде:
$fd = fopen($artname, "r");
while(!feof($fd)):
$s = fgets($gd);
print($s);
endwhile;
опечатка вызовет бесконечный цикл, выдающий сообщения о том, что $gd не является подходящим ресурсом. При хорошей скорости можете получить пару мегабайт, прежде чем разберетесь (речь естественно не о модемной связи). Будьте бдительны.
Области видимости
Большая часть PHP переменных доступна в том файле, в котором она объявлена, а так же во включенных файлах. В этом коде:
<?php
$a = 1;
include "test.php";
?>
переменная $a доступна так же в файле test.php. Однако внутри написаных програмистом функций действуют довольно необычные правила. Все переменные, используемые внутри функции, считаются локальными, и просто так к глобальным переменным скрипта не обратиться. В общем-то правильно, но что делать, если очень надо? Есть два способа:
Использование ключевого слова global.
<php
$white = 'белый ';
$snow = 'снег';
function Concat()
{
global $white, $snow;
$snow = $white . $snow;
}
Concat();
echo $snow;
?>
Этот пример можно переписать, используя суперглобальный массив $GLOBALS.
<php
$white = 'белый ';
$snow = 'снег';
function Concat()
{
$GLOBALS[$snow] = $GLOBALS[$white] . $GLOBALS[$snow];
}
Concat();
echo $snow;
?>
В любом случае, внутри функции с переменной можно делать все, что угодно. Можно изменить ее значение, и оно сохранится при выходе из функции. Если внутри функции присвоить значение несуществующей глобальной переменной, то такая переменная будет создана, и будет доступна вне функции, как обычная глобальная переменная.
Массив $GLOBALS является суперглобальным, т.е. доступен всегда.
Статические переменные
Когда интерпретатор покидает функцию, все локальные переменные уничтожаются и их значение теряется. Что бы сохранить локальные переменные между вызовами функции, можно воспользоваться ключевым словом static.
function Test()
{
static $a = 0;
echo $a;
$a++;
} Данная функция при каждом вызове будет выводить значение $a и увеличивать его на единицу. В объявлении статической переменной static $a = 0; в правой части может стоять только константа.
Предустановленные переменные
PHP предоставляет любому выполняющемуся скрипту значительное число переменных, содержащих информацию об окружении интерпретатора, о сервере, параметры запуска скрипта и иную информацию. Все переменные сгруппированы в нескольких суперглобальных массивах. К любому массиву можно обратиться из любого места скрипта.
- $GLOBALS - содержит ссылки на все существующие глобальные переменные. Ключем служит строка с именем переменной.
- $_SERVER - содержит информацию о заголовках, путях и расположении скрипта на веб-сервере. Массив формируется веб-сервером и нет гарантии, что все переменныек будут доступны. Некоторые поля:
- "PHP_SELF" - путь к файлу скрипта относительно каталога веб-документов. Например для http://www.test.ru/test/my.php $_SERVER['PHP_SELF'] содержит /test/my.php
- "REMOTE_ADDR" $_SERVER['REMOTE_ADDR'] - содержит IP-адрес пользователя, пославшего запрос.
Остальные переменные см. в Руководстве.
- $_GET, $_POST, $_COOKIE - содержат переменные, переданые скрипту с помощью методов GET, POST и через cookies соответственно.
- $_REQUEST - Объединяет переменные из $_GET, $_POST, $_COOKIE. Проблема перекрытия переменных решается исходя из настроек PHP.
- $_FILES - используется при загрузке файлов на сервер с помощью HTTP POST file upload.
- $_ENV - содержит переменные окружения, предоставленные системой, под которой работает PHP.
- $_SESSION - содержит переменные активной сессии.
Переменные переменные
В PHP существует возможность обращения к переменной, имя которой содержится в другой переменной. Так например код:
<?php
$a = "hello";
$$a = "world";
echo $a . ", " . $$a ."!"
?> Выведет строку "hello, world!", точно так же, как и скрипт
<?php
$a = "hello";
$$a = "world";
echo $a . ", " . $hello ."!"
?>
Операторы
Арифметические |
$a + $b | Сложение |
$a - $b | Вычитание |
$a * $b | Умножение |
$a / $b | Вещественное деление |
$a % $b | Нахождение остатка от $a деленого на $b |
Присваивание |
$a = $b | Присваивает $a значение $b |
$a += $b | $a = $a + $b |
$a .= $b | $a = $a . $b |
$a *= $b | $a = $a * $b |
Битовые операторы |
$a & $b | Побитовое И (AND) |
$a | $b | Побитовое ИЛИ (OR) |
$a ^ $b | Побитовое исключающее ИЛИ (XOR) |
~ $a | Побитовое НЕ (NOT) |
$a << $b | Сдвиг влево |
$a >> $b | Сдвиг вправо |
Операторы сравнения |
$a == $b | $a равно $b |
$a === $b | $a идентично $b (равны по значению и типы совпадают) |
$a != $b | $a неравно $b |
$a <> $b | $a неравно $b |
$a !== $b | $a неидентично $b (не равны, или не совпадают типы) |
$a < $b | $a меньше $b |
$a > $b | $a больше $b |
$a <= $b | $a меньше или равно $b |
$a >= $b | $a больше или равно $b |
$a = $b ? $c :$d | if($b): $a = $c else: $a = $d |
Оператор управления ошибками |
@выражение - блокирует сообщения об ошибках при вычислении выражения |
Операторы увеличения/уменьшения |
++$a | Увеличивает $a на 1, затем возвращает $a. |
$a++ | Возвращает $a, затем увеличивает $a на 1. |
--$a | Уменьшает $a на 1, затем возвращает $a. |
$a-- | Возвращает $a, затем уменьшает $a на 1. |
Логические операторы |
$a and $b | Логическое И (And) |
$a or $b | Логическое ИЛИ (Or) |
$a xor $b | Логическое исключающее ИЛИ (Xor) |
! $a | Логическое НЕ (Not) |
$a && $b | Логическое И (And) |
$a || $b | Логическое ИЛИ (Or) |
Разные варианты И и ИЛИ действуют в различной последовательности |
Строковый оператор |
$a . $b | Объединение строк. |
Оператор над массивами |
$a + $b | Объединение массивов. При совпадении ключей остается элемент из $a |
Приоритет операторов
or, xor, and,
print,
=, +=, -=, *=, /=, .=, %=, &=, |=, ^=, <<= >>=,
? :, ||, &&,
|, ^, &,
==, !=, ===, !==,
<, <=, >, >=,
<<, >>,
+, -, .,
*, /, %,
!, ~, ++, --, (int), (float), (string), (array), (object), @.
где "or" обладает наименьшим приоритетом. | |