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
php小偷相关截取函数备忘
Nov 28 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
php调用mysql数据 dbclass类
May 07 PHP
解析php中memcache的应用
Jun 18 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
php图片添加水印例子
Jul 20 PHP
php封装的smarty类完整实例
Oct 19 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
php 可变函数使用小结
Jun 12 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
域名和cookie问题(域名后缀)
2012/10/10 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
js微信分享实现代码
2020/10/11 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
利用Python演示数型数据结构的教程
2015/04/03 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
深入理解Python异常处理的哲学
2019/02/01 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
XML文档面试题
2015/08/05 面试题
护士实习生自我鉴定范文
2013/12/10 职场文书
银行门卫岗位职责
2013/12/29 职场文书
同学会邀请书大全
2014/01/12 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python