php7新特性

文章目录

  • php7新特性
  • 前言
      • 一、函数参数声明
        • 1.一般模式
        • 示例: 一般模式
        • 严格模式
      • 返回类型声明实例
          • 示例
          • 错误示例
        • void 函数
          • 示例
    • 二、Null合并运算
    • 三、太空船运算
      • 示例
    • 四、 常量数组
      • 示例
    • 五、匿名内部类
      • 示例

前言

PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍。
1、PHP 7 除了在性能方面有极大提升外,还添加了很多新的特性,如太空船操作符、标量类型声明、返回值的类型说明、全局的 throwable 接口、抽象语法树等。

2、在使用 PHP 7之前,我们在函数和类之间传递参数时不必声明变量类型。同样地,在返回数据时也不必声明变量类型。同样地,在返回数据时也不必声明变量类型。任何数据类型都可以被传递、返回。这样便给 PHP 带来了一个很大的问题——PHP 不清楚你传递的是什么类型的变量,函数、方法接收到的变量也不知道是什么类型。为了解决这个问题,PHP 7引入了类型声明,目前明确的有两类变量可以声明类型:形参、返回值。

3、PHP 7 支持的形参类型声明的类型有:字符串(string)、整型(int)、浮点型(float)以及布尔型(bool)。

4、PHP 7.1对函数返回值的声明做了扩充,可以定义其返回值为void,无论是否开启严格模式,只要函数中只能有“return;”,其他以外的其他return语句都会报错。

5、PHP 7.1.0对参数类型和返回值还有进一步的支持,其类型可以是可空类型,在参数或返回值类型声明前面加上“?”,表示返回值要么是null,要么是声明的类型

一、函数参数声明

1.一般模式

在php7中一个新的功能,标量类型声明已被接入,标量类型声明有两种方式

一般方式,默认模式

严格方式 - 严格模式有明确的暗示

示例: 一般模式

function sum(int ...$int){return array_sum($int)
}
print(sum(1,"2",3,4))

严格模式

declare(strict_type=1)function sum(int ...$int){return array_sum($int)
}
print(sum(1,"2",3,4)) //错误示例
print(sum(1,2,3,4))//正确示例

在严格模式中代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。

可以使用的类型参数有:

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:

PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……

返回类型声明实例

实例中,要求返回结果为整数:

示例
<?php
declare(strict_types=1);function returnIntValue(int $value): int
{return $value;
}print(returnIntValue(5));
?>

以上程序执行输出结果为:

5
错误示例
<?php
declare(strict_types=1);function returnIntValue(int $value): int
{return $value + 2.0;
}print(returnIntValue(5));
?>

对于以上运行实际返回值为float 会导致异常

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

void 函数

一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值。

返回的类型还有 void,定义返回类型为 void 的函数不能有返回值,即使返回 null 也不行。

void 函数可以省去 return 语句,或者使用一个空的 return 语句。

示例
<?php
function swap(&$left, &$right) : void
{if ($left === $right) {return;}$tmp = $left;$left = $right;$right = $tmp;
}$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

以上实例输出结果:

null
int(2)
int(1)

二、Null合并运算

之前需要先判断是否存在 再通过三元运算符去计算

var_dump(isset($GET["site"]) ? $GET["site"] : "空空如也");

现在可以通过?? 如果GET["site"]存在并且有值则输出GET["site"] 存在并且有值则输出GET["site"]存在并且有值则输出GET[“site”] 否则输出空空如也

$GET = array('site'=>"ccc");
var_dump($GET["site"] ?? '空空如也');

三、太空船运算

PHP 7 新增加的太空船运算符(组合比较符)用于比较两个表达式 a∗∗和∗∗a** 和 **a∗∗和∗∗b,如果 a∗∗小于、等于或大于∗∗a** 小于、等于或大于 **a∗∗小于、等于或大于∗∗b时,它分别返回-1、0或1。

示例

<?php
// 整型比较
print( 1 <=> 1);print("<br/>");
print( 1 <=> 2);print("<br/>");
print( 2 <=> 1);print("<br/>");// 浮点型比较
print( 1.5 <=> 1.5);print("<br/>");
print( 1.5 <=> 2.5);print("<br/>");
print( 2.5 <=> 1.5);print("<br/>");// 字符串比较
print( "a" <=> "a");print("<br/>");
print( "a" <=> "b");print("<br/>");
print( "b" <=> "a");print("<br/>");
?>

以上程序执行输出结果为:

0
-1
10
-1
10
-1
1

四、 常量数组

在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义。

示例

<?php
// 使用 define 函数来定义数组
define('sites', ['Google','Runoob','Taobao'
]);print(sites[1]);
?>

以上程序执行输出结果为:

Runoob

五、匿名内部类

PHP 7 支持通过 new class 来实例化一个匿名类,这可以用来替代一些"用后即焚"的完整类定义。

示例

<?php
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;
// 使用 new class 创建匿名类
$app->setLogger(new class implements Logger {public function log(string $msg) {print($msg);}
});$app->getLogger()->log("我的第一条日志");
?>

以上程序执行输出结果为:

我的第一条日志

一文速学 - PHP7特性相关推荐

  1. 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现

    目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...

  2. Pyecharts一文速学-绘制桑基图详解+Python代码

    目录 前言 一.桑基图 二.Pyecharts绘制 1.数据处理 2.桑基图参数 1.class Sankey() 2.class SankeyLevelsOpts() 三.add()方法参数 1.s ...

  3. Pyecharts一文速学-绘制树形图实例+Python代码

    目录 前言 一.Tree树图 二.数据处理 点关注,防走丢,如有纰漏之处,请留言指教,非常感谢 前言 之前写pandas和matplotlib的时候说到了想要出一期Pyechart系列数据可视化的文章 ...

  4. 一文速学数模-降维模型(一)PCA(主成分分析法)原理以及应用+代码实现

    目录 前言 一.为什么需要PCA?(为什么要降维) 二.PCA简介 三.PCA算法推导 1.投影 2.基 3.基变换的矩阵表示 ​编辑 4.方差 5.协方差 6.协方差矩阵 7.特征值与特征向量 8. ...

  5. 一文速学-Pandas处理时间序列数据操作详解

    目录 前言 一.获取时间 二.时间索引 三.时间推移 参阅 前言 一般从数据库或者是从日志文件读出的数据均带有时间序列,做时序数据处理或者实时分析都需要对其时间序列进行归类归档.而Pandas是处理这 ...

  6. 一文速学-时间序列分析算法之移动平均模型(MA)详解+Python实例代码

    目录 前言 一.移动平均模型(MA) 模型原理 自回归 移动平均模型 自相关系数 常用的 MA 模型的自相关系数 通用: MA(1)模型: MA(2)模型: 自协方差函数 二.Python案例实现 平 ...

  7. 一文速学数模-季节性时序预测SARIMA模型详解+Python实现

    目录 前言 一.季节时间序列模型概述 二.SARIMA模型定义 三.SARIMA模型算法原理

  8. 一文速学数模-评价模型(二)熵权法实战确定评价指标权重

    目录 前言 一.熵权法介绍 二.使用步骤 1.数据预处理 2.计算指标信息熵

  9. 一文速学数模-分类模型(二)决策树(Decision Tree)算法详解及python实现

    目录 一.决策树概述 二.工作原理及特点 三.决策树的构造 四.信息增益

最新文章

  1. 阿里P8高级架构师:面试没你想象中的难,拿Offer也可以很轻松
  2. 【JSON】数据格式
  3. Imageloader4-ImageLoader中的变量
  4. Delphi中TFlowPanel实现滚动条效果
  5. boost::python模块实现使用内置 python 数据类型创建 ndarrays 的示例,并提取成员变量的类型和值测试程序
  6. barrier linux,LinuxBarrierI/O的介绍有哪些呢? 爱问知识人
  7. P3706 [SDOI2017]硬币游戏
  8. Android Intent 用法总结
  9. Linux的sys接口和proc接口创建
  10. 为什么promise就是微队列?setTimeOut就是宏队列?
  11. 11.06T1 DLZ常数剪枝+DP
  12. 高等数学(七)- 多元函数微分学(2)【多元函数极值问题】
  13. android 罗盘陀螺仪,电子罗盘有什么用,安卓智能手机的感应器的问题! 电子罗盘与陀螺仪有......
  14. 基于JAVA大学生旅游拼团网站计算机毕业设计源码+系统+数据库+lw文档+部署
  15. oracle直接路径读,direct path read直接路径读
  16. 信息学奥赛一本通:1183:病人排队
  17. 检查nmos管是否损坏
  18. WSO2 API Manager的使用
  19. 手机京东菜单html,jQuery仿京东商城手机端商品分类滑动切换特效
  20. 2019中兴捧月算法大赛历程

热门文章

  1. Android Studio基于数组适配器使用列表视图案例 —— 阅读古诗
  2. Gradle project sync failed. Basic functionality (e.g. editing, debugging) will not work properly
  3. 【CV】图像分类中的max pooling和average pooling区别
  4. 1016 average cow
  5. 设计模式在程序中的使用
  6. ruckus 设置OPTION43 实现设备自动注册
  7. 组织知识管理与个人知识管理
  8. 如何为信息流内容中心设计一个高效的处理链路,详解QQ看点在这方面的演进过程
  9. JavaScript 异常(例外)处理
  10. 【C++】类和对象1:初识类+this指针