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 实用代码收集
Jan 22 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
destoon找回管理员密码的方法
Jun 21 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
Jan 09 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
PHP fopen函数用法实例讲解
Feb 15 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
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python中使用SAX解析xml实例
2014/11/21 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
python将unicode转为str的方法
2017/06/21 Python
Python检测网络延迟的代码
2018/05/15 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
如何给Python代码进行加密
2020/01/10 Python
python爬取youtube视频的示例代码
2021/03/03 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
学习决心书
2014/03/11 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
社区文艺活动方案
2014/08/19 职场文书
机关作风建设心得体会
2014/10/22 职场文书
2014年校长工作总结
2014/12/11 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书