PHP7新增和修改内容涉猎

2020-03-01  本文已影响0人  LittleTrue

新特性

传参类型拓展

指定形参类型是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是对该数组的拷贝操作


杂项

上一篇 下一篇

猜你喜欢

热点阅读