这篇文章主要介绍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函数类型限定对性能有没有影响”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。