两种方式:强制方式和严格方式
int float bool string array interface callable 7种类型
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null
//强制模式 会将参数强制转换为对应的参数类型
declare(strict_types=1);
function getSum(?int ...$int){
return array_sum($int);
}
$sum = getSum(1,2,3,4.9);
print($sum);
//严格模式 如果不符合参数类型则报错
declare(strict_types=1);
function getSum(int ...$int){
return array_sum($int);
}
$sum = getSum(1,2,3,4);
print($sum);
int float bool string array interface callable 7种类型
参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null
一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值
//强制模式 会将参数强制转换为对应的参数类型
function getSum(int $init):?int
{
return $init + 1.1;
}
$sum = getSum(1);
print($sum);
//严格模式 如果不符合参数类型则报错
declare(strict_types=1);
function getSum(int $init):?int
{
return $init + 1.1;
}
$sum = getSum(1);
print($sum);
function swap(&$left, &$right) : void
{
if ($left === $right) {
return;
}
$tmp = $left;
$left = $right;
$right = $tmp;
}
$a ?? $b ?? $c 从左往右第一个存在且不为 NULL 的操作数
$post = $_POST;
// 之前的写法 $id = isset($post['id']) ? $post['id'] : 0;
$id = $post['id'] ?? 0;
print($id);
$a <=> b 当 b 当 b当a小于、等于、大于$b时 分别返回一个小于、等于、大于0的integer 值
$a = 1 <=> 2;
$b = 4 <=> 3;
$c = 5 <=> 5;
var_dump($a,$b,$c);
在 PHP 5 中,define 的 value 必须是标量( integer、 float、string、boolean、NULL)在 PHP 7 中还允许是个 array 的值
define('TMP_NAME',['Tom','Lily','Ben']);
if(defined('TMP_NAME'))
var_dump(TMP_NAME);
在php7中,匿名类现在可以使用 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) {
print($msg);
}
});
$app->getLogger()->log("My first Log Message");
从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了
// PHP 7 之前的代码
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
// PHP 7+ 及更高版本的代码
use some\namespace\{ClassA, ClassB, ClassC as C};
$a = 10;
$b = 3;
//$c = $a / $b;
$c = intdiv($a,$b);
var_dump($c);
新加入两个跨平台的函数: random_bytes() 和 random_int() 用来产生高安全级别的随机字符串和随机整数
$bytes = bin2hex(random_bytes(5));
$int = random_int(100,999);
var_dump($bytes,$int);
短数组语法([])现在作为list()语法的一个备选项,可以用于将数组的值赋给一些变量(包括在foreach中)
$data = [
[1, 'Tom',29],
[2, 'Fred',35],
];
// list() style
list($id1, $name1,$age) = $data[0];
var_dump($id1,$name1,$age);
echo '
';
// [] style
[$id1, $name1] = $data[0];
var_dump($id1,$name1);
echo '
';
// list() style
foreach ($data as list($id, $name)) {
// logic here with $id and $name
var_dump($id,$name);
}
echo '
';
// [] style
foreach ($data as [$id, ,$age]) {
// logic here with $id and $name
var_dump($id,$age);
}
与类属性的可见性一致
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}