PHP中一個好玩的性別判斷擴展
今天我們來學習的一個擴展同時它也是非常小眾的一個擴展,其實說白了,或許是根本沒什麼人用過得擴展。當然,我們也只是出於學習的目的來看看這個擴充到底是什麼東西,有什麼好玩的地方。
擴充說明
Gender 擴充功能從名稱就可以看出,它是一個關於性別的擴展,這個擴充可以根據傳遞給它的使用者姓名以及使用者所在的地區國度來返回性別狀況,是不是非常有意思。這個擴充功能直接在 PECL 網站進行下載安裝即可,沒有別的特殊的要求。
Gender 擴充功能是根據 Joerg Michael 這位大神所寫得 gender.c 這個函式庫來使用的,據說是包含 54 個國家地區的 40000 多個名字。具體的情況我們在下面的測試程式碼中好好看看它的效果。
最新開班資訊:16期PHP全端線上班,今晚20:00(6.28)開課!詳見:https://www.php.cn/k.html
#根據姓名判斷性別
在使用這個擴充的時候,我們要先準備一個函數,其實就是方便我們後面的測試操作的。
$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
以上是PHP中一個好玩的性別判斷擴展的詳細內容。更多資訊請關注PHP中文網其他相關文章!