类型声明
PJP7新增特性,可以作用于函数(方法)返回值类型 (php7特性)、也可以限制函数(方法)的形参类型(php5特性),不满足条件将会报Fatal错误
可用限定类型有 int float bool array object
如要强制性约束类型,可在文件头部添加declare声明
declare(strict_types = 1);
//限定形参
function study(int $get)
{
return $get;
}
var_dump(study('ddd'));
//限定返回类型
function authorize(): bool
{
return true;
}
代码复用 trait
自身无法实例化,减少单继承语言的限制
优先级 从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法
在 use 声明中引入多个 trait,用逗号分隔,插入到一个类中。
trait 可以用 多个 trait组合起来 同class引入
支持抽象方法的使用
支持静态成员的使用
支持静态方法的使用
Trait 定义了一个属性后,类就不能定义同样名称的属性,否则会产生 fatal error
冲突的解决
//相同方法名处理冲突 指定替代
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
//保留冲突的方法名 用别名替代
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
修改方法的访问控制
use HelloWorld { sayHello as protected; }
给方法一个改变了访问控制的别名,原方法 的访问控制不改变
use HelloWorld { sayHello as private myPrivateHello; }
数组和字符串直接表达式 PHP7
echo "hello world"[4];
异常处理语句由原来的 try-catch 新增了一个 finally语句块 PHP7 ,php7.0以后,PHP是不支持捕获错误,只能捕获异常
try {
#expression
} catch (Error $e) {
$msg = "错误:" . $e->getMessage();
} catch (Exception $e) {
$msg = "异常:" . $e->getMessage();
} finally {
file_put_contents('error.log', $msg, FILE_APPEND);
}
幂运算,用来替代pow函数 PHP7
$pow = pow(2,10);
$replace = 2 ** 10;
var_dump($replace == $pow);
定义数组常量 PHP7
const STATUS = [
'ERROR' => 0,
'SUCCESS' => 1
];
echo STATUS['ERROR'];
null合并运算符 PHP7
echo $_GET['name'] ?? 'felix';
新增函数 除法取整数部分 PHP7
echo intdiv(14, 3); //返回整数部分