Pull to refresh

Склонение ФИО — 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.
Официальный сайт.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.