• PHP 7 的新特性


    PHP7是最新出来的一个新的PHP的一个版本,而且新增了一些新的版本特性,下面我们来介绍一下:

    1.速度上比HHVM会快一些,大概是PHP5版本的9倍左右,下面是做的一个实验:

     1 <?php
     2 
     3 $a = array();
     4 for($i = 0;$i<=50000;$i++){
     5     $a[$i] = $i;
     6 }    
     7 foreach($a as $i){
     8     array_key_exists($i,$a);
     9 }
    10 
    11 ?>

    紧接着再做下一个实验:

    1 $a = array();
    2 for($i=0;$i<=10000;$i++){
    3     $a[$i] = $i;
    4 }
    5 
    6 foreach($a as $i){
    7     array_search($a,$i);
    8 }

    这是在速度方面新版的PHP7表现是非常不错的

    ./configure --prefix=/usr/local/php7 --enable-fpm --with-zilb --enable-mbstring --with-openssl --with-mysqli --with-mysql-sock --with-gd --enable-gd-native-ttf --enable-pdo --with-pdo-mysql --with-gettext --with-curl --with-pdo-mysql --enable-sockets --enable-bcmath --enable-xml --with-bz2 --enable-zip

    标量类型声明:

    有两种模式:强制(默认)和严格模式。我们现在可以使用下列类型参数(无论是强制模式还是严格模式):字符串(string),整数(int),浮点数(float),以及布尔值(bool),并且扩充了php5
    中引入的其他类型:类名,接口和数组以及回调类型。在旧版中,函数的参数声明只能是(Array $arr),(ClassName $obj)等,基本的类型比如说Int,String等是不能够被声明的

    <?php

    function check(int $bool){
    var_dump($bool);
    }
    check(1);
    check(true);

    ?>

    若无强制类型的转换,会输入int(1)bool(true).转换后会输出bool(true)bool(true)

    返回值类型的声明:

    PHP7增加了对返回类型声明的支持,返回类型声明指明了返回值的类型。可用的类型和参数声明中可用的类型相同。

    <?php
    function arraySum(array ...$arrays):array
    {
    print_r($arrays);
    }
    arraySum([1,2,3],[4,5,6]);

    ?>

    NULL合并运算符(三元运算符)
    我们在项目中存在大量同时使用三元表达式和isset()的情况,新增了null合并运算符(??)这个语法糖,如果变量存在且值不为NULL,他就会返回自身的值,否则返回它的第二个操作数

    旧版:isset($_GET['id'])?$_GET['id']:err;

    新版:$_GET['id']??'err'

    太空船操作符(组合比较符)

    太空船操作符用于比较两个表达式。当$a大于,等于或者小于$b的时候,分别返回的值-1,0,1.比较的原则是沿用PHP的常规比较规则进行的.

    <?php

    //Integers
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1

    //floats
    echo 1.5 <=> 1.5; // 0
    echo 1.5 <=>2.5 // -1
    echo 2.5 <=> 1.5 // 1

    define定义常量数组
    <?php

    define('ANIMALS',['dog','cat','bird']);
    echo ANIMALS[1]; // ‘cat’

    匿名类
    现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义

    <?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;
    $app->setLogger(new class implements logger{

    })
    ?>

    Unicode codepoint 转义语法

    这个接受一个以16进制形式的Unicode codepoint,并打印出一个双引号或者heredoc包围的UTF-8编码格式的字符串,可以接受任何有效的codepoint,并且开头的0 是可以省略的
    <?php

    echo "u{9876}";
    ?>

    旧版输出:u{9876}
    新版输出:顶

    闭包的作用

    为unserialize()提供过滤

    这个特性旨在提供更安全的方式解包不可靠的数据,他通过白名单的方式来防止潜在代码的注入。


    新增的IntlChar类

    新增加的的IntlChar类旨在暴露出更多的ICU的功能。这个类自身定义了许多静态的方法操作更多字符集的Unicode字符。Intl是Pecl的扩展,使用前需要编译进PHP中。

    <?php

    printf('%x',IntlChar::CODEPOINT_MAX);
    echo IntlChar::charName('@');
    var_dump(IntlChar::ispunct('!'));
    ?>

    indiv()
    接受两个参数作为除数和被除数,返回他们相除结果的整数部分

    新增两个函数:random_bytes -- 加密生成被保护的伪随机字符串
    random_int -- 加密生成被保护的伪随机整数


    Session options

    现在,session_start()函数可以接受一个数组作为参数,可以覆盖php.ini中session的配置项。

    比如,把cache_limiter设置为私有的,同时在阅读完session之后立即关闭

    <?php

    session_start([
    'cache_limiter'=>'private',
    'read_and_close'=>true
    ])

    ?>

    php7不再循环数组内部的指针

    在php7之前,当数组通过foreach进行迭代的时候,数组指针会移动,从现在开始,不在如此,见下面的代码

    <?php
    $arr =[0,1,2];
    foreach($arr as &$val){
    var_dumpcurrent($arr);
    }

    ?>
    php5输出:
    int(1)
    int(2)
    bool(false)

    php7输出:
    int(0)
    int(0)
    int(0)

  • 相关阅读:
    iOS开发第三方库一 IQKeyboardManager
    跟着百度学PHP[14]-初识PDO数据库抽象层
    文件上传漏洞的一些总结
    逻辑漏洞挖掘入门之 简单的任意账户密码重置
    突破MIME限制上传
    关于Safe DOG的文件上传bypass
    跟着百度学PHP[13]-文件上传
    PHP flock() 函数 php中的文件锁定机制
    mysql变量
    一份不错的php面试题(附答案)(笔试题)
  • 原文地址:https://www.cnblogs.com/shangzekai/p/5045807.html
Copyright © 2020-2023  润新知