這篇文章主要介紹PHP7函數類型限定對性能有沒有影響,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
函數參數類型限定(包括返回值、成員屬性)從PHP5開始支持的,但是支持的類型不多,PHP7做了擴展:int/string/bool/object 等
作用
function testInt(int $intNum){ var_dump($intNum); } testInt("123"); // int(123)
避免錯誤調用,標明類型,只能傳遞同類型的參數,尤其多人協同開發時。
推薦學習:《PHP視頻教程》
如果不是可以自動轉換數據類型,如下,當然前提是待轉化類型可以正常轉化
而本文正是測試類型限定對性能的影響程度
注意 參數、返回值如果跟設定的類型不一致時會報錯,不是百分百確認的需要手動轉化下
運行環境
PHP 7.2.34
Laravel 5.8
AB 2.3
單機配置
型號名稱 MacBook Pro
處理器名稱 Quad-Core Intel Core i7
內存 8 GB
核總數 4
AB
-n 壓測請求數
-c 并發數
-p POST請求時指定所需攜帶參數的文件
-r 遇到錯誤響應不退出,操作系統有防高并發攻擊保護措施 (apr_socket_recv: Connection reset by peer)
使用AB (Apache Benchmark) 進行壓測,由于不是正式的壓測,所以此處只關心綜合指標:Requests per second (平均每秒請求數)
主要參數
設置項目 設置兩個 POST 接口,沒有業務邏輯、中間件操作等,如下
/***** 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; }
共進行五次壓測,配置及結果展示如下 (統一刪除:| grep 'Requests per second')
/*****第一次*****/ // 類型限定接口 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
壓測不算太嚴謹,結果僅供參考
類型限定對性能的提升沒有預期的大,很微小,不過還是推薦這種寫法
以上是“PHP7函數類型限定對性能有沒有影響”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。