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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
PHP个人网站架设连环讲(二)
Oct 09 PHP
Php图像处理类代码分享
Jan 19 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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无限分类的类
2007/01/02 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php提交post数组参数实例分析
2015/12/17 PHP
php实例化一个类的具体方法
2019/09/19 PHP
javascript基本语法分析说明
2008/06/15 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
经理职责范文
2013/11/08 职场文书
毕业生自荐信格式
2014/03/07 职场文书
参赛口号
2014/06/16 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
中学生运动会广播稿
2015/08/19 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
python调试工具Birdseye的使用教程
2021/05/25 Python
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android