<?php
/*
1.PHP 标量类型与返回值类型声明
默认情况下,所有的PHP文件都处于弱类型校验模式。
PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式:
强制模式 (默认)
严格模式 参数的类型有
int
float
bool
string
interfaces
array
callable
*/
function sum(int ...$ints){
return array_sum($ints);
}
//return 结果为整数:
echo sum(2, '3', 4.1),PHP_EOL; //为换行符
/*
declare(strict_types=1);
function sum(int ...$ints){
return array_sum($ints);
}
echo sum(2, '3', 4.1),PHP_EOL;
//这样写肯报错
PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
*/
function returnmixd(int $value): int
{
return $value;
}
echo returnmixd(5),PHP_EOL;
/*
declare(strict_types=1);
function returnmixd(int $value): int
{
return $value + 1.0;
}
echo returnmixd(5),PHP_EOL;
//严格模式,返回值必须是int,但是计算结果是float,所以会报错,执行输出结果为:
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
*/
/*
2.PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式。
*/
//旧式
$site = isset($_GET['site']) ? $_GET['site'] : '菜鸟';
//新式
$site = $_GET['site'] ?? '菜鸟';
echo $site,PHP_EOL;
/*
3.PHP 7 太空船运算符(组合比较符)用于比较两个表达式 $a 和 $b,如果 $a 小于、等于或大于 $b时,它分别返回-1、0或1。
*/
// 整型比较
echo 1 <=> 1;echo PHP_EOL;
echo 1 <=> 2;echo PHP_EOL;
echo 2 <=> 1;echo PHP_EOL;
// 浮点型比较
echo 1.5 <=> 1.5;echo PHP_EOL;
echo 1.5 <=> 2.5;echo PHP_EOL;
echo 2.5 <=> 1.5;echo PHP_EOL;
// 字符串比较
echo "a" <=> "a";echo PHP_EOL;
echo "a" <=> "b";echo PHP_EOL;
echo "b" <=> "a";echo PHP_EOL;
/*
4.在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义。
*/
define('sites', [
'Google',
'Runoob',
'Taobao'
]);
print_r(sites[1]);
echo PHP_EOL;
/*
PHP 匿名类
5.PHP 7 支持通过 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){
echo $msg,PHP_EOL;
}
});
$app ->getLogger()->log('日志');
/*
5.PHP 7 的 Closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。
*/
class A {
private $x = 1;
}
// PHP 7 之前版本定义闭包函数代码
$getXCB = function() {
return $this->x;
};
// 闭包函数绑定到类 A 上
$getX = $getXCB->bindTo(new A, 'A');
echo $getX();
echo PHP_EOL;
// PHP 7+ 代码
$getX = function() {
return $this->x;
};
echo $getX->call(new A);
echo PHP_EOL;
/*
6.PHP 7 增加了可以为 unserialize() 提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据。
*/
class MyClass1 {
public $obj1prop;
}
class MyClass2 {
public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->obj1prop = 200;
$obj2 = new MyClass2();
$obj2->obj2prop = 300;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
// 默认行为是接收所有类
// 第二个参数可以忽略
// 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
echo $data->obj1prop,PHP_EOL;
echo $data2->obj2prop,PHP_EOL;
/*
7.PHP 7 通过引入几个 CSPRNG 函数提供一种简单的机制来生成密码学上强壮的随机数。
random_bytes() - 加密生存被保护的伪随机字符串。
random_int() - 加密生存被保护的伪随机整数。
*/
echo bin2hex(random_bytes(5)),PHP_EOL;
echo random_int(100, 999),PHP_EOL;
/*
8.总结
PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍。
1 PHP 标量类型与返回值类型声明
2 PHP NULL 合并运算符
3 PHP 太空船运算符(组合比较符)
4 PHP 常量数组
5 PHP 匿名类
6 PHP Closure::call()
7 PHP 过滤 unserialize()
8 PHP IntlChar()
9 PHP CSPRNG
10 PHP 7 异常
11 PHP 7 use 语句
12 PHP 7 错误处理
13 PHP intdiv() 函数
14 PHP 7 Session 选项
15 PHP 7 废弃特性
16 PHP 7 移除的扩展
17 PHP 7 移除的 SAPI
*/
php7.+新特性
最新推荐文章于 2021-03-28 10:20:53 发布