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 截取字符串专题集合
Aug 19 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
php中socket通信机制实例详解
Jan 03 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
CI框架入门之MVC简单示例
Nov 21 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
php项目中类的自动加载实例讲解
Sep 12 PHP
PHP基本语法
Mar 31 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里面的抽象类
2010/01/28 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
CSS和Javascript简单复习资料
2010/06/29 Javascript
清空上传控件input file的值
2010/07/03 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
JavaScript动态绑定详解
2017/09/14 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python简明入门教程
2015/08/04 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Python基于WordCloud制作词云图
2019/11/29 Python
python实现猜数游戏
2020/03/27 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
木工主管岗位职责
2013/12/08 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
律师函格式范本
2015/05/27 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL