Архив метки: php

Аналог strtotime в Java

На работе пишем новый проект, который перевернёт мир рекламы. Проект пишем на Java. Почему на Java? Хуй его знает. Без меня решили. Пишем, так пишем. Значит надо учить Java. Язык хороший, мощный. Немного смущает строгая типизация и линейное мышление, привитое php.

А ещё иногда очень не хватает простых функций вроде strtotime.

Для форматирования даты в нужный формат в php требуется 2 функции: strtotime и date.

date('Y-m-d', strtotime('дата в любом формате'));

В Java всё немного иначе.

// Создаём объект SimpleDateFormat для даты из которой будем форматировать. Дата должна быть указанного формата.
SimpleDateFormat dateSourceObject = new SimpleDateFormat("dd.MM.yyyy");

// Создаём объект SimpleDateFormat для даты в которую будем форматировать.
SimpleDateFormat dateResultObject = new SimpleDateFormat("yyyy-MM-dd");

// Форматируем дату
dateResultObject.format(dateSourceObject.parse('дата в формате dd.MM.yyyy'));

Плюсы в Java:

  • Строгая типизация
  • ООП
  • Java это круто

Плюсы в php: просто и быстро

Для преверженцев ООП есть вариант и в php:

$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');


Правда здесь необходимо указать формат даты, из которой будем форматировать.

Установка php 5.6 на CentOS 6.3

Чтобы поставить php 5.4 на CentOS необходимо подключить дополнительные репозитории:


rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Теперь ставим php из репозитория remi:


yum --enablerepo=remi,remi-test install php php-common php-devel

И добавляем необходимые модули:


yum --enablerepo=remi,remi-test install php-pear php-pdo php-mysql php-gd php-mbstring php-mcrypt php-xml

Также будет полезно установить акселератор, например Alternative PHP Cache:


yum --enablerepo=remi,remi-test install php-pecl-apc

Изменение регистра символов

Необходимо было проверить строку на наличие слов, написанных в верхнем регистре и заменить их на слово в нижнем регистре, но с заглавным первым символом.
Функция ctype_upper не подошла, т.к. плохо работает с кириллицей.

Написал такую функцию:

function lower($str, $charset='UTF-8')
{
	//	Разбиение строки.
	$tmp = explode(' ', $str);

	if (is_array($tmp) && 0 < ($count = count($tmp)))
	{
		for ($i=0;$i<$count;$i++)
		{
			/**
			 * Для определения кириллицы используется тождественное сравнивание,
			 *  т.к. ctype_upper работает некорректно.
			 * 
			 */
			if ($tmp[$i] !== mb_strtolower($tmp[$i], $charset))
			{
				$tmp[$i] = mb_convert_case(mb_strtolower($tmp[$i], $charset), MB_CASE_TITLE, $charset);
			}
		}
	}
	$str = implode(' ', $tmp);
	return $str;
}

Использовать можно так:

$str = 'Записки WEB-ПРОГРАММИСТА';
echo lower($str); // Записки Web-Программиста

Условия в if

В стандартах кодирования в разделе «форматирование блоков if then else» написано, что при сравнении константы необходимо ставить слева, т.е.

if (1 == $var)

Сегодня задумался по поводу сравнения с булевыми константами.
Как лучше писать

if (true === $var)

или использовать восклицательный знак (!)

if (!$var)