Архив PHP

Изобретаем велосипед: форма слова в зависимости от числа

Posted in Разное с тегами on 13 Май 2008 by theifish

Понадобилось недавно выводить «очеловеченный» текст, чтобы не было казусов вроде: «У вас есть 1 непрочитанных сообщений». Поверхностый поиск в Google не дал быстрого результата, поэтому я решил, что иногда быстрее самому сделать велосипед, тем более такой маленький. Вот что получилось:

function rus_wordform($var, $form1, $form2, $form3) {
$lastnum = $var%100;
if ($lastnum>4 && $lastnum<21) {
echo $form3;
} else {
$lastnum = $var%10;
if ($lastnum == 1) {
echo $form1;
} elseif ($lastnum>1 && $lastnum<5) {
echo $form2;
} else {
echo $form3;
}
}
}

$var – это соответсвенно само число,
$form1 – это первая форма слова (например: сообщение),
$form2 – это вторая форма слова (например: сообщения),
$form3 – это третья форма слова (например: сообщений).

Соответственно,

$i = 53;
echo «У вас есть $i нов».rus_wordform($i, ‘ое’, ‘ых’, ‘ых’);.» сообщени».rus_wordform($i, ‘е’, ‘я’, ‘й’);

выдаст:

У вас есть 53 новых сообщения

Уходим с честью – register_shutdown_function в PHP

Posted in PHP с тегами , on 16 Март 2008 by theifish

Иногда приходится по тем или иным причинам завершать скрипт, но это не всегда выглядит красиво. Не очень то хочется показывать пользователю информацию о фатальной ошибке или черный экран(когда отключен показ ошибок). В PHP есть функция register_shutdown_function, позволяющая установить функцию, которая будет вызвана при завершении выполнения скрипта. Это значит, что указанная функция будет запущена когда наш скрипт удачно завершит выполнение или аварийно закончится. Добавив переменную, которая в самом начале выполнения скрипта будет установлена в false, а в самом конце в true, мы сможем проверить был ли скрипт завершен удачно или произошло аварийное заврешение. Здесь приведен очень простой пример, который показывает как вы сможете сообщить пользователю о произошедшей фатальной ошибке. Также необходимо отключить сообщения об ошибках, чтобы все это выглядело прилично.

<?php
$clean = false;
function shutdown_func(){
global $clean;
if (!$clean){
die(”not a clean shutdown”);
}
}

register_shutdown_function(’shutdown_func’);

$a = 1;
$a = new FooClass(); // will fail with fatal

$clean = true;
?>

Как видно из скрипта, shutdown_func будет выводить текст только если переменная $clean равна false, то есть при ошибке.

Нашел здесь: http://eirikhoem.wordpress.com/2008/03/15/dying-with-grace-phps-register_shutdown_function/