|
Синтаксис и типы
Ну что, все вроде работает? Хочется сотворить что-нибудь общественно полезное для своей странички, вроде форума или, на худой конец, гостевой книги? Что ж, читайте Руководство и вперед. А я посвящу еще пару килобайт описанию таких скучных вещей как синтаксис и типы данных. С одной стороны, в Руководстве все это описано, подробнее и с примерами, с другой, раз уж пишу про язык программирования, стоит об этом упомянуть. Тем более у нас тут сайт университета, серьезными вещами занимаемся. Ладненько, приступим.
Вставить PHP код в HTML можно четырьмя способами:
- <?php echo('Это PHP код.'); ?> - основной способ вставки PHP кода. Доступен всегда.
- <script language = "php"> echo('Это тоже PHP код.'); </script> - тоже можно использовать всегда.
- <? echo('короткие теги в действии'); ?> - можно включить установкой short_open_tag в php.ini.
- <% 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. Максимальное значение и точность, опять же, зависят от платформы. Существуют функции для работы с вещественными числами произвольной точности.
Строки - наборы символов. Каждый символ представлен одним байтом. Ограничений по длине строки нет. Строка может быть задана тремя различными способами:
Одинарные кавычки ('пример')
Самый простой способ. Чтобы использовать в самой строке одинарную кавычку, ее необходимо мнемонизировать - напечатать перед ней "\" - (\'). Так же можно мнемонизировать и саму "\". Косая черта перед любыми другими символами будет напечатана. Внутри строки, заданой одинарными кавычками, переменные не обрабатываются.
Двойные кавычки ("пример")
В этом варианте доступно больше специальных символов:
\n - новая строка (LF или #10 в ASCII)
\r - возврат каретки (CR или #13 в ASCII)
\t - табуляция
\\ - обратная косая черта
\$ - знак доллара
\" - двойная кавычка
Косая черта перед любыми другими символами будет напечатана. В этом варианте определения строки обрабатываются переменные.
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 приводит все операнды к вещественному типу, если хотя бы один операнд вещественный, и к целому типу в противном случае. При выполнении оператора объединения строк "." оба операнда приводятся к строковому типу. Программист так же может использовать приведение типов. Допустимы следующие:
- (int), (integer) - приведение к целому
- (bool), (boolean) - приведение к логическому
- (float), (double), (real) - приведение к вещественному
- (string) - приведение к строке
- (array) - приведение к массиву
- (object) - приведение к объектному типу.
Пробелы между скобками и названием типа допускаются. Чтобы преобразовать переменную в строку, можно заключить ее в двойные кавычки.
Преобразование в логический тип
При преобразовании следующие значения рассматриваются как FALSE:
- Сам булев FALSE
- целое 0 (ноль)
- число с плавающей точкой 0.0 (ноль)
- пустая строка и строка "0"
- массив с нулевыми элементами
- объект с нулевыми переменными-членами
- специальный тип NULL (включая неустановленные переменные)
Остальные значения рассматриваются как TRUE (включая любой ресурс).
Преобразование в целый тип
- Логическое FALSE преобразуется в 0, логическое TRUE - в 1.
- Вещественные числа преобразуются отбрасыванием дробной части. Если вещественное число превышает пределы целого, то результат не определен.
- Строка преобразуется следующим образом: Если начальная часть строки - верная запись вещественного числа, то строка трактуется как соответствующее вещественное число. Если начальная часть строки - верная запись целого числа, то - как целое число. Иначе строка принимается равной "0";
- Другие типы предварительно преобразуются в логический, и лишь после этого - в целый.
Преобразование в вещественный тип
Преобразование строки осуществляется как в случае с целым типом. В остальных случаях значение преобразуется в целое, а затем в вещественное.
Преобразование в строковый тип
- Логическое TRUE преобразуется в строку "1", логическое FALSE - в пустую строку "".
- Числа конвертируются в строку, состоящую из цифр числа (включая показатель степени).
- Массивы преобразуются в строку "Array". Для отображения массивов используйте не echo();, а var_dump(); и print_r();.
- NULL всегда конвертируется в пустую строку.
Преобразование в массив
- целый, вещественный, строковый, логический и ресурсный типы преобразуются в массив с одним элементом с ключем "0" и значением, которое имела приводимая переменная.
- при конвертации объекта, поля объекта становятся элементами массива с ключем равным имени поля и значением равным значению поля.
- NULL преобразуется в пустой массив.
А на сегодня это все.
| |