php7函数,声明,返回值等新特性介绍


Posted in PHP onMay 25, 2018

使用 ... 运算符定义变长参数函数 (PHP 5 >= 5.6.0, PHP 7)

现在可以不依赖 func_get_args(), 使用 ... 运算符 来实现 变长参数函数。

<?php
function f($req, $opt = null, ...$params) {
 // $params 是一个包含了剩余参数的数组
 printf('$req: %d; $opt: %d; number of params: %d'."\n",
  $req, $opt, count($params));
}
f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
?>

以上例程会输出:

$req: 1; $opt: 0; number of params: 0
$req: 1; $opt: 2; number of params: 0
$req: 1; $opt: 2; number of params: 1
$req: 1; $opt: 2; number of params: 2
$req: 1; $opt: 2; number of params: 3

使用 ... 运算符进行参数展开 (PHP 5 >= 5.6.0, PHP 7)

在调用函数的时候,使用 ... 运算符, 将 数组 和 可遍历 对象展开为函数参数。 在其他编程语言,比如 Ruby中,这被称为连接运算符,。

<?php
function add($a, $b, $c) {
 return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>

以上例程会输出:

6

use function 以及 use const (PHP 5 >= 5.6.0, PHP 7)

use 运算符 被进行了扩展以支持在类中导入外部的函数和常量。 对应的结构为 use function 和 use const。

<?php
namespace Name\Space {
 const FOO = 42;
 function f() { echo FUNCTION."\n"; }
}
namespace {
 use const Name\Space\FOO;
 use function Name\Space\f;
 echo FOO."\n";
 f();
}
?>

以上例程会输出:

42

Name\Space\f

debugInfo() (PHP 5 >= 5.6.0, PHP 7)

加入 debugInfo(), 当使用 var_dump() 输出对象的时候, 可以用来控制要输出的属性和值。

<?php
class C {
 private $prop;
 public function construct($val) {
 $this->prop = $val;
 }
 public function debugInfo() {
 return [
  'propSquared' => $this->prop ** 2,
 ];
 }
}
var_dump(new C(42));
?>

以上例程会输出:

object(C)#1 (1) {
 ["propSquared"]=>
 int(1764)
}

标量类型声明 (PHP 7)

标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。它们扩充了PHP5中引入的其他类型:类名,接口,数组和 回调类型。

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{ return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));

以上例程会输出:

int(9)

要使用严格模式,一个 declare 声明指令必须放在文件的顶部。这意味着严格声明标量是基于文件可配的。 这个指令不仅影响参数的类型声明,也影响到函数的返回值声明(参见返回值类型声明, 内置的PHP函数以及扩展中加载的PHP函数)

返回值类型声明 (PHP 7)

PHP 7 增加了对返回类型声明的支持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。

<?php
function arraysSum(array ...$arrays): array
{
 return array_map(function(array $array): int {
 return array_sum($array);
 }, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

以上例程会输出:

Array
(
[0] => 6
[1] => 15
[2] => 24
)

null合并运算符 (PHP 7)

由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
 
// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

太空船操作符(组合比较符)(PHP 7)

太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。

<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>

通过 define() 定义常量数组 (PHP 7)

Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const 定义。

<?php
define('ANIMALS', [
 'dog',
 'cat',
 'bird'
]);
echo ANIMALS[1]; // outputs "cat"
?>

总结

以上所述是小编给大家介绍的php7函数,声明,返回值等新特性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP Array交叉表实现代码
Aug 05 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
Laravel中Kafka的使用详解
Mar 24 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 #PHP
CodeIgniter框架数据库基本操作示例
May 24 #PHP
PHP实现生成数据字典功能示例
May 24 #PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 #PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 #PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 #PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 #PHP
You might like
php中的MVC模式运用技巧
2007/05/03 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP时间和日期函数详解
2015/05/08 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
求职信范文怎么写
2014/01/29 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
Python中异常处理用法
2021/11/27 Python