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一些有意思的小区别
Dec 06 PHP
PHP程序员编程注意事项
Apr 10 PHP
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
php字符串过滤与替换小结
Jan 26 PHP
CodeIgniter删除和设置Cookie的方法
Apr 07 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
2011/06/21 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
python difflib模块示例讲解
2017/09/13 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Python闭包函数定义与用法分析
2018/07/20 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
介绍一些UNIX常用简单命令
2014/11/11 面试题
实习生岗位职责
2014/04/12 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
初中同学会活动方案
2014/08/22 职场文书
学风建设主题班会
2015/08/17 职场文书
商场广播稿范文
2015/08/19 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL