Как стать автором
Обновить

Склонение ФИО — NameCaseLib PHP Framework

Здравствуй, Хабрахабр!

Сегодня я расскажу о небольшом, но очень полезном фреймворке — NameCaseLib.

Я думаю, многие сталкивались с ситуацией, когда было необходимо просклонять Фамилию, Имя и Отчество человека по падежам. Данный фреймворк поможет нам избавиться от многочисленных «велосипедов».

Установка


Для работы NameCaseLib нам понадобится PHP5 и библиотека php_mbstring, для работы с текстом в формате UTF-8.

Отлично, теперь осталось подключить сам фреймворк, для этого скачаем необходимые файлы.

NameCaseLib поддерживает два языка: русский и украинский. Файл NCL.NameCase.ru.php содержит русские правила склонения, NCL.NameCase.ua.php, соответственно, украинские. В папке NCL расположено само «ядро» фреймворка, то есть, набор основных функций.

Итак, давайте создадим файл в формате .php, и проверим работоспособность данного фреймворка.

<?
	# Указываем кодировку.
	header('Content-type: text/html; charset=utf-8');
	# Подключаем русские правила склонения.
	require 'NCL.NameCase.ru.php';
	# Объявляем объект класса.
	$case = new NCLNameCaseRu();
	# Метод q - склоняет Фамилию, Имя и Отчество человека по правилам пола.
	$array = $case->q("Максимов Александр Васильевич");
	# Выводим получившийся массив. (Примечание: возвращает простой индексируемый массив)
	var_dump($array);
?>


Соответственно, таким же образом, мы можем склонять и украинские ФИО, подключив украинские правила склонения.

Но, давайте все-таки разберем, какие параметры содержит в себе метод q, и как его еще можно использовать?

Данный метод имеет 3 параметра, 2 из них — можно не указывать. Первый параметр — ФИО человека, второй — падеж (Список констант приведу ниже; в случае, если не указан падеж (NULL), то метод возвращает все падежи), и третий — пол человека. (Константы, также, приведены ниже; если не указать пол (NULL), метод определит его сам)

Константы


Для указания пола используются константы:

  • NCL::$MAN – мужской пол
  • NCL::$WOMAN – женский пол


Для указания падежей русского языка:

  • NCL::$IMENITLN — именительный падеж
  • NCL::$RODITLN — родительный падеж
  • NCL::$DATELN — дательный падеж
  • NCL::$VINITELN — винительный падеж
  • NCL::$TVORITELN — творительный падеж
  • NCL::$PREDLOGN — предложный падеж


Для указания падежей украинского языка:

  • NCL::$UaNazyvnyi – називний відмінок
  • NCL::$UaRodovyi – родовий відмінок
  • NCL::$UaDavalnyi – давальний відмінок
  • NCL::$UaZnahidnyi – знахідний відмінок
  • NCL::$UaOrudnyi – орудний відмінок
  • NCL::$UaMiszevyi – місцевий відмінок
  • NCL::$UaKlychnyi – кличний відмінок


Примечания


  1. Порядок расположения ФИО не имеет значения.
  2. Не имеет значение, в каком регистре указаны ФИО, после склонения, метод возвращает сохраненный регистр букв.


Определение части ФИО



С помощью метода getFullNameFormat, мы можем определить часть, или какие части ФИО мы используем.

<?
	# Указываем кодировку.
	header('Content-type: text/html; charset=utf-8');
	# Подключаем русские правила склонения.
	require 'NCL.NameCase.ru.php';
	# Объявляем объект класса.
	$case = new NCLNameCaseRu();
	# Метод getFullNameFormat — разбивает строку и возвращает формат, в котором записано имя.
	$fullName = $case->getFullNameFormat("Максимов Александр Васильевич");
	/* Мы получаем формат вида: S F N, где:
          - S - Фамилия
          - N - Имя
          - F - Отчество
    */
	echo $fullName;
?>


Но, что же делать, если все-таки фреймворк не может правильно определить, как склонять выбранное вами ФИО?

Для этого в библиотеке предусмотрен метод qFullName, который позволяет указать Фамилию, Имя, Отчество и пол человека в определенной последовательности.

<?
	# Указываем кодировку.
	header('Content-type: text/html; charset=utf-8');
	# Подключаем русские правила склонения.
	require 'NCL.NameCase.ru.php';
	# Объявляем объект класса.
	$case = new NCLNameCaseRu();
	# Параметры метода: qFullName(Фамилия, Имя, Отчество, пол, падеж, формат); Все параметры являются необязательными, если, например, не указать пол — система сама определит его.
	echo $nc->qFullName("Максимов", "Александр", "Васильевич", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n";
?>


Итоги


NameCaseLib — действительно удобный фреймворк, который включает в себя много полезных функций. На сайте имеется полная документация на русском языке.

Проект на github.
Официальный сайт.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.