明天咱们来学习的一个扩大同时它也是十分小众的一个扩大,其实说白了,或者是基本没什么人用过得扩大。当然,咱们也只是出于学习的目标来看看这个扩大到底是什么货色,有什么好玩的中央。
扩大阐明
Gender 扩大从名称就能够看出,它是一个对于性别的扩大,这个扩大能够依据传递给它的用户姓名以及用户所在的地区国家来返回性别状况,是不是十分有意思。这个扩大间接在 PECL 网站进行下载安装即可,没有什么别的非凡的要求。
Gender 扩大是依据 Joerg Michael 这位大神所写得 gender.c 这个函数库来应用的,据说是蕴含 54 个国家地区的 40000 多个名字。具体的状况咱们在上面的测试代码中好好看看它的成果。
依据姓名判断性别
在应用这个扩大的时候,咱们要先筹备一个函数,其实就是不便咱们前面的测试操作的。
$gender = new Gender\Gender;
function showGender($name, $country)
{
global $gender;
$result = $gender->get($name, $country);
var_dump($result);
$data = $gender->country($country);
var_dump($data);
switch ($result) {
case Gender\Gender::IS_FEMALE:
printf("%s:女性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_MOSTLY_FEMALE:
printf("%s:大部分状况下是女性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_MALE:
printf("%s:男性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_MOSTLY_MALE:
printf("%s:大部分状况下是男性 - %s\n", $name, $data['country']);
break;
case Gender\Gender::IS_UNISEX_NAME:
printf("%s:中性名称(不好确认性别)- \n", $name, $data['country']);
break;
case Gender\Gender::IS_A_COUPLE:
printf("%s:男女都实用 - %s\n", $name, $data['country']);
break;
case Gender\Gender::NAME_NOT_FOUND:
printf("%s:对应的国家字典中没有找到相干信息 - %s\n", $name, $data['country']);
break;
case Gender\Gender::ERROR_IN_NAME:
echo "给定的姓名信息谬误 \n";
break;
default:
echo "谬误!\n";
break;
}
}
首先,实例化一个 Gender 对象,而后定义一个函数。在这个函数中,咱们打印了 Gender 类中的 get() 办法所返回的信息,它返回的信息就是 $gender 对象依据指定参数所返回的性别断定值。而后咱们通过上面的 switch 来判断返回的值是否与类中的常量所对应,这样就晓得返回的后果是什么了。country() 办法取得的是指定国家地区的详细信息,咱们在前面的测试代码中能够看到它们的输入。
showGender("William", Gender\Gender::USA);
// int(77)
// array(2) {// ["country_short"]=>
// string(3) "USA"
// ["country"]=>
// string(6) "U.S.A."
// }
// William:男性 - U.S.A.
showGender("Ayumi Hamasaki", Gender\Gender::JAPAN);
// int(70)
// array(2) {// ["country_short"]=>
// string(3) "JAP"
// ["country"]=>
// string(5) "Japan"
// }
// Ayumi Hamasaki:女性 - Japan
接下来就是简略地进行测试,先是测试一个英文的名字,并且指定国家地区为 USA,也就是美国。能够看到 get() 返回的值是 77,对应的是 IS_MALE 的常量值,也就是这是一个男性的名称。country() 函数返回的内容是国家的全称与简写信息。在第二段测试中,咱们给定的是一个日本女性的名字(滨崎步的英文名字),能够看到也失常返回了女性以及国家的相干信息。那么,这个扩大反对中文吗?
道歉,它是不反对中文的,所以咱们须要应用中文的拼音名称,而且对于指定国家地区为 CHINA 的话,应用拼音名称返回的都是中性的名称(不分男女都能够应用的名字)。
howGender("Gang Qiang", Gender\Gender::CHINA);
// int(63)
// array(2) {// ["country_short"]=>
// string(3) "CHN"
// ["country"]=>
// string(5) "China"
// }
// Gang Qiang:中性名称(不好确认性别)showGender("Anna Li", Gender\Gender::CHINA);
// int(70)
// array(2) {// ["country_short"]=>
// string(3) "CHN"
// ["country"]=>
// string(5) "China"
// }
// Anna Li:女性 - China
额,貌似很坑啊,这货色对咱们来说并没有什么理论的用途。因为这个扩大的材料非常少,面向中文的材料更是齐全查不到,所以我也不晓得它到底是不是依据拼音来确定中文名称的。齐全的中文会间接返回 NAME_NOT_FOUND 信息。所以,大家图个乐就好啦!
总结
不得不说,如果没有刷文档还真不知道 PHP 中居然还提供了这样的一个扩大库。其实有趣味的同学齐全能够尝试本人写一个可能判断中文名称的相似的扩大库进去,虽说在理论的业务开发中可能并不罕用,但齐全能够当做一个开源的练手机会晋升一下本人的 C 语言技术。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/1.PHP 中一个好玩的性别判断扩大.php
参考文档:
https://www.php.net/manual/zh/book.gender.php
各自媒体平台均可搜寻【硬核项目经理】