Notice: Constant articledir already defined in /var/www/students/public_html/pages/pm01/zrr/constants.php on line 2

Notice: Constant articlelist already defined in /var/www/students/public_html/pages/pm01/zrr/constants.php on line 3

Notice: Constant bkcolor already defined in /var/www/students/public_html/pages/pm01/zrr/constants.php on line 5

Notice: Constant frontcolor already defined in /var/www/students/public_html/pages/pm01/zrr/constants.php on line 6

Notice: Constant newsfile already defined in /var/www/students/public_html/pages/pm01/zrr/constants.php on line 7
zRrr - Переменные и Операторы
Новости Статьи Гостевая Ссылки О Сайте

Переменные и операторы

Переменная в 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. Однако внутри написаных програмистом функций действуют довольно необычные правила. Все переменные, используемые внутри функции, считаются локальными, и просто так к глобальным переменным скрипта не обратиться. В общем-то правильно, но что делать, если очень надо? Есть два способа:

  1. Использование ключевого слова global.

    <php
      $white = 'белый ';
      $snow  = 'снег';
    
      function Concat()
      {
          global $white, $snow;
    
          $snow = $white . $snow;
      } 
    
      Concat();
      echo $snow;
    ?>
  2. Этот пример можно переписать, используя суперглобальный массив $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 предоставляет любому выполняющемуся скрипту значительное число переменных, содержащих информацию об окружении интерпретатора, о сервере, параметры запуска скрипта и иную информацию. Все переменные сгруппированы в нескольких суперглобальных массивах. К любому массиву можно обратиться из любого места скрипта.

  1. $GLOBALS - содержит ссылки на все существующие глобальные переменные. Ключем служит строка с именем переменной.
  2. $_SERVER - содержит информацию о заголовках, путях и расположении скрипта на веб-сервере. Массив формируется веб-сервером и нет гарантии, что все переменныек будут доступны. Некоторые поля:

    • "PHP_SELF" - путь к файлу скрипта относительно каталога веб-документов. Например для http://www.test.ru/test/my.php $_SERVER['PHP_SELF'] содержит /test/my.php
    • "REMOTE_ADDR" $_SERVER['REMOTE_ADDR'] - содержит IP-адрес пользователя, пославшего запрос.

    Остальные переменные см. в Руководстве.

  3. $_GET, $_POST, $_COOKIE - содержат переменные, переданые скрипту с помощью методов GET, POST и через cookies соответственно.
  4. $_REQUEST - Объединяет переменные из $_GET, $_POST, $_COOKIE. Проблема перекрытия переменных решается исходя из настроек PHP.
  5. $_FILES - используется при загрузке файлов на сервер с помощью HTTP POST file upload.
  6. $_ENV - содержит переменные окружения, предоставленные системой, под которой работает PHP.
  7. $_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 :$dif($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" обладает наименьшим приоритетом.

Вологодский Государственный Педагогический Университет

сделал Р. 'zRrr' Золотов

Рейтинг@Mail.ru