PHP7源码分析

$ php -v
PHP 7.0.12 (cli) (built: Oct 13 2016 11:04:07) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans

PHP7新特性

1. 标量类型声明

函数的形参类型声明中

  • PHP5 只能是类名、接口、数组、函数(PHP5.4中可为回调函数,包含匿名函数)
  • PHP7 可使用标量,诸如stringintfloatbool

函数参数类型声明不受制于【默认模式】和【严格模式】。默认模式为强制类型转换,会对不符合预期的参数进行强制类型装换。而在严格模式下则会触发TypeError的致命错误Fatal error

【默认模式】下,当传入的参数不符合声明类型时,会首先尝试类型转换。


【严格模式】下则直接报错


2. 返回值类型声明

  • PHP7 增加对返回值类型声明的支持,类似于参数类型声明。

返回值类型声明指明了函数返回值的数据类型,与参数声明中可用类型一致。

 int(3) [1]=> int(30) }
?>
  • PHP7.1 对函数返回值声明扩充,可以定义返回值为void

无论是或否开启严格模式,函数中只要存在return;,则其他return语句均报错。值得注意的是,函数的参数类型声明不能为void

 Fatal error: Uncaught TypeError: Return value of fn() must be an instance of void, none returned in...
//PHP7.1 => NULL
?>
  • PHP7.1.0 对参数类型和返回值类型进一步支持,其类型可为空类型NULL

在参数会返回值类型声明前添加?,表示其值要么为NULL要么是声明的类型。

 Parse error: syntax error, unexpected '?', expecting variable (T_VARIABLE) in
//PHP7.1 => NULL
?>

你可能感兴趣的:(PHP7源码分析)