PHP7-0-新特性
变量类型 PHP7版本函数的参数和返回值增加了类型限定。 为什么PHP要加入类型呢?实际上此项特性是为了PHP7.1版本的JIT特性做准备,增加类型后PHP Jit可以准确判断变量类型,生成最佳的机器指令。 (针对密集运算的优化) 使用示例 function test(int $a, string $b, array $c) : int { //code } 错误异常 在过去,PHP程序出
目录14 个章节
变量类型
PHP7版本函数的参数和返回值增加了类型限定。 为什么PHP要加入类型呢?实际上此项特性是为了PHP7.1版本的JIT特性做准备,增加类型后PHP Jit可以准确判断变量类型,生成最佳的机器指令。 (针对密集运算的优化)
使用示例
function test(int $a, string $b, array $c) : int {
//code
}
错误异常
在过去,PHP程序出错之后Zend引擎会发生致命错误并终止程序运行,PHP7可以使用try/catch捕获错误。
try{
not_exists_func();
}catch(EngineException $e){
echo "Exception: {$e->getMessage()}\n";
}
PHP7的性能优化
zval使用栈内存
在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。
之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存,而PHP7可以直接使用栈内存。
好处:节省分配内存的花销
底层代码
//php5
zval *val;
MAKE_STD_ZVAL(val);
//php7
zval val;
zend_string存储hash值,array查询不再需要重复计算hash
PHP7为字符串单独创建了新类型叫做zend_string,除了char *指针和长度之外,
增加了一个hash字段,用于保存字符串的hash值。
数组的键值查找不需要反复计算hash值。
struct _zend_string{
zend_refcounted gc;
zend_ulong h;
size_t len;
char val[1];
};
hashtable桶内直接存数据,减少了内存申请次数,提升看了Cache命中率和内存访问速度
在之前版本的PHP中,在array里每插入一个数据,就要申请一次内存,并且使内存存储在不同的内存页上,访问的时候命中率会降低。
zend_parse_parameters改为宏实现,性能提升5%
提升PHP扩展的性能
新增加4种OPCODE: call_user_function, is_int/string/array, strlen, defined 4个函数变为PHP OpCode指令,速度更快
其他更多性能优化
- 基础类型
int,float,bool等改为直接进行值拷贝 - 排序算法改进
PCRE with Jit(正则表达式)execute_data和opline使用全局寄存器- 使用
gdb 4.8的PGO功能
PHP7 Jit
PHP7.0-final版本不会携带Jit特性
Jit使Just in Time得缩写,表示运行时将指令转为二进制的机器码。 对于计算密集型的程序,Jit可以将PHP的OpCode直接转换为机器码,大幅提升性能。 PHP开发组自己重启Jit开发计划,预计PHP7.1版本会带有Jit特性
为什么PHP7.0没有Jit
Jit对于实际项目,如WordPress没有太大的性能提升
PHP内置开发测试服务器
cd ~/php
php -S 0.0.0.0:8080
即可以~/php为网站根目录启动服务器。
About

了解更多有趣的操作请关注我的微信公众号:DealiAxy 每一篇文章都在我的博客有收录:blog.deali.cn
_EOF_
PHP7-0-新特性
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
PHP-Ajax-跨域问题最佳解决方案
前言 Ajax跨域问题在开发中非常常见。 例如网页的域名是client.abc.com,而请求的域名是server.abc.com。 如果直接使用ajax访问,会有以下错误: XMLHttpRequest cannot load http://server.abc.com/server.php. No 'Access-Control-Allow-Origin' header is present
2021-12-18 · PHP · 约 1 分钟
PHP7-0-+-Swoole-环境配置
前言 Swoole是一个面向生产环境的 PHP 异步网络通信引擎。 使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,
2021-12-18 · PHP · 约 1 分钟
2023年的PHP项目部署笔记。什么?还有人用PHP?
PHP?2023年还在用?Docker部署心累,不如直接装php-fpm和nginx省心。权限问题?chown一下搞定,composer安装依赖完美运行。
2023-12-12 · PHP · 约 1 分钟
使用django-simple-history实现简单审计功能
Django生态真够用,simple-history这种现成工具谁还手写审计?ModelAdmin混入就完事,历史记录自动记录,不过unfold集成倒是省心。别跟我提什么复杂配置,简单点挺好。
2025-07-21 · DjangoStarter · 约 1 分钟
讨论
共 0 条加载评论中…