Отправляет email-рассылки с помощью сервиса Sendsay

Программирование в Web

  Все выпуски  

Программирование в Web Выпуск 18 от 30/10/2006 Основы PHP - Урок-12


 
Программирование в web

ОСНОВЫ PHP
 

 
Внимание!!!
Все материалы уроков, публикуемых в этом и во всех последующих выпусках рассылки «Программирование в web», являются интеллектуальной собственностью авторов и ведущих рассылки. По всем вопросам размещения или публикации данных материалов на собственных ресурсах или где-либо еще, или иного использования, не связанного с личным ознакомлением и самостоятельным обучением, - обращайтесь на адрес автора. Любое использование этих материалов в коммерческих или иных целях, явно не разрешенное автором, является незаконным.
 

 
У Р О К    12
Здравствуйте уважаемые подписчики!

Вот и снова долгожданный новый выпуск рассылки. И снова я прошу у вас прощения. Все эта работа, будь она не ладна. В ближайших выпусках мы начнем рассматривать уже конкретные примеры сценариев, а попутно будем изучать дальше PHP. Ну начинаю…



НЕКОТОРЫЕ МАТЕМАТИЧЕСКИЕ ФУНКЦИИ:

Вообще, многие из этих функций при написании web-приложений на PHP используются довольно часто, поэтому решил сделать отдельный урок по ним.


abs($int) - Функция возвращает модуль числа $int. То есть будет возвращено число без знака. Если $int==-1, то abs($int)==1.

round($int) - Округляет $int в соответствии с правилами математики и возвращает результат. Пример:

3,5 будет округлено до 4;
3,3 будет округлено до 3;
3,6 будет округлено до 4
В качестве входного аргумента может быть либо float либо integer число.

ceil($int) - Округляет $int до целого числа не меньше, чем $int, то есть:

3,5 будет возвращено 4
3,1 будет возвращено также 4
В качестве входного аргумента может быть либо float либо integer число.

floor($int) - Возвращает максимальное целое число, не превосходящее $int

3,5 будет возвращено 3
3,1 будет возвращено тоже 3

rand() и srand() - Генерируют случайное число и возвращают его в качестве результата. В настоящее время не рекомендуется использовать эти две функции, так как возвращаемое ими случайное число слишком далеко от идеала, вместо них рекомендуется использовать следующие:

mt_rand($min, $max=RAND_MAX) - Возвращает достаточно хорошо распределенное на всем интервале от $min до $max случайное число. Константу RAND_MAX можно получить с помощью функции mt_getrandmax(), она является предопределенной константой, задающей максимально допустимое случайное число.

Функцию mt_rand() удобно применять в сценариях выводящих случайные сообщения или при ротации банеров на сайте.

mt_srand($seed) - Настраивает генератор случайных чисел на новую последовательность с идентификатором $seed.

base_convert($num, $from,$to) - Конвертирует число $num из $from системы счисления в $to. Например так:

base_convert("FF", 16, 2) - Берет шестнадцатеричное число FF и в качестве результата возвращает двоичное число 11111111. Параметры $from и $to могут принимать значения от 2 до 36, то есть вы можете максимально сконвертировать тридцатишестиричное число.

Эти функции можно иногда заменить стандартными:

bindec($num)

octdec($num)

hexdec($num)

Преобразовывают входное двоичное, восьмеричное или шестнадцатеричное (соответственно) число в десятичное.

decbin($num)

decoct($num)

dechex($num)

Преобразовывают входное десятичное число в двоичное, восьмеричное или шестнадцатеричное (соответственно).

min($num1, $num2,...[$numn])- Возвращает самое минимальное из переданных в качестве входных аргументов чисел

max($num1, $num2,...[$numn]) - Возвращает самое максимальное из переданных в качестве входных аргументов чисел

В математике есть такие понятия как неопределенность, плюс и минус бесконечность. PHP имеет в своем составе несколько функций для определения этих понятий:

is_nan($var) - возвращает true если аргументом является NaN (неопределенность)

is_infinite($var) - возвращает true, если аргумент бесконечность (1.#INF или -1.#INF)

sqrt($val) - Возвращает квадратный корень из аргумента (в случае недопустимого фисла возвращает NaN)

log($val) - Возвращает натуральный логарифм из аргумента (в случае недопустимого числа возвращает либо +infinite, либо -infinite, либо NaN)

exp($val) - Возвращает число e в степени $val

pow($num, $exp) - возвращает $num в степени $exp (в случае недопустимого числа возвращает либо +infinite, либо -infinite, либо NaN)


Тригонометрические функции:

Надо сказать, что в построении web-сценариев эти функции применяются редко, но все же перечислю. Еще, надо учитывать, что в PHP тригонометрические функции работают с радианами, а не с градусами, об этом не стоит забывать:

deg2rad($deg) - Переводит градусы в радианы

rad2deg($deg) - Переводит радианы в градусы

acos($arg) - арккосинус аргумента

asin($arg) - арксинус аргумента

atan($arg) - арктангенс аргумента

atan2($y, $x) - арктангенс величины $y/$x, с учетом той четверти, в которой лежит точка ($x, $y)

sin($arg) - синус аргумента

cos($arg) - косинус аргумента

tan($arg) - тангенс аргумента

pi() - возвращает число Пи (надо сказать, что в PHP есть и константа определяющая это число PI).


НЕКОТОРЫЕ ФУНКЦИИ ДЛЯ РАБОТЫ С ДАТОЙ:

Начну с того, что поясню, каким образом обрабатывается дата в PHP. В PHP принято считать дату в некоем формате timestamp - число секунд прошедших с 1 января 1970 года (эпоха Unix).


time() - возвращает время в секундах, прошедших с 1 января 1970 года (от астрономического времени немного отличается, но это не существенно)

microtime($asFloat=false) - если $asFloat не задан - возвращает строку в формате дробная_часть целая_часть, где целая часть - результат работы time(). Параметр $asFloat добавился только в PHP версии 5

Вот как, например, можно реализовать вывод времени генерации страниц:

В самом начале сценария надо записать такую команду:

define("START_TIME", microtime(true));

А в самом конце сценария надо поместить вот, например, такую команду:

printf("Страница сгенерирована за - %.5f секунды", microtime(true)-START_TIME);

Если весь скрипт будет помещаться между этими двумя командами, то подсчеты этой последовательности будут достаточно достоверными. То есть, чем ближе первая команда к началу сценария и чем ближе вторая команда к концу сценария, тем точнее будет результат.

Ну все это хорошо, а вот как же все-таки можно вывести дату в нормальном человеческом виде?

Тоже просто:

date($format, [$timestamp]) - выводит текущую дату, если не задан параметр $timestamp или дату полученную из параметра $timestamp в формате $format.

$format - строковое представление формата вывода даты и может содержать в себе следующие значения (как в одиночку, так и скопом):

U - количество секунд, прошедших с 1 января 1970 года
z - номер дня от начала года
Y - год (четыре цифры)
y - год (две цифры)
F - название месяца (January, February...)
m - номер месяца
M - название месяца (трехсимволное сокращение, например, Jan...)
d - номер дня в месяце (двухсимволное представление, первым символом может быть 0)
j - номер дня в месяце без предваряющего нуля
w - номер дня недели (0 - воскресенье, 1 - понедельник...)
l - день недели (текстовое представление, например, Sanday...)
D - день недели (трехсимвольное сокращение английских слов, Fri...)
a - формат времени am или pm
A - тоже самое, только большими буквами будет выводиться AM или PM
h - часы в двенадцатичасовом формате
H - двадцатичетырехчасовой формат времени
i - минуты
s - секунды
S - английский числовой суффикс (nd, th...)
Соединять эти значения можно любыми разделителями, не входящими в сам перечень форматных значений, пусть это будет точка, запятая, дефис или другой знак.

Вот пример применения функции date():

<?php
echo data('d.m.Y H:i:s') //будет выведена текущая дата в таком виде:
09.03.2006 13:30:24
?>
Bот еще одна функция возвращающая строковое представление даты, только в отличии от date() имена месяцев и дней недели будут выводиться в соответствии с установленной на сервере локали (либо установленной в вашем сценарии командами setlocale())

strftime($format, [$timestamp]) - Если $timestamp отсутствует, то берутся текущие дата и время. Вот значения, которые могут содержаться в $format.

%Y - год (четыре символа)
%y - год (последние два символа)
%m - номер месяца (01 - 12)
%d - число (01 - 31)
%H - часы (00 - 23)
%M - минуты (00 - 59)
%S - секунды (00 - 59)
%B - полное название месяца в соответствии с выбранной локалью (например Март)
%b - сокращенное название месяца в соответствии с выбранной локалью (например мар)
%A - полное название дня недели в соответствии с выбранной локалью (например, Понедельник)
%a - сокращенное название дня недели...
%c - строка с датой и временем в соответствии с выбранной локалью.
mktime([$hour], [$minute], [$seconds], [$month], [$day], [$year]) Функция получает аргументы (часы, минуты, секунды, номер месяца, номер дня и год) и возвращает дату в формате timestamp.

strtotime($time, [$timestamp]) - принимает строковое представление даты и времени и возвращает ее в формате timestamp. Формат строкового представления даты в этой функции довольно свободный. Подробности сможете найти в документации по PHP.

Функция, возвращающая ассоциативный массив с ключами, содержащими соответствующие значения:

seconds - секунды
minutes - минуты
hours - часы
mday - число
wday - номер дня недели (0 - воскресенье)
mon - номер месяца
year - год
yday - номер дня с начала года
weekday - полное название дня недели (Friday)
month - полное название месяца (February)
Вот эта функция - getdate($timestamp)

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

PS. Приношу извинения, за то, что не привожу обширных описаний предоставляемых вам для ознакомления функций, но я делаю это во-первых для того, чтобы ускорить ваше ознакомление с ними, а во-вторых, чтобы сократить размеры выпусков. Впоследствии многие из этих функций мы будем с вами вместе рассматривать более подробно уже в конкретных примерах. Так что я думаю вы меня поймете. Как я уже говорил в одном из самых первых выпусков рассылки, изучение любого языка (а языки програмирования также не являются исключением) невозможно без базовых знаний элементов языка, в нашем случае, без знания большинства наиболее употребляемых функций и инструкций. Ожидайте следующих выпусков, так как в ближайших из них мы будем рассматривать конкретные (пусть для начала простые) примеры законченных (в той или иной мере) web-приложений.


 

 
Объявления!!!

В последующих выпусках планируется сделать блок вопросов и ответов, в котором вы сможете задавать интересующий вас вопрос (касающийся, естественно, уже пройденных уроков, без забегания вперед), и, в котором другие подписчики смогут дать ответ на ваш вопрос. Если вы считаете, что данный блок был бы желателен в рассылке, прошу написать на мой адрес любое, даже пустое письмо, главное, чтобы в письме присутствовала тема, в которой вы и дадите свой ответ на это мое предложение, например, тема может быть такой: "...Наличие блока вопрос-ответ обязательно..." или "...Блок вопрос-ответ не нужен..." или "...Было бы неплохо создать блок вопрос-ответ...", в общем, вот в таком плане. Односложные темы, типа "Да" или "Нет" создавать не стоит, так как антиспамовый фильтр моей почтовой программой может просто-напросто принять такое письмо за спам и у далить его с сервера, либо, если фильтр не сработает, то я сам могу не понять что означают эти темы, и, не глядя, удалить такое письмо, таким образом я не смогу узнать вашего мнения по этому вопросу.

Если у вас возникли какие-то вопросы, не стесняйтесь, задавайте. Для этого, всего лишь, пошлите на мой адрес письмо с вопросом и с темой, в которой обязательно укажите какого урока и какого языка касается вопрос. Например, тема может быть такой - «Основы PHP. Урок 12. Вопрос». Также, с такой же темой и на этот же адрес вы можете прислать и свои дополнения к уроку. Если дополнения будут существенными, то в последующих уроках они обязательно будут учтены.

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

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

Маленькая просьба. Многие из вас присылают мне запросы на отправку им того или иного, не полученного ранее, выпуска рассылки. У меня не всегда есть возможность это сделать. Поэтому предлагаю вам для начала посмотреть нужный выпуск в архиве рассылки. Рассылка выходит сразу на трех рассыльных сервисах, и по некоторым причинам (мне не известным) некоторые сервисы не принимают адресов, в которых встречаются именя конкурирующих рассыльных сервисов, по этой причине я опубликую только одну ссылку на архив рассылки только одного рассыльного сервиса, а именно Content.mail.ru. Вот ссылка на на этот архив рассылки - http://content.mail.ru/pages/p_21931.html. В обще м-то это объявление наверное лишнее, ведь в каждом выпуске каждой рассылки, вне зависимости от того, на каком сервисе она выходит, всегда указан этот самый адрес архива рассылки. На сабскрайб.ру и на контент.мэйл.ру этот адрес указывается в самом низу выпуска, а на мэйллист.ру - в самом верху выпуска. Так что, при достаточном внимании, вы сами легко сможете найти нужную ссылку на архив рассылки.

 

 
Внимание!!!
Все материалы уроков, публикуемых в этом и во всех последующих выпусках рассылки «Программирование в web», являются интеллектуальной собственностью авторов и ведущих рассылки. По всем вопросам размещения или публикации данных материалов на собственных ресурсах или где-либо еще, или иного использования, не связанного с личным ознакомлением и самостоятельным обучением, - обращайтесь на адрес автора. Любое использование этих материалов в коммерческих или иных целях, явно не разрешенное автором, является незаконным.
 

 
Наш проект и наши друзья
Автор рассылки — Anatolick
Архив рассылки — http://content.mail.ru/pages/p_21931.html
Сайт проекта — «Russian discussions Zone»
Движок для сайтов — «Tanat-Engine»
Проект Web Help — «Web-Help.int.ru»
Дискуссионный лист — «Все для Всех о РС»
Дискуссионный лист — «File Info Masters»
Дискуссионный лист — «Напряги мозги»
Дискуссионный лист — «Ищем все…»
Дискуссионный лист — «Все обо Всем по Email»
Дискуссионный лист — «Внимание! Розыск…»
Дискуссионный лист — «Английский для Всех и каждого»
Группа стандартизации в Web — W3C.org
 

В избранное