Глава 5. Явное указание ФИО

Библиотека отлично справляется со склонением русских и украинских ФИО. Иногда система склоняет ФИО не правильно. Чаще всего это связано с тем, что не возможно точно определить имя это, или фамилия, а так же не всегда можно правильно определить пол человека.

Для того чтобы этого избежать в библиотеке есть возможность явно указать имя, фамилию, отчество а так же пол.

Есть два способа для явного указания ФИО.

В библиотеке есть метод qFullName($secondName="", $firstName="", $fatherName="", $gender=0, $caseNum=0, $format="S N F"). В нем есть три необязательных параметра: $secondName (фамилия), $firstName (имя), $fatherName (отчество). Так же есть необязательный параметр $gender который принимает значения NCL::$MAN, NCL::$WOMAN. Если пол не указать, система определит его самостоятельно.

Параметр $caseNum указывает номер падежа, подробнее про номер падежа в разделе «Встроенные константы». Если его не указать, тогда метод вернет массив со всеми падежами.

Форматированный вывод

Параметр $format отвечает за форматированный вывод ФИО. $format — это строка, которая содержит шаблон, по которому будет выведено ФИО. Шаблон имеет вид ‘S N F’:

Например:

В методе qFullName() мы можем указать любой удобный формат. Некоторые примеры представлены в файле Tutorial/lesson5.1.php

<?php
    header
('Content-type: text/html; charset=utf-8');
    require 
'../Library/NCL.NameCase.ru.php';
    
$nc = new NCLNameCaseRu();

    
/**
    * Можно не указывать пол и формат
    */
    
echo $nc->qFullName("Иванов""Фёдор""Ильич"nullNCL::$TVORITELN)."\n"//Ивановым Фёдором Ильичом

    /**
    * В формате не обязательно использовать все слова
    */
    
echo $nc->qFullName("Иванов""Фёдор""Ильич"NCL::$MANNCL::$TVORITELN"N F")."\n"//Фёдором Ильичом

    /**
    * Можно указать формат и не указывать пол человека
    */
    
echo $nc->qFullName("Иванов""Фёдор""Ильич"nullNCL::$TVORITELN"S N")."\n"//Ивановым Фёдором

    /**
    * Можно указать все параметры
    */
    
echo $nc->qFullName("Иванов""Фёдор""Ильич"NCL::$MANNCL::$TVORITELN"S N F")."\n"//Ивановым Фёдором Ильичом

    /**
    * В строке-формате могут присутствовать любые символы
    */
    
echo $nc->qFullName("Иванов""Фёдор""Ильич"NCL::$MANNCL::$TVORITELN"Фамилия: S, Имя: N, Отчество: F")."\n"//Фамилия: Ивановым, Имя: Фёдором, Отчество: Ильичом
    
?>

Другие способы быстрого склонения

Помимо метода qFullName() есть еще три похожих метода:

Каждый из них производит склонение по правилам имен/фамилий/отчеств в падеж $CaseNumber. Если падеж $CaseNumber не указан, возвращается массив со всеми падежами. Необязательный параметр $gender принимает NCL::$MAN или NCL::$WOMAN, если пол не указан, система определяет его самостоятельно.

В качестве примера можно использовать файл Tutorial/lesson5.2.php

<?php
    header
('Content-type: text/html; charset=utf-8');
    require 
'../Library/NCL.NameCase.ru.php';
    
$nc = new NCLNameCaseRu();

    
/**
    * Пол можно не указывать
    */
    
echo $nc->qFatherName("Николаевич"NCL::$DATELN)."\n";

    
/**
    * Если не указать падеж, получим массив со всеми падежами.
    */
    
print_r($nc->qFirstName("Андрей"));

    
/**
    * В ситувациях, когда не возможно определить пол, его полезно указать.
    */
    
echo $nc->qSecondName("Касюк"NCL::$DATELNNCL::$MAN)."\n";
    
?>

Результат выполнения:

Николаевичу
Array
(
    [0] => Андрей
    [1] => Андрея
    [2] => Андрею
    [3] => Андрея
    [4] => Андреем
    [5] => Андрее
)
Касюку

Использование цепочек

Помимо вызова быстрых методов, есть возможность использовать цепочечные методы. Например:

echo $nc->fullReset()->setFirstName("Андрей")->setFatherName("Николаевич")->getFormatted(NCL::$RODITLN, "N F")."\n";

Для использования цепочек первым действием рекомендуется вызывать $nc->fullReset()->… для очистки результатов предыдущего склонения. После выполнения метода можно использовать следующие методы.

Для установки имени можно использовать любой из нижеперечисленных методов:

Для установки фамилии можно использовать любой из нижеперечисленных методов:

А также:

После того, как все необходимая информация была установлена можно вызвать метод getFormatted($caseNum=0, $format="S N F"), где $caseNum номер падежа, а $format — формат вывода ФИО. Подробнее про номер падежа написано во «Встроенные константы», а про формат вывода в «Форматированный вывод».

Пример использования цепочек находится в файле Tutorial/lesson5.3.php.

<?php
header
('Content-type: text/html; charset=utf-8');
require 
'../Library/NCL.NameCase.ru.php';
$nc = new NCLNameCaseRu();

/**
 * В цепочках может вызыватся любое количество методов
 */
echo $nc->fullReset()->setFirstName("Андрей")->setFatherName("Николаевич")->getFormatted(NCL::$RODITLN"N F")."\n";

/**
 * Заканчиваются методы вызовом метода getFormatted(), который возвращает искомую строку
 */
print_r($nc->fullReset()->setFullName("Афросинин""Павел""Илларионович")->getFormatted(null"N F S"));

/**
 * Начинаются все цепочки с вызова метода fullReset();
 */
echo $nc->fullReset()->setSecondName("Романчук")->setGender(NCL::$MAN)->getFormatted(NCL::$DATELN);
?>

Результат выполнения:

Андрея Николаевича
Array
(
    [0] => Павел Илларионович Афросинин
    [1] => Павла Илларионовича Афросинина
    [2] => Павлу Илларионовичу Афросинину
    [3] => Павла Илларионовича Афросинина
    [4] => Павлом Илларионовичем Афросининым
    [5] => Павле Илларионовиче Афросинине
)
Романчуку