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入门源程序
Oct 09 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
yii实现创建验证码实例解析
Jul 31 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php数组添加与删除单元的常用函数实例分析
Feb 16 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
PHP使用非对称加密算法RSA
Apr 21 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中的超全局变量
2006/10/09 PHP
Dedecms常用函数解析
2008/02/01 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
python发腾讯微博代码分享
2014/01/10 Python
浅析Python中的多重继承
2015/04/28 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
python实现学生通讯录管理系统
2021/02/25 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
struct和class的区别
2015/11/20 面试题
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
自我鉴定怎么写
2013/12/05 职场文书
小摄影师教学反思
2014/04/27 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python
mysql分表之后如何平滑上线详解
2021/11/01 MySQL