Дольше обычного не выходила наша рассылка. Это всё потому, что у меня полетел винчестер. Событие, конечно, не смертельное, но крайне неприятное. Сразу же после восстановления данных я сел за написание нового выпуска.
Сегодня мы продолжим разговор о функциях. Для начала предлагаю посмотреть, как решались предыдущие домашние задания.
Таблица умножения
Задание:Cделать универсальную функцию, которая выводила бы таблицу умножения. Функция должна принимать два параметра:
начальное и конечное значение в таблице.
Как решается задача? Просто. Смотрим:
Нужно сделать функцию. Как создавать собственные функции мы уже знаем.
В качестве параметров функции должны быть указаны два параметра. Об этом явно говорится в задании.
Функция в процессе работы должна вывести таблицу умножения.
Посмотрите, какой код получился у меня:
Пример 1. Функция для создания таблицы умножения:
<?php function tablitsa ($start, $end) {
// мы создали функцию с именем tablitsa и параметрами:
// $start — начальное значение в таблице умножения
// $end — конечное значение в таблице умножения
echo ("<table border=1>");
// начало таблицы
// его, кстати, можно было записать и так:
// ?><table border=1><?
for ($i=$start; $i<=$end; $i++) {
// запускаем цикл от $start до $end — это будут строки
echo ("<tr>");
// строка началась
for ($k=$start; $k<=$end; $k++) {
// второй цикл будет вписывать столбцы
Вот так. Я думаю, что разобраться с кодом не будет слишком сложно, тем более, что главное сейчас — это понять, каким образом объявляется функция, как действуют параметры функции и т. д.
Чтобы проверить, правильно ли мы всё сделали, попробуйте запустить функцию такой командой: tablitsa(5, 10);
Результат должен быть примерно таким:
Рисунок 1. Результат
вывода таблицы
Попробуйте вызывать функцию с другими параметрами и посмотрите результаты вывода.
Чтобы ещё лучше понять, как работает функция, проследим за действиями PHP в процессе обработки кода:
PHP встречает среди кода слово function, которое гласит, что сейчас будет определена функция
PHP создаёт новую функцию с именем tablitsa.
Как только встречается вызов функции,
PHP проверяет:
А есть ли вообще такая функция?
Все ли необходимые параметры переданы функции?
Если эти условия выполняются, PHP запускает функцию.
Заметьте: Вы можете вызывать функцию до того, как Вы её описали. Например, следующий код абсолютно правилен:
Пример 2. Пример вызова функции до её определения:
<?php sample();
function sample() {
echo ("hello");
} ?>
Многие функции зачастую используются сразу в нескольких файлах. В таких случаях часто эту функцию (одну или несколько) выносят в отдельный файл. Потом в скрипте, где должна использоваться функция, вставляют команду include ("файл_с_функциями"); и таким образом получают возможность использовать все функции, которые есть в этом файле.
Дата и время
Помните, на прошлом уроке мы рассматривали работу функции date()? Давайте
посмотрим ещё раз:
<?php $d=date("d.m.Y H:i");
echo ($d); ?>
В этой функции "d.m.Y H:i" — это параметр, который принимает функция date(). Настала пора разобраться в том, какие варианты этого параметра мы можем использовать.
Все функции, которые мы будем рассматривать я буду описывать так, как это принято у программистов. Так и нагляднее и понятнее. Первый раз я, естественно, всё поясню. Итак,…
Функция
date()
string date ( string format [, int timestamp])
Я думаю, что стоит пояснить эту запись. Итак, первое слово — string говорит нам о том, что в результате выполнения функция возвращает строковое значение. Затем следует название функции — date. Теперь смотрим на параметры функции:
string format — говорит нам о том, что мы должны передать функции строку. Внутри функции эта строка будет доступна под именем $format.
int
timestamp — говорит нам о том, что мы должны передать функции некоторое целое число. Внутри функции это число будет доступно под именем $timestamp.
Заметьте: второй параметр указан в квадратных скобках. Это говорит о том, что параметр $timestamp является необязательным (вспомните, на прошлом уроке мы говорили про необязательные параметры).
Нам, в принципе, не очень важно, под каким именем атрибут будет известен внутри функции, ведь функция date() —
встроенная в PHP. Так что это я рассказываю просто для информации.
Действие функции: в зависимости от формата ($format) и заданного времени ($timestamp) выводит результат (дату и время).
Теперь подробнее о параметре $format. Этот параметр представляет собой, ну, скажем, «шаблон», по которому формируется дата. PHP, встретив в шаблоне определённые символы, заменяет их на данные даты или времени. Вот, например, если Вы напишите:
В результате Вы получите вместо буквы Y число — 2005! То есть текущий год! И точно также мы можем использовать другие символы для формирования даты и времени нужного нам формата!
В следующей таблице представлены символы параметра $format и примеры их замены.
Таблица 1. В параметре $format распознаются и заменяются следующие
символы:
Символ:
Что он обозначает:
Возможный результат:
a
Ante meridiem или Post meridiem в нижнем регистре (строчными буквами)
am или pm
A
Ante meridiem или Post meridiem в верхнем регистре (прописными буквами)
AM или PM
d
День месяца, 2 цифры с ведущими нулями
от 01 до 31
D
Сокращенное наименование дня недели, 3 символа (англ)
от Mon до Sun
F
Полное наименование месяца (англ)
от January до December
g
Часы в 12-часовом формате без ведущих нулей
от 1 до 12
G
Часы в 24-часовом формате без ведущих нулей
от 0 до 23
h
Часы в 12-часовом формате с ведущими нулями
от 01 до 12
H
Часы в 24-часовом формате с ведущими нулями
от 00 до 23
i
Минуты с ведущими нулями
от 00 до 59
I (заглавная i)
Признак летнего времени. Если заменено на 1, значит, дата соответствует летнему времени, если на ноль — нет.
1 или 0
j
День месяца без ведущих нулей
от 1 до 31
l (строчная L)
Полное наименование дня недели (англ)
от Sunday до Saturday
L
Признак високосного года. Заменяется на 1, если год високосный, иначе 0
1 или 0
m
Порядковый номер месяца с ведущими нулями
от 01 до 12
n
Порядковый номер месяца без ведущих нулей
от 1 до 12
M
Сокращенное наименование месяца, 3 символа (англ)
от Jan до Dec
O
Разница с временем по Гринвичу. Первые две цифры — часы, последующие — минуты
Количество секунд, прошедших с начала Эпохи Unix (то есть с 1 января 1970, 00:00:00 по Гринвичу)
Например: 1114433991
w
Порядковый номер дня недели
от 0 (воскресенье) до 6 (суббота)
W
Порядковый номер недели года (первый день недели - понедельник)
от 1 до 52
Y
Порядковый номер года, 4 цифры
Например: 2005
y
Порядковый номер года, 2 цифры
Например: 05
z
Порядковый номер дня в году (нумерация начинается с 0)
от 0 до 365
Таблица большая, так что давайте разберёмся: в строке $format все вышеперечисленные символы всегда будут заменяться. Все остальные символы (которых нет в таблице) останутся как есть. Это даёт нам большие преимущества. Вот посмотрите на такой формат даты:
Сегодня: j F Y года
Как Вы думаете, что вернёт нам функция date(), если ей будет передан такой формат? Результат может быть примерно таким:
Сегодня: 25 April 2005 года
Как видите, всё, что не было спецсимволами,
осталось «как есть». Другой пример:
С начала года прошло z дней.
В результате, у меня получилось вот что:
С начала года прошло 114 дней.
Здесь я привожу только значение переменной $format. Чтобы получить результат выполнения, Вы должны вписать это значение в функцию date(), например так: echo (date("С начала года прошло z дней."));
А что, если нам нужно в формате написать один из заменяемых символов так, чтобы он не
был заменён функцией date()? На этот случай есть простое решение: перед символом, который заменять не надо, нужно поставить знак «\». Вот так:
\M\a\m\a: d M Y H:i a
И вот желаемый результат:
Mama: 25 Apr 2005 22:15 pm
Все символы, перед которыми стоял слэш не были изменены, все остальные — были.
Теперь о том, что такое «ведущие нули». Многие, я думаю, уже догадались, но всё-таки поясню: часто в документах нам приходится писать день
или месяц двумя цифрами. То есть, если нужно написать «третье апреля», то приходится делать это так: 03.04. Вот в PHP и включили заранее поддержку ведущий нулей. И поэтому у многих элементов (например, у дня, месяца, минут, часов и т.д.) есть два варианта: с ведущими нулями и без них.
Признак «високосности» года
Чтобы определить, какой сейчас год — високосный или нет, мы также можем использовать функцию date(). Для этого мы должны сделать так:
Передать
функции date() формат: L
Полученный результат проверить: если он равен единице, значит год високосный, если нулю — обычный
А теперь код:
Пример 4. Определение "високосности" года:
<?php $visokos=date("L");
if ($visokos==1) {
echo ("Сейчас на дворе високосный год!");
} else {
echo ("Увы, високосный год уж точно не сегодня...");
} ?>
Согласитесь, легко и понятно!
Но есть у функции date() и ещё одно великолепное свойство. Дело в том, что все предыдущие примеры показывали нам данные на текущий момент, а ведь, между тем, мы можем узнать всё это для практически любой даты! В этом нам поможет второй параметр функции — $timestamp. Это параметр должен представлять собой дату в формате Unix, то есть количество секунд, прошедших с начала Эпохи Unix (то
есть с 1 января 1970, 00:00:00 по Гринвичу). Раз количество секунд, — значит число. Просто число.
Давайте посмотрим на пример:
Пример 5. Использование параметра timestamp в функции date():
<?php $timestamp=123456789;
// это метка времени в формате Unix
$format="d.m.Y G:i:s";
// это формат выводимого значения
$result=date($format, $timestamp);
// получаем результат и записываем его в переменную $result
echo ($result);
// и выводим её ?>
В результате Вы получите вот что:
30.11.1973 5:33:09
То есть, в этот момент — тридцатого ноября 1973 года в пять часов тридцать три минуты и 9 секунд — время в формате Unix (или, всё равно, что "время в секундах, прошедшее с 1 января 1970 года 0:0:0") было равно 123456789.
Изначально, может быть, не совсем понятно такое свойство, вскоре даёт великолепные результаты.
Например, Вам нужно выводить одну и ту же дату в разных форматах. Проще всего записать эту дату в формате Unix и использовать её совместно с функцией date().
Подводя итог
Хочу сказать, что при создании информационных сайтов, функции для работы с датой и временем используются очень часто. И потому, чтобы закрепить результат с функциями, советую Вам прорешать следующие задания:
Укажите примерный результат, который может получится, если функции date() передать следующие форматы:
l,
d F Y, g:i a
d.m.y
z день, месяц F
В текущем месяце t дней
По результату определить маску ($format), которая была передана функции date():
Новость добавлена 17 April 2003 года в 22:7
Date: 05.07.03 07:20:22
Разница со временем по Гринвичу: +0500
1 Mar 2003
Получить дату и время, которые были (или будут) в тот момент, когда время Unix равно:
10342441
128896578
1214437584
Некоторые из этих
заданий не так просты, как кажутся на первый взгляд. О результатах пишите мне: eugene@phpbook.com.ru.
Да, и в случае каких-либо проблем, также обязательно пишите мне, спрашивайте, потому что, не поняв сейчас, Вам будет сложнее изучать язык дальше. Если Вы стесняетесь задать вопрос по e-mail, задавайте его на форуме, посетители которого
обязательно помогут Вам!