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 код в HTML можно четырьмя способами:

  1. <?php echo('Это PHP код.'); ?> - основной способ вставки PHP кода. Доступен всегда.
  2. <script language = "php"> echo('Это тоже PHP код.'); </script> - тоже можно использовать всегда.
  3. <? echo('короткие теги в действии'); ?> - можно включить установкой short_open_tag в php.ini.
  4. <% echo('теги в стиле ASP'); %> - включаются установкой asp_tags в php.ini.

Первый и второй способы вставки будут работать на любом сервере, независимо от настроек PHP. Третий и четвертый варианты не рекомендуются из-за возможных проблем с совместимостью, хотя short_open_tag по умолчанию включен (asp_tags - нет).

В последних двух случаях можно написать <?= выражение ?> вместо <?php echo(выражение); ?>

Команды PHP должны заканчиваться ";". Перед закрывающим тегом ?> ";" можно опустить.

Комментарии в PHP бывают однострочные (// комментарий, # комментарий) и многострочные ( /* комментарий */ ). Однострочный комментарий действует до конца строки или тега ?>, смотря что встретится раньше. Вложеные многострочные коментарии не допускаются.

Типы данных

В PHP определено восемь типов данных: целый, вещественный, логический, строковый, массив, объект, ресурс и NULL. Впрочем, объявлять тип переменной вам не придется (объявлять переменные, кстати, тоже). PHP приводит тип переменной к нужному автоматически, согласно установленым правилам приведения типов, но об этом чуть позже. Тип можно получить функцией get_type(); и проверить функциями вроде is_int(); и is_float();

Логический тип может принимать значения TRUE и FALSE. Эти ключевые слова регистронезависимы. Например:
$user_registred = True;
установит переменную $user_registred в значение "истина".

Целые числа могут быть представлены в десятичной, восьмеричной и шестнадцатиричной системах счисления. Для восьмеричной число должно начинаться с 0, для шестнадцатиричной - с 0x. Число, превышающее пределы для целых, будет сохранено как число с плавающей точкой. Максимальные значения целого типа зависят от системы, в которой работает PHP.

Вещественные числа можно записать в виде 3.1415 или 0.5e23. Максимальное значение и точность, опять же, зависят от платформы. Существуют функции для работы с вещественными числами произвольной точности.

Строки - наборы символов. Каждый символ представлен одним байтом. Ограничений по длине строки нет. Строка может быть задана тремя различными способами:

  1. Одинарные кавычки ('пример')

    Самый простой способ. Чтобы использовать в самой строке одинарную кавычку, ее необходимо мнемонизировать - напечатать перед ней "\" - (\'). Так же можно мнемонизировать и саму "\". Косая черта перед любыми другими символами будет напечатана. Внутри строки, заданой одинарными кавычками, переменные не обрабатываются.

  2. Двойные кавычки ("пример")

    В этом варианте доступно больше специальных символов:

    \n - новая строка (LF или #10 в ASCII)	
    \r - возврат каретки (CR или #13 в ASCII)
    \t - табуляция
    \\ - обратная косая черта	
    \$ - знак доллара	
    \" - двойная кавычка
    

    Косая черта перед любыми другими символами будет напечатана. В этом варианте определения строки обрабатываются переменные.

  3. heredoc - синтаксис

    Выглядит это следующим образом:

    $text = <<<ID
      Это текст, набраный в несколько
    строк и присвоенный переменной \$text
    с помощью heredoc-синтаксиса.
    ID;

    где ID - закрывающий идентификатор. Он должен находится в первом столбце последней строки и не содержать других символов, кроме точки с запятой. Идентификатор должен состоять из букв, цифр и знака _ и начинаться с буквы. Кавычки не требуются, следовательно их можно не мнемонизировать. Переменные обрабатываются как в случае с двойными кавычками.

Внутри строк, определенных двойными кавычками или heredoc-синтаксисом, обрабатываются переменные. Существуют простой и сложный синтаксисы. Простой позволяетвыводить занчения переменных, элементов массива и полей объектов; с помощью сложного можно вывести значение любой переменной в любом случае.

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

echo "This is $name's car"  //работает
echo "This is $names car"   //не работает - переменная $names не задана.
echo "This is ${name}s car" //снова работает.

Аналогично обрабатываются элементы массива и поля объекта. Квадратная скобка "]" обозначает конец определения элемента. В случае с объектами нельзя использовать фигурные скобки для обозначения границ имени поля. Необходимо использовать сложный синтаксис.

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

<?php
class test
{
    var $q;
    function test()
    {
       $this->q = array('test1', 'test2', 'test10');
    }
}
  $a = new test;
  echo "$a->q['0']'s";     //Array['0']'s
  echo "{ $a->q['1']}s";   //{ Array['1']}s
  echo "{$a->q['1'] }s";      //test2s
  echo "{$a->q['2']}s";    //test10s
?>

Как видите, правильно работают только два последних варианта.

Для получения символа из строки по номеру используются фигурные скобки: $ch = $str{3};. Первый символ имеет номер "0". Чтобы объединить две строки используйте оператор "." ($res = $a . $b).

Массивы в PHP - это упорядоченый набор пар ключ => значение. Ключем могут служить строка или целое, значением - любой другой тип. Таким образом "массив" - очень гибкая структура, заменяющая записи, деревья, хеш-таблицы и многое другое. Нормальный массив из этого тоже можно сделать.

Задать массив можно с помощью команды array([ключ =>] значение, ...);. Пар [ключ =>] значение может быть несколько. К примеру $user = array("user_name" => "zRrr", "is_registered" => TRUE); создаст массив $user с полями "user_name" (строковое) и "is_registered" (логическое).

Значения элементов массива могут быть любого типа. Например array("newarray" => array(1 => 5, 6, "check" => FALSE, "ch" => "A")); В случае, если ключ опущен, берется наибольший целый ключ, к нему прибавляется 1 и элемент добавляется с новым ключем. Если целых ключей нет, элемент добавляется с ключем 0. (В Руководстве утверждают, что это работает для любых целых ключей, однако на деле при отрицательном наибольшем целом ключе, элемент добавляется с ключем 0). Логический тип, используемый как ключ, преобразуется в целый, тип NULL в пустую строку.

При обращении к элементам массива ключ заключается в квадратные скобки. Элементам массива можно присваивать другие значения. $arr["x"] = 5; присвоит элементу с ключем "x" значение 5, если такой элемент существует, либо создаст такой элемент. $arr[] = 10; равнозначно добавлению элемента без указания ключа, и обрабатывается как описано выше. Если массив $arr не сущесвует, то он будет создан. Чтобы удалить пару ключ => значение используйте команду unset();. unset($arr[5]); удалит пару с ключем 5, unset($arr); удалит весь массив.

function GetArticleData($af)
{
  include "constants.php";

  $author = fgets($af);
  $mail   = fgets($af);
  $topic  = fgets($af);
  $link   = fgets($af);

  if ($author == FALSE || $mail == FALSE || $topic == FALSE || $link == FALSE): return(FALSE); endif;
  $tmp = fgets($af);
  while ($tmp != $cnst_separator."\r\n" && $tmp != FALSE):
    $msg[] = trim($tmp);
    $tmp = fgets($af);
  endwhile;
  $res = array('author' => trim($author),
               'mail'   => trim($mail),
               'topic'  => trim($topic),
               'link'   => trim($link),
               'msg'    => $msg
              );
  return($res);
}

Эта функция получает данные о статье из файла $af считывая файл построчно и возвращает их ввиде массива. Поле 'msg' может содержать несколько строк, поэтому оно является массивом.

Описание функций, работающих с массивами, можно найти в Руководстве в теме "Функции для работы с массивами" ("Array functions").

Приведение типов

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

  1. (int), (integer) - приведение к целому
  2. (bool), (boolean) - приведение к логическому
  3. (float), (double), (real) - приведение к вещественному
  4. (string) - приведение к строке
  5. (array) - приведение к массиву
  6. (object) - приведение к объектному типу.

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

Преобразование в логический тип

При преобразовании следующие значения рассматриваются как FALSE:

  1. Сам булев FALSE
  2. целое 0 (ноль)
  3. число с плавающей точкой 0.0 (ноль)
  4. пустая строка и строка "0"
  5. массив с нулевыми элементами
  6. объект с нулевыми переменными-членами
  7. специальный тип NULL (включая неустановленные переменные)

Остальные значения рассматриваются как TRUE (включая любой ресурс).

Преобразование в целый тип
  1. Логическое FALSE преобразуется в 0, логическое TRUE - в 1.
  2. Вещественные числа преобразуются отбрасыванием дробной части. Если вещественное число превышает пределы целого, то результат не определен.
  3. Строка преобразуется следующим образом: Если начальная часть строки - верная запись вещественного числа, то строка трактуется как соответствующее вещественное число. Если начальная часть строки - верная запись целого числа, то - как целое число. Иначе строка принимается равной "0";
  4. Другие типы предварительно преобразуются в логический, и лишь после этого - в целый.
Преобразование в вещественный тип

Преобразование строки осуществляется как в случае с целым типом. В остальных случаях значение преобразуется в целое, а затем в вещественное.

Преобразование в строковый тип
  1. Логическое TRUE преобразуется в строку "1", логическое FALSE - в пустую строку "".
  2. Числа конвертируются в строку, состоящую из цифр числа (включая показатель степени).
  3. Массивы преобразуются в строку "Array". Для отображения массивов используйте не echo();, а var_dump(); и print_r();.
  4. NULL всегда конвертируется в пустую строку.
Преобразование в массив
  1. целый, вещественный, строковый, логический и ресурсный типы преобразуются в массив с одним элементом с ключем "0" и значением, которое имела приводимая переменная.
  2. при конвертации объекта, поля объекта становятся элементами массива с ключем равным имени поля и значением равным значению поля.
  3. NULL преобразуется в пустой массив.

А на сегодня это все.


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

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

Рейтинг@Mail.ru