美文网首页
PHP7新增和修改内容涉猎

PHP7新增和修改内容涉猎

作者: LittleTrue | 来源:发表于2020-03-01 13:17 被阅读0次

    新特性

    传参类型拓展

    指定形参类型是PHP 5就支持的一项特性, 形参支持 array - 数组、 object - 对象两种类型。现在可以使用下列类型参数: 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。在旧版中,函数的参数声明只能是(Array arr)、(CLassNameobj)等,基本类型比如Int,String等是不能够被声明的。

    返回值类型声明

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

    null合并运算符

    新增了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回第二个操作数

    组合比较符

    PHP 7 新增加的太空船运算符(组合比较符 <=>)用于比较两个表达式 a 和b,如果 a 小于、等于或大于b时,它分别返回-1、0或1。

    匿名类

    现在支持通过new class 来实例化一个匿名类

    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 {
    public function log(string $msg) {
    echo $msg;
    }
    });
    
    

    define() 支持定义常量数组

    define('ARR',['a','b']);
    echo ARR[1];// a
    

    命名空间引用优化

    // PHP7以前语法的写法 
    use FooLibrary\Bar\Baz\ClassA; 
    use FooLibrary\Bar\Baz\ClassB; 
    // PHP7新语法写法 
    use FooLibrary\Bar\Baz\{ ClassA, ClassB};
    

    Throwable接口

    Throwable 是 PHP 7 中可以用作任何对象抛出声明的基本接口,包括 Expection (异常)和 Error (错误)。(在5中只支持扔出 Expection )

    过去的 PHP,处理致命错误几乎是不可能的。致命错误不会调用, set_error_handler() 设置的处理方式,而是简单的停止脚本的执行。

    在 PHP7 中,当致命错误和可捕获的错误(E_ERROR 和 E_RECOVERABLE_ERROR)发生时会抛出异常,而不是直接停止脚本的运行。

    Throwable {
        
      /* 抽象方法 */
      abstract public string getMessage ( void ) // 获取抛出的消息内容
    
      abstract public int getCode ( void ) // 获取抛出的错误代码
    
      abstract public string getFile ( void ) // 获取产生异常的文件名
    
      abstract public int getLine ( void ) // 获取相关行号
    
      abstract public array getTrace ( void ) // 获取追踪信息,返回数组形式
    
      abstract public string getTraceAsString ( void ) // 获取追踪信息,返回字符串形式
    
      abstract public Throwable getPrevious ( void ) // 返回上一个 Throwable
    
      abstract public string __toString ( void ) // 抛出的对象以字符串形式返回,可以用 echo 打印相应结果
    
    }
    

    不支持老式的构造方法

    不推荐以类名为构造函数的使用方法。

    session_start方法选项数组

    session_start支持调用时传入session配置。


    废弃方法和功能

    define大小写不敏感的常量

    大小写不敏感的常量声明现已被废弃, 将 TRUE 作为第三个参数传递给 define()会导致一个废弃警告。

    在字符串中搜索非字符串内容

    废弃:将一个非字符串内容传递给字符串搜索函数。 在将来所有待搜索的内容都将被视为字符串,而不是 ASCII 编码值。如果需要依赖这个特性,你应该 要么显示地进行类型转换(转为字符串),或者显示地调用 chr()。 以下是受到影响的方法:

    图像处理和 GD 库

    image2wbmp() 已被废弃。

    ODBC废弃

    不再支持odbc编程。

    mcrypt系列函数

    mcrypt_*系列函数都将被移除。推荐使用:openssl 序列函数。

    foreach修改

    foreach()循环对数组内部指针不再起作用

    $arr = [1,2,3];
    foreach ($arr as &$val) {
        echo current($arr);// php7 全返回0
    }
    

    按照值进行循环的时候, foreach是对该数组的拷贝操作


    杂项

    • 1.debug_zval_dump() 现在打印 “int” 替代 “long”, 打印 “float” 替代 “double”

    • 2.dirname() 增加了可选的第二个参数, depth, 获取当前目录向上 depth 级父目录的名称。

    • 3.getrusage() 现在支持 Windows.mktime() and gmmktime() 函数不再接受 is_dst 参数。

    • 4.preg_replace() 函数不再支持 “\e” (PREG_REPLACE_EVAL). 应当使用 preg_replace_callback() 替代。

    • 5.setlocale() 函数不再接受 category 传入字符串。 应当使用 LC_* 常量。

    • 6.exec(), system() and passthru() 函数对 NULL 增加了保护.

    • 7.shmop_open() 现在返回一个资源而非一个int, 这个资源可以传给shmop_size(), shmop_write(), shmop_read(), shmop_close() 和 shmop_delete().

    • 8.为了避免内存泄露,xml_set_object() 现在在执行结束时需要手动清除 $parse。

    相关文章

      网友评论

          本文标题:PHP7新增和修改内容涉猎

          本文链接:https://www.haomeiwen.com/subject/inggxhtx.html