Глава 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’:
- S – фамилия
- N – имя
- F – отчество
Например:
- «S N» - «Фамилия Имя»
- «N F» - «Имя Отчество»
- «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("Иванов", "Фёдор", "Ильич", null, NCL::$TVORITELN)."\n"; //Ивановым Фёдором Ильичом
/**
* В формате не обязательно использовать все слова
*/
echo $nc->qFullName("Иванов", "Фёдор", "Ильич", NCL::$MAN, NCL::$TVORITELN, "N F")."\n"; //Фёдором Ильичом
/**
* Можно указать формат и не указывать пол человека
*/
echo $nc->qFullName("Иванов", "Фёдор", "Ильич", null, NCL::$TVORITELN, "S N")."\n"; //Ивановым Фёдором
/**
* Можно указать все параметры
*/
echo $nc->qFullName("Иванов", "Фёдор", "Ильич", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; //Ивановым Фёдором Ильичом
/**
* В строке-формате могут присутствовать любые символы
*/
echo $nc->qFullName("Иванов", "Фёдор", "Ильич", NCL::$MAN, NCL::$TVORITELN, "Фамилия: S, Имя: N, Отчество: F")."\n"; //Фамилия: Ивановым, Имя: Фёдором, Отчество: Ильичом
?>
Другие способы быстрого склонения
Помимо метода qFullName() есть еще три похожих метода:
- qFirstName($firstName, $CaseNumber=null, $gender=0)
- qSecondName($secondName, $CaseNumber=null, $gender=0)
- qFatherName($fatherName, $CaseNumber=null, $gender=0)
Каждый из них производит склонение по правилам имен/фамилий/отчеств в падеж $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::$DATELN, NCL::$MAN)."\n";
?>
Результат выполнения:
Николаевичу Array ( [0] => Андрей [1] => Андрея [2] => Андрею [3] => Андрея [4] => Андреем [5] => Андрее ) Касюку
Использование цепочек
Помимо вызова быстрых методов, есть возможность использовать цепочечные методы. Например:
echo $nc->fullReset()->setFirstName("Андрей")->setFatherName("Николаевич")->getFormatted(NCL::$RODITLN, "N F")."\n";
Для использования цепочек первым действием рекомендуется вызывать $nc->fullReset()->… для очистки результатов предыдущего склонения. После выполнения метода можно использовать следующие методы.
Для установки имени можно использовать любой из нижеперечисленных методов:
- setFirstName($firstname="")
- setName($firstname="")
Для установки фамилии можно использовать любой из нижеперечисленных методов:
- setSecondName($secondname="")
- setLastName($secondname="")
- setSirName($secondname="")
А также:
- setGender($gender=0) для установки пола NCL::$MAN или NCL::$WOMAN
- setFatherName($fathername="") для установки отчества
- setFullName($secondName="", $firstName="", $fatherName="") для установки всего ФИО
После того, как все необходимая информация была установлена можно вызвать метод 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] => Павле Илларионовиче Афросинине ) Романчуку