PHP7函數型別限定是否對效能有影響?以下這篇文章就來聊聊PHP7函數資料型態限定設定與否對效能的影響,希望對大家有幫助!
本文主要透過簡單的壓測來探討PHP7函數資料型別限定設定與否對效能的影響,另外,分享下自己兩個工作中所遇到的小問題及其應對,如有錯誤,懇請指正。
PHP7函數型別限定
(1) 介紹
- 函數參數型別限定(包含傳回值、成員屬性)從PHP5開始支援的,但是支援的類型不多,PHP7做了擴展:int/string/bool/object 等
-
#作用
- ##避免錯誤調用,標明類型,只能傳遞同類型的參數,尤其多人協同開發時。
- 推薦學習:《
PHP影片教學》
如果不是可以自動轉換資料類型,如下,當然前提是待轉換類型可以正常轉換 - #而本文正是測試型別限定對效能的影響程度
function testInt(int $intNum){ var_dump($intNum); } testInt("123"); // int(123)
注意 參數、回傳值如果跟設定的型別不一致時會報錯,不是百分百確認的需要手動轉換下 - 推薦學習:《
(2) 壓測
- #運行環境##PHP 7.2.34
- Laravel 5.8
- AB 2.3
單一設定 -
型號 MacBook Pro
- #處理器名稱 Quad-Core Intel Core i7
- 記憶體 8 GB
- 核總數 4
-
##使用AB (Apache Benchmark) 進行壓測,由於不是正式的壓測,所以這裡只關心綜合指標:Requests per second (平均每秒請求數)
- 主要參數
-
-n 壓測請求數
- -c 並發數
- -p POST請求時指定所需攜帶參數的檔案
- #-r遇到錯誤回應不退出,作業系統有防高並發攻擊保護措施(apr_socket_recv: Connection reset by peer)
/***** 1 普通接口 *****/ // CommonUserController public function createUser(Request $request) { $this->validate($request, [ 'name' => 'required|string', 'age' => 'required|integer', 'sex' => ['required', Rule::in([1, 2])], ]); (new CommonUserModel())->createUser($request['age'], $request['name'], $request['sex'], $request['address'] ?? ''); return response()->json(['status' => 200, 'msg' => 'ok']); } // CommonUserModel public function createUser($sex, $age, $name, $address) { if(empty($sex) || empty($age) || empty($name)) return false; // 省略DB操作 return true; } /***** 2 类型限定接口 *****/ // TypeUserController public function createUser(Request $request): JsonResponse { $this->validate($request, [ 'name' => 'required|string', 'age' => 'required|integer', 'sex' => ['required', Rule::in([1, 2])], ]); (new TypeUserModel())->createUser($request['age'], $request['name'], $request['sex'], $request['address'] ?? ''); return response()->json(['status' => 200, 'msg' => 'ok']); } // TypeUserModel public function createUser(int $age, string $name, int $sex, string $address): bool { if(empty($sex) || empty($age) || empty($name)){ return false; } // 省略DB操作 return true; }
(3) 實作
/*****第一次*****/ // 类型限定接口 rps=456.16 ab -n 100 -c 10 -p '/tmp/ab_post_data.json' -T 'application:json' http://www.laravel_type_test.com/api/type/create_user // 普通接口 rps=450.12 ab -n 100 -c 10 -p '/tmp/ab_post_data.json' -T 'application:json' http://www.laravel_type_test.com/api/common/create_user /*****第二次*****/ // 类型限定接口 rps=506.74 ab -n 1000 -c 100 -p '/tmp/ab_post_data.json' -T 'application:json' http://www.laravel_type_test.com/api/type/create_user // 普通接口 rps=491.24 ab -n 1000 -c 100 -p '/tmp/ab_post_data.json' -T 'application:json' http://www.laravel_type_test.com/api/common/create_user /*****第三次*****/ // 类型限定接口 rps=238.43 ab -n 5000 -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user // 普通接口 rps=237.16 ab -n 5000 -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user /*****第四次*****/ // 类型限定接口 rps=209.21 ab -n 10000 -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user // 普通接口 rps=198.01 ab -n 10000 -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user /*****第五次*****/ // 类型限定接口 rps=191.17 ab -n 100000 -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user // 普通接口 rps=190.55 ab -n 100000 -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user
- (4) 結果
- 類型限定對效能的提升沒有預期的大,很微小,不過還是推薦這種寫法
-
程式設計影片
#更多程式相關知識,請造訪: ! !
以上是聊聊PHP7函數類型限定是否對效能有影響? (測試探討)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文詳細介紹了將PHP 5.6升級為PHP 7的升級,並強調了關鍵步驟,例如備份,檢查服務器兼容性以及選擇升級方法(軟件包管理器,編譯,控制面板或Web服務器配置)。 它解決了Potentia

本文解釋瞭如何使用新遺物監視PHP 7應用程序性能。 它詳細詳細介紹了新的Relic的設置,關鍵績效指標(KPI),例如APDEX分數和響應時間,通過交易軌蹟的瓶頸標識和錯誤軌跡

本文詳細介紹了部署PHP 7應用程序,涵蓋方法(FTP,SSH,部署工具),服務器配置(Apache/nginx,php-fpm),數據庫設置和重要的安全考慮因素。 它突出了服務器compatib等常見挑戰

本文指導PHP 7開發人員使用GIT進行版本控制。 它涵蓋了初始化,分期,投入,忽略文件,遠程存儲庫,分支,合併,解決衝突和基本的GIT命令。 效率的最佳實踐

本文解釋了使用具有PHP 7的Docker,涵蓋了Dockerfile的創建,圖像構建和容器運行時。 它詳細介紹了安全性最佳實踐(非根本用戶,依賴關係更新,輸入驗證),使用Docker Comp的多服務管理

本文說明瞭如何使用Xdebug進行調試PHP 7代碼。 它涵蓋Xdebug配置(安裝,php.ini設置,IDE設置),斷點用法(條件,功能,遠程)和故障排除連接問題。 有效的Debuggi

本文指導PHP開發人員使用PHPUNIT測試PHP 7代碼。 它突出了從先前的PHP版本的無縫過渡,強調利用PHP 7的功能(類型提示,返回類型)以改善測試魯棒性。 文章

本文指導使用PHP 7的Codeigniter指導該框架的兼容性,PHP 7的發動機增強功能以及至關重要的安全性最佳實踐。 它涵蓋了設置,配置和利用PHP 7 Featu


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版
中文版,非常好用

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。