<?php

//"php7的特性1";
//"nullable(可为空类型)";

function test(): ?string //加了?说明返回类型可以为null string返回类型只能是string
{
return "this is a staing";
}

function test1() : vold //不能有返回值
{
return;//return 或不写return;

}


function test3(?string $name):sating //?staing 说明参数只能是string 和null 不能什么都不填
{

}
?>
<?php

//"php7的特性2";

//"短数组语法"; 把数组里面的值赋值给变量$key,$val,$val2

$date = [
[1,2,3],
[4,5,6]
];
[$key,$val,$val2] = $date[0]; //方法1
list($key,$val,$val2) = $date[0]; //方法2

//支持键名
['key'=>$key,'val1'=>$val,'val2'=>$val2] = $date[0]; //方法1
list('key'=>$key,'val1'=>$val,'val2'=>$val2) = $date[0]; //方法2


foreach ($date as [$key,$val1,$val2]) {
//这里是里面值的逻辑 logic here wite $key $val1,$val2
}

foreach ($date as list($key,$val1,$val2)) {
//这里是里面值的逻辑 logic here wite $key $val1,$val2
}

foreach ($date as ['key'=>$key,'val1'=>$val,'val2'=>$val2]) {
//这里是里面值的逻辑 logic here wite $key $val1,$val2
}
foreach ($date as list('key'=>$key,'val1'=>$val,'val2'=>$val2)) {
//这里是里面值的逻辑 logic here wite $key $val1,$val2
}

//php7的特性3";
//现在起支持设置类常量的可见性。
class people
{
const ROOT = "this is a root uesr";
public PUBLIC_ROOT = 'this is a public root';
protected PROTECTED_ROOT = "this is a protected root";
private PRIVATE_ROOT = "this is a private root";
}

//php7的特性4
//多异常捕获处理
try{
//some code
} catch(FirstException | SecondException $e) {
//handle first and second exceptions
}
//怎么单抛出异常 常用
try{
throw new Exception('some error message 200');
}catch(Exception $e){
// 消息 文件 代码 行号
echo $e->getMessage() . $e->getFile() . $e->getCode() . $e->getLine();
}

//php7的特性4
//支持为负的字符串偏移量
var_dump('abcd'[1]) //b
var_dump('abcd'[-1]) //d
//strpos查找字符函数 一个负数的偏移量会被理解为一个从字符串结尾开始的偏移量。
var_dump(strpos('aabbcc','b',-1))//int(3);