PHP中的一些雜項函數(shù)學(xué)習(xí)今天來學(xué)習(xí)的這些雜項函數(shù)在官方文檔中都是放在一個雜項擴(kuò)展中的,其實這些函數(shù)都并不是什么什么特別的擴(kuò)展,也不需要安裝什么東西就可以使用,它們就是一些簡單的功能函數(shù)而已。當(dāng)然,其中不少內(nèi)容也是我們經(jīng)常會使用的,這里就帶大家一起再學(xué)習(xí)學(xué)習(xí)。 常量操作常量的操作相信對于我們?nèi)粘J褂?PHP 開發(fā)的小伙伴來說絕對不會陌生。不管是使用框架還是自己寫代碼,經(jīng)常會使用到常量相關(guān)的內(nèi)容。 define("A", "Test A");簡單地定義常量就是使用 define() 這個函數(shù),它有兩個參數(shù),第一個參數(shù)是常量的名稱,第二個參數(shù)就是常量的值。這里需要注意的是,常量的值只能是標(biāo)量類型,也就是數(shù)字、字符串這類的內(nèi)容,不能是變量或者對象類型,因為這類型的內(nèi)容都有隨時改變的可能。 直接使用常量名就可以打印出常量的內(nèi)容,當(dāng)然,我們也可以使用 constant() 這個函數(shù)來獲取常量的內(nèi)容,它可以接收字符串類型的參數(shù)的常量名。 defined() 這個函數(shù)是用于判斷指定的常量是否存在,它只比 define() 函數(shù)多了一個字母 d ,在使用的時候要小心,不要在定義常量的時候多寫了這個 d 哦。 對于接口和類來說,也可以在它們的內(nèi)部使用 const 關(guān)鍵字來定義內(nèi)部常量。 interface A1{內(nèi)部常量是有作用域范圍的,它們只在類的內(nèi)部生效。而且在默認(rèn)情況下,這些常量直接就是靜態(tài)類型的,不需要我們再單獨添加 static 關(guān)鍵字。 代碼高亮及文件格式相關(guān)我們可以使用一個函數(shù),來讓代碼實現(xiàn)高亮的效果。其實也就是給指定的代碼內(nèi)容增加了 code 以及一些格式標(biāo)簽。 var_dump(highlight_string('<?php phpinfo(); ?>', true));highlight_string() 的第二個參數(shù)是指定返回的類型,如果我們不給這個參數(shù)的話,它的默認(rèn)值是 false ,這樣調(diào)用 highlight_string() 時就會直接輸出而不是將內(nèi)容作為返回值返回。也就是說,像 phpinfo() 這類函數(shù)一樣,它會直接將結(jié)果打印出來。 另外,我們也可以直接對一個文件里面的內(nèi)容進(jìn)行高亮操作。 var_dump(highlight_file('1.PHP中的一些雜項函數(shù)學(xué)習(xí).php', true));highlight_file() 函數(shù)的第一個參數(shù)需要的是一個文件的路徑,而第二個參數(shù)的作用就和 highlight_string() 中的第二個參數(shù)的作用是一樣的。另外,highlight_file() 還有一個別名函數(shù)叫做 show_source() 。 除了代碼高亮的功能之外,還有一個函數(shù) php_strip_whitespace() 可以幫助我們直接去掉代碼中的空格和換行以及注釋內(nèi)容。就像壓縮代碼之類的工具一樣。 var_dump(php_strip_whitespace("1.PHP中的一些雜項函數(shù)學(xué)習(xí).php"));時間操作函數(shù)在雜項函數(shù)中,也有一些時間相關(guān)的操作函數(shù),比如系統(tǒng)運行的時間。 echo hrtime(true), PHP_EOL; // 2636292334692在之前的文章中我們其實有講過這個 hrtime() 函數(shù)的作用。它返回的是當(dāng)前操作系統(tǒng)開機到現(xiàn)在經(jīng)過的時間,比如我的電腦是早上開機的,從開機到現(xiàn)在只經(jīng)過了 2636 秒。它返回的是納秒級別的,如果不加那個布爾類型為 true 的參數(shù)的話,它就會以數(shù)組的形式返回,0 下標(biāo)的是秒數(shù),1 下標(biāo)的是納秒數(shù)。而如果加了 true 參數(shù)的話,它就會直接以數(shù)字格式返回整體的秒加上納秒數(shù)。 另外一些時間相關(guān)的函數(shù)就是暫停程序執(zhí)行的一些函數(shù),比如我們經(jīng)常會用到的 sleep() 函數(shù)。 $time = microtime(true);sleep() 是以秒為間隔暫停程序的執(zhí)行。而其它的兩個函數(shù) usleep() 則是以微秒, time_nanosleep() 是以納秒來進(jìn)行暫停的。最后一個 time_sleep_until() 所需要的參數(shù)則是暫停到指定的時間,比如這里我們指定在三秒后暫停,它需要的參數(shù)就是 time() + 3 這個時間戳。當(dāng)然,我們在日常開發(fā)中最常用的還是 sleep() 和 usleep() 。這里大家可以當(dāng)做擴(kuò)充一下知識點,我們 PHP 是可以實現(xiàn)納秒級的暫停的。 生成唯一ID生成唯一ID這個函數(shù)相信不少同學(xué)也經(jīng)常使用,就是那個 uniqid() 函數(shù)。不過它的原理和參數(shù)你了解嘛? var_dump(uniqid()); // string(13) "5ff270b0014b4"uniqid() 是基于當(dāng)前時間微秒數(shù)來生成唯一ID的,也就說它并不能完全地保證生成的這個 ID 是唯一的。在超大并發(fā)的前提下,很有可能在一微秒內(nèi)就有多個請求到達(dá),所以也是有可能生成多個重復(fù)的 ID 的。 在這種情況,我們可以通過它的參數(shù)來讓生成的 ID 更具有的唯一性。第一個參數(shù)是可以指定生成 ID 的前綴,對于不同的業(yè)務(wù)或者不同的負(fù)載均衡之后的處理機器我們就可以使用不同的前綴來進(jìn)行區(qū)分。第二個參數(shù)則是在返回的字符串結(jié)尾增加額外的熵,它可以進(jìn)一步提升唯一性的可能性。 其它函數(shù)除了上面介紹的那些比較常見和常用的函數(shù)外,雜項函數(shù)中還包含其它一些不是那么常用的內(nèi)容。 系統(tǒng)負(fù)載我們可以通過一個函數(shù) sys_getloadavg() 來查看當(dāng)前操作系統(tǒng)的負(fù)載情況,返回的結(jié)果數(shù)組對應(yīng)的就是 Linux 系統(tǒng)中的 1m 、5m 和 15m 的負(fù)載情況。 var_dump(sys_getloadavg());執(zhí)行代碼eval() 這個函數(shù)和 JavaScript 中的 eval() 不管名稱還是作用都是一樣的,可以解析并運行一個字符串中的 PHP 代碼。不過需要注意的是,它也是屬于危險函數(shù)哦。要運行的字符串一定是我們自己可控的內(nèi)容,千萬不要運行用戶能夠上傳的內(nèi)容哦。 eval("echo '123', PHP_EOL;"); // 123退出中斷程序exit;exit() 和 die() 不用過多介紹了,它們兩個的作用是一樣的,可以將 die() 看成是 exit() 的別名。如果在沒有參數(shù)的情況下,可以省略不寫后面的括號。而參數(shù)的作用是在中斷程序運行后進(jìn)行輸出。如果參數(shù)是字符串,則直接輸出字符串的內(nèi)容,如果參數(shù)是數(shù)字,則相當(dāng)于是返回程序的運行狀態(tài)碼,和 Linux 中的狀態(tài)碼是一樣的概念。 瀏覽器信息當(dāng)我們使用瀏覽器訪問的時候,可以通過 get_browser() 函數(shù)來獲得瀏覽器的一些信息。 var_dump(get_browser(null, true));需要注意的是,這個函數(shù)需要一個 browscap.ini 文件的支持,可以從 http:// 這里下載到 browscap.ini 文件,并在 php.ini 文件中指定 browscap 的路徑到你下載的這個 browscap.ini 文件。這個函數(shù)非常少見,大家了解一下即可。 連接信息最后就是關(guān)于 PHP 腳本的連接信息的查看,也就是腳本與客戶端的連接信息的查看。 ignore_user_abort(true);ignore_user_abort() 函數(shù)用于設(shè)置客戶端斷開連接時是否中斷腳本的執(zhí)行,當(dāng)我們訪問這個測試頁面后,馬上在瀏覽器上關(guān)閉它,就會觸發(fā)這個函數(shù)。 下面的無限循環(huán)代碼是用于監(jiān)控當(dāng)前連接的狀態(tài),使用的是 connection_status() 這個函數(shù),當(dāng)它的值為 0 時,也就是 CONNECTION_NORMAL 這個狀態(tài)是屬于正常連接的狀態(tài),而當(dāng)它不為 0 的時候,我們就記錄到一個日志文件中。connection_aborted() 是判斷連接是否中斷的函數(shù),這是一個直接輸出流的函數(shù),我們需要通過 輸入輸出流 來捕獲它的內(nèi)容。 最后,當(dāng)瀏覽器關(guān)閉的時候,連接相關(guān)的內(nèi)容就記錄到了 1.txt 這個文件中。我們可以查看這個文件里面的信息。 總結(jié)怎么樣,今天的內(nèi)容雖然是 PHP 文檔中的雜項擴(kuò)展,而且內(nèi)容也確實很雜,但它們有不少內(nèi)容確實是我們經(jīng)常使用的。掌握好它們,擴(kuò)寬自己的眼界,總有一天這些內(nèi)容會為你帶來福報,加油吧,打工人。 測試代碼: https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/01/source/1.PHP中的一些雜項函數(shù)學(xué)習(xí).php 參考文檔: https://www./manual/zh/book.misc.php |
|
|