新特性
可为空(Nullable)类型
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。 当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。
Void 函数
一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值。
试图去获取一个 void 方法的返回值会得到 NULL ,并且不会产生任何警告。这么做的原因是不想影响更高层次的方法。类常量可见性
现在起支持设置类常量的可见性。添加修饰性词语 public protected private
class ConstDemo{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
多异常捕获处理
一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。
try { // some code
} catch (FirstException | SecondException $e) {
// handle first and second exceptions
}
支持为负的字符串偏移量
现在所有支持偏移量的字符串操作函数 都支持接受负数作为偏移量,包括通过[]或{}操作字符串下标。在这种情况下,一个负数的偏移量会被理解为一个从字符串结尾开始的偏移量。
var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));
以上例程会输出:
string (1) "e" int(3)
不向后兼容的变更
当传递参数过少时将抛出错误
在过去如果我们调用一个用户定义的函数时,提供的参数不足,那么将会产生一个警告(warning)。 现在,这个警告被提升为一个错误异常(Error exception)。这个变更仅对用户定义的函数生效, 并不包含内置函数。
PHP 7.1.x 中废弃的特性
ext/mcrypt
mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。
变动的函数
PHP 核心
getopt() 函数增加了第三个参数,这是一个可选参数。 通过以引用的方式传入参数, 它可以用来存储参数列表中下一个参数的下标位置。
getenv() 可以不传入任何参数。 如果不传入参数,此函数会以关联数组的形式 返回所有的环境变量。
get_headers() 增加了一个参数, 可以用来解析自定义的流上下文。
output_reset_rewrite_vars() 函数不再重置会话 URL 重写变量了。
parse_url() 更加严格的限制, 并且提供对 RFC3986 的支持。
unpack() 函数增加第三个参数, 这是一个可选参数,用来指定开始解包的位置。
Session
session_start() 当无法成功初始化会话的时候,返回 FALSE, 并且不会初始化超级变量 $_SESSION。
网友评论