前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP - php7编译安装及新特性

PHP - php7编译安装及新特性

原创
作者头像
stark张宇
修改2023-02-07 08:24:39
4850
修改2023-02-07 08:24:39
举报
文章被收录于专栏:stark张宇stark张宇

环境搭建

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

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

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

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

代码语言:txt
复制
#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源码、解压、编译

代码语言:txt
复制
wget https://www.php.net/distributions/php-7.4.28.tar.gz
wget https://www.php.net/distributions/php-5.6.37.tar.gz

解压

代码语言:txt
复制
tar -zxvf 版本号.tar.gz

编译

代码语言:txt
复制
--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次错误,原因是缺少编译依赖,执行下面依赖:

代码语言:txt
复制
yum -y install gcc gcc-c++ autoconf \
automake zlib zlib-devel \
openssl openssl-devel  \
pcre pcre-devel libxml2 \
libxml2-devel sqlite-devel -y
出现此页面表示安装成功了
出现此页面表示安装成功了

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

代码语言:txt
复制
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还快了一点。

代码语言:txt
复制
[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
代码语言:txt
复制
[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

代码语言:txt
复制
[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小于、等于或大于$b时它分别返回-1、0或1

2.类型声明

代码语言:txt
复制
declare(strict_types = 1); //表示脚本开启严格模式

public function receivedSent(int $toUid, string $ack ) :bool
{
    //Todo 代码...
    return true;
}

3.null合并操作符

代码语言:txt
复制
$page = $_GET['page'] ?? 1; 

4.NameSpace批量导入

同一个目录下的和合并使用,看下面Demo,这个特性让代码看起来更简洁

代码语言:txt
复制
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后不会直接报错,会捕捉到错误消息

代码语言:txt
复制
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的括号写法

代码语言:txt
复制
$list = [1,2];
list($a,$b) = $list;
[$a,$b] = $list;

7.抽象语法树(AST)

抽象语法树(AST) 是php7+后新增的特性

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境搭建
    • 下载PHP源码、解压、编译
    • PHP5、PHP7、PHP8 的性能测试对比
    • php7的新特性
      • 1.太空船操作符<=>
        • 2.类型声明
          • 3.null合并操作符
            • 4.NameSpace批量导入
              • 5.throwable接口
                • 6.list的括号写法
                  • 7.抽象语法树(AST)
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档