一、下载php 安装版本
这里我下载了两个版本 php-5.6.39.tar.gz php-7.2.30.tar.gz
主要用于测试两个不同php版本区别
二、php编译安装
- 如果系统是基于docker的ubuntu生成的容器,因为是简约版,需要安装gcc相关组件,所以需要执行指令:
apt-get install build-essential
- 问题:源码安装php时出现configure: error: xml2-config not found. Please check your libxml2 installation
安装libxml2指令如:1)
apt-get install libxml2-dev
2)apt-get install libxml2
3)dpkg -s libxml2-dev
查看安装情况
- 编译:
./configure --prefix=/usr/local/php/php-56 --enable-fpm --enable-debug
prefix为安装目录 - 安装:
make && make install
三、php不同版本性能测试
- 测试脚本路径: /opt/php/php-7.2.30/Zend/bench.php /opt/php/php-7.2.30/Zend/micro_bench.php
php5.6版本 /usr/local/php/php56/bin/php /opt/php/php-7.2.30/Zend/bench.php
php7.2版本 /usr/local/php/php72/bin/php /opt/php/php-7.2.30/Zend/bench.php
通过对比,PHP7.2版本明显比php5.6的速度快差不多3倍
四、php7的新特性
1.太空船操作符 <=>
作用:用于比较两个表达式
例如:当$a小于、等于、大于$b时它分别返回-1、0、1
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
2.类型声明
- declare(strict_types=1); // strict_types=1 表述开启严格模式
function sumInts(int ...$ints):int{
return array_sum($ints);
}
3.null合并操作符
- 三目运算符: $page = isset($_GET['page']) ? $_GET['page'] : 0;
- 合并操作符: $page = $_GET['page'] ?? 0;
4.常量数组
- define('ANIMALS',['dog','cat'])
5.NameSpace批量导入
- use Space{ClassA, ClassB, ClassC as C};
6.throwable接口
try{
undefindfunc();
}catch(Error $e){
var_dump($e)
}
set_exception_handler(function($e){
var_dump($e);
});
7.Closure::call()
class Test{
private $num = 1;
}
$f = function(){
return $this->num + 1;
};
echo $f->call(new Test);
8.intdiv 函数
接收两个参数,返回值为第一个参数除于第二个参数的值并取整
intdiv(10,3);
9.list的方括号写法
$arr = [1,2,3];
list($a,$b,$c) = $arr;
# 可写为
[$a,$b,$c] = $arr;