php7.+新特性

<?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
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值