环境搭建

虽然php8已经上市,但是系统学习一下php7,初衷的打算是想彻底的掌握PHP的底层原理和语言结构,结合PHP开发PHP扩展、或者是编写一个Swoole的框架,解决实际生产的性能问题,解放生产力,发展生产力!

环境可以是centos ,或者是在Ubuntu系统中,对于裸镜像需要安装命令yum update(centos),apt-get update;(Ubuntu)

我的实验环境是以centos7环境。

首先进行环境搭建,用Docker搭建的centos7,php选用版本,下载php源码,比如:

#php7
https://www.php.net/distributions/php-7.4.28.tar.gz
#php5.6
https://www.php.net/distributions/php-5.6.37.tar.gz

这里要写一个小小的技巧,源码时的url是https://www.php.net/distributions/php-版本号.tar.gz

下载PHP源码、解压、编译

wget https://www.php.net/distributions/php-7.4.28.tar.gz
wget https://www.php.net/distributions/php-5.6.37.tar.gz

解压

tar -zxvf 版本号.tar.gz

编译

--prefix=/usr/local/php7 --enable-fpm --enable-debug

编译过程中遇到了configure: error: no acceptable C compiler found in $PATH,报错信息。

编译过程中遇到了make: *** No targets specified and no makefile found. Stop.,缺少编译所需要的软件。

报错 configure: error: xml2-config not found. Please check your libxml2 installation.,缺少编译软件。

中途遇到3次错误,原因是缺少编译依赖,执行下面依赖:

yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel libxml2 libxml2-devel sqlite-devel -y

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nMA0jekK-1645281508452)(https://note.youdao.com/yws/res/15814/WEBRESOURCEc922c88f4532c54984b3f6877e7f1227)]

编译成功,执行make && make install。

Wrote PEAR system config file at: /usr/local/php7.1.0/etc/pear.conf
You may want to add: /usr/local/php7.1.0/lib/php to your php.ini include_path
/root/php-7.1.0/build/shtool install -c ext/phar/phar.phar /usr/local/php7.1.0/bin
ln -s -f phar.phar /usr/local/php7.1.0/bin/phar
Installing PDO headers:           /usr/local/php7.1.0/include/php/ext/pdo/

PHP5、PHP7、PHP8 的性能测试

对比一下php5和php7的官方给出的官方性能测试Demo,5.6的版本耗时12.813s,7.1.0耗时5.122s,顺便把php8也做了一下性能测试3.780,比php7还快了一点。

[root@dd2065d03db8 php5.6]# /usr/local/php5.6/bin/php ~/php-5.6.37/Zend/bench.php
simple             0.452
simplecall         0.627
simpleucall        0.594
simpleudcall       0.680
mandel             1.177
mandel2            1.920
ackermann(7)       0.677
ary(50000)         0.154
ary2(50000)        0.087
ary3(2000)         1.265
fibo(30)           2.261
hash1(50000)       0.444
hash2(500)         0.289
heapsort(20000)    0.599
matrix(20)         0.355
nestedloop(12)     0.722
sieve(30)          0.449
strcat(200000)     0.063
------------------------
Total             12.813
[root@dd2065d03db8 php-7.1.0]# /usr/local/php7.1.0/bin/php Zend/bench.php
simple             0.182
simplecall         0.057
simpleucall        0.167
simpleudcall       0.319
mandel             0.970
mandel2            1.054
ackermann(7)       0.160
ary(50000)         0.025
ary2(50000)        0.024
ary3(2000)         0.351
fibo(30)           0.651
hash1(50000)       0.074
hash2(500)         0.064
heapsort(20000)    0.194
matrix(20)         0.245
nestedloop(12)     0.418
sieve(30)          0.127
strcat(200000)     0.040
------------------------
Total              5.122

php8

[root@dd2065d03db8 php-8.1.3]# /usr/local/php8/bin/php Zend/bench.php
simple             0.066
simplecall         0.024
simpleucall        0.117
simpleudcall       0.123
mandel             0.781
mandel2            0.777
ackermann(7)       0.135
ary(50000)         0.034
ary2(50000)        0.017
ary3(2000)         0.283
fibo(30)           0.592
hash1(50000)       0.054
hash2(500)         0.055
heapsort(20000)    0.152
matrix(20)         0.151
nestedloop(12)     0.219
sieve(30)          0.170
strcat(200000)     0.027
------------------------
Total              3.780

php7的新特性

1.太空船操作符<=>

  • 太空船操作符用于比较两个表达书
  • 当 a 小 于 、 等 于 或 大 于 a小于、等于或大于 a小于、等于或大于b时它分别返回-1、0或1

2.类型声明

declare(strict_types = 1); //表示脚本开启严格模式public function receivedSent(int $toUid, string $ack ) :bool
{//Todo 代码...return true;
}

3.null合并操作符

$page = $_GET['page'] ?? 1;

4.NameSpace批量导入

同一个目录下的和合并使用,看下面Demo

namespace App\WebSocketController\V3;use Swoole\Websocket\Server;
use App\Utility\Ws\{Result,Category,Params,ParamsCheck};
use App\Models\{ImChatModel,ImModel};class AdminMessage extends Base
{}

5.throwable接口

try…catch后不会直接报错,会捕捉到错误消息

object(Error)#1 (7) {["message":protected]=>string(38) "Call to undefined function starkName()"["string":"Error":private]=>string(0) ""["code":protected]=>int(0)["file":protected]=>string(18) "/root/code/try.php"["line":protected]=>int(4)["trace":"Error":private]=>array(0) {}["previous":"Error":private]=>NULL
}

6.list的括号写法

$list = [1,2];
list($a,$b) = $list;
[$a,$b] = $list;

7.抽象语法树(AST)

PHP源码01 - php7编译安转、新特性相关推荐

  1. Android Gradle Plugin 源码阅读与编译

    前言 为了解一些Andorid的构建流程,有时候需要阅读Android Gradle Plugin的相关源码的.自己阅读Android Gradle Plugin源码主要经历了三个时期: 1.AOSP ...

  2. Ubuntu源码安装php-7.2.23

    1.切换到安装目录,解压 #cd /usr/local/src #tar -zxvf php-7.2.23.tar.gz #cd php-7.2.23 下载链接 :https://www.php.ne ...

  3. Linux软件包管理之源码包、脚本安装包

    目录 1.源码包和RPM包的区别 RPM包和源码包默认安装位置: 由于安装位置不同带来的影响 2.源码包安装 ①.安装准备 ②.安装注意事项 ③.安装源码包 3.源码包卸载 4.脚本安装包 5.总结 ...

  4. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  5. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  6. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  7. Android 4.0.1 源码下载,编译和运行

    [牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...

  8. 新版SQLite源码下载与编译

    概述 "最新版GDAL源码下载 "一文中,我们为大家分享了最新版本的GDAL源码,而GDAL是需要依赖PROJ投影转换库的. 因此,在最新版投影转换工具PROJ源码 "一 ...

  9. WebRTC 开发(二)源码下载与编译

    转载:http://depthlove.github.io/2019/05/02/webrtc-development-2-source-code-download-and-build/ 在使用任何工 ...

最新文章

  1. 数据安全引担忧?get它,让你吃一颗“定心丸”
  2. Arduino可穿戴教程ArduinoIDE新建编辑源文件
  3. QT STUDY 模型-视图-控制器
  4. redis的通用命令 || redis持久化机制:(RDB  ||  AOF)
  5. html css移动form表单位置,表单form的研究
  6. 聊天机器人-ChatterBot初试
  7. nginx html 不缓存,nginx如何实现js和css不缓存
  8. 《那些事之Log4j》什么是log4j?【专题一】
  9. Python连接SQL Server数据获取2
  10. C++ (void)_r;什么意思
  11. MyBatis官方文档——动态SQL部分
  12. 大数据与云计算概论简介
  13. 【JavaScript】案例1:使用JS完成注册页面校验
  14. 户外直播、慢直播、赛事直播等直播行业的未来发展趋势
  15. java-asc码形式输出
  16. x7 z8750 linux,GPD Pocket 7.0英寸 口袋笔记本电脑(Atom x7-Z8750、8GB、128GB、触屏)
  17. FLUENT中VOF模型的仿真流程
  18. 小程序的发布上线流程
  19. letcode 715
  20. Nginx中的location规则与rewrite重写(详解)

热门文章

  1. ajax异步请求及案例
  2. vue外卖APP 商家主页面商品滑动代码编写
  3. mysql 规则引擎_Drools规则引擎详解-常用的drl实例
  4. Android Manifest merger failed:××× 问题解决
  5. 实验五 数组的运算(第8周)
  6. Apple Music四个月会员领取活动
  7. LRU Cache(最少最近使用机制)
  8. CentOS6.x升级到7
  9. 现在注册英国公司,有什么利弊,crs政策是否有影响
  10. cs285-lec5-policy gradient