PHP7的新特性

别来无恙 提交于 2020-01-11 00:57:53

PHP7的新特性

性能测试

解压

tar -zxvf php-5.6.36.tar.gz
tar -zxvf php-7.1.0.tar.gz
tar -zxvf php-7.4.0.tar.gz

源码编译安装5.6.36

./configure --prefix=/home/codes/php/php-5.6.36/ --enable-fpm --enable-debug
make && make install

源码编译安装7.1.0

./configure --prefix=/home/codes/php/php-7.1.0/ --enable-fpm --enable-debug
make && make install

源码编译安装7.4.0

./configure --prefix=/home/codes/php/php-7.4.0/ --enable-fpm --enable-debug
make && make install

报错问题

报错:configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
No package ‘sqlite3’ found
解决:yum install sqlite-devel
报错:configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:
No package ‘libxml-2.0’ found
解决: yum install libxml2-devel

在目录php-5.6.36/Zend和php-7.1.0.3/Zend和php-7.4.1/Zend下面有性能测试的PHP文件bench.php和micro_bench.php
在/home/php-5.6.36/Zend目录下进行性能测试
在这里插入图片描述
查看php版本

/home/codes/php/php-5.6.36/bin/php -v
/home/codes/php/php-7.1.0/bin/php -v
/home/codes/php/php-7.4.0/bin/php -v

执行测试

/home/codes/php/php-5.6.36/bin/php bench.php 
/home/codes/php/php-7.1.0/bin/php bench.php 
/home/codes/php/php-7.4.0/bin/php bench.php 

截图展示如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/home/codes/php/php-5.6.36/bin/php micro_bench.php 
/home/codes/php/php-7.1.0/bin/php micro_bench.php 
/home/codes/php/php-7.4.0/bin/php micro_bench.php 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PHP7的新特性

太空船操作符 <=>

  • 太空船操作符用于比较两个表达式
  • 例如,当$a小于、等于、或大于$b时它分别返回-1、0或1
codes/php/php-7.1.0/bin/php -r "echo 1<=>1; echo PHP_EOL;"
codes/php/php-7.1.0/bin/php -r "echo 2<=>1; echo PHP_EOL;"
codes/php/php-7.1.0/bin/php -r "echo 2<=>3; echo PHP_EOL;"

在这里插入图片描述

类型声明

代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。
declare(strict_types=1);

<?php
declare(strict_types=1);
function sum(int ...$ints)
{
    return array_sum($ints);
}
echo sum(2, '3', '4.1');
echo PHP_EOL;
?>
<?php
declare(strict_types=1);
function sum(int ...$ints)
{
    return array_sum($ints);
}
echo sum(2, 3, 4);
echo PHP_EOL;
?>

在这里插入图片描述

null合并操作符

<?php
// 获取 $_GET['site'] 的值,如果不存在返回 'default'
$site = $_GET['site'] ?? 'default';
print($site);
print(PHP_EOL); // PHP_EOL 为换行符
// 以上代码等价于
$site = isset($_GET['site']) ? $_GET['site'] : 'default';
print($site);
print(PHP_EOL);
// ?? 链
$site = $_GET['site'] ?? $_POST['site'] ?? 'default';
print($site);
print(PHP_EOL);
?>

在这里插入图片描述

常量数组

<?php
// 使用 define 函数来定义数组
define('sites', [
   'a',
   'b',
   'c'
]);
print(sites[1]);
echo PHP_EOL;
?>

在这里插入图片描述

PHP匿名类

<?php
interface Logger{public function log(string $msg);}
class Application
{
    private $logger;
    public function getLogger(): Logger{return $this->logger;}
    public function setLogger(Logger $logger){$this->logger = $logger;}
}
$app = new Application;
// new class 来实例化一个匿名类,用来替代一些"用后即焚"的完整类定义。
$app->setLogger(new class implements Logger{public function log(string $msg){print_r($msg);}});
$app->getLogger()->log('我是第一条日志');
echo PHP_EOL;
$app->setLogger(new class implements Logger{public function log(string $msg){print_r($msg);}});
$app->getLogger()->log('我是第二条日志');
echo PHP_EOL;

在这里插入图片描述

Namespace批量导入

<?php
namespace Test;
class A
{
    public function __construct()
    {
        print_r("A");
    }
}
<?php
namespace Test;
class B
{
    public function __construct()
    {
        print_r("B");
    }
}
<?php
require 'A.php';
require 'B.php';
use Test\{A, B};

new A();
echo PHP_EOL;
new B();
echo PHP_EOL;

在这里插入图片描述

throwable

<?php
try{
    undefindcunc();
}catch (Error $exception){
    var_dump($exception);
}

set_exception_handler(
    function ($e){
        var_dump($e);
    }
);
undefindcunc();

用php7.1.0和php5.6.36分别执行
在这里插入图片描述

PHP Closure::call()

将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。

在这里插入代码片<?php
class Test{private $num = 2;}
$f = function () {return $this->num + 2;};
echo $f->call(new Test());

在这里插入图片描述

PHP intdiv() 函数

接收两个参数,返回值为第一个参数除于第二个参数的值并取整。

<?php
echo intdiv(9,3),PHP_EOL;
echo intdiv(10,3),PHP_EOL;
echo intdiv(5,10),PHP_EOL;

在这里插入图片描述

list用法

前面是老版本,后面[]写法是php7.1.0写法

<?php
$arr = [1, 2, 3];
list($a, $b, $c) = $arr;
var_dump($a, $b, $c);

$arr = [4, 5, 6];
[$a, $b, $c] = $arr;
var_dump($a, $b, $c);

在这里插入图片描述

抽象语法数(AST)

<?php
($a)['b'] = 1;
var_dump($a);

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!