php7 php常用函数200个,声明,返回值支持多个类型吗

51CTO旗下网站
PHP 7 的五大新特性
如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对其没有影响。
作者:来源:| 09:04
1. 运算符(NULL 合并运算符)
把这个放在第一个说是因为我觉得它很有用。用法:
$a = $_GET['a'] ?? 1;
它相当于:
$a = isset($_GET['a']) ? $_GET['a'] : 1;
我们知道三元运算符是可以这样用的:
但是这是建立在 $a 已经定义了的前提上。新增的 ?? 运算符可以简化判断。
2. 函数返回值类型声明
官方文档提供的例子(注意&&&的边长参数语法在 PHP 5.6 以上的版本中才有):
&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]));&
从这个例子中可以看出现在函数(包括匿名函数)都可以指定返回值的类型。
这种声明的写法有些类似于 swift:
func&sayHello(personName:&String)&-&&String&{&&&&&let&greeting&=&&Hello,&&&+&personName&+&&!&&&&&&return&greeting&}&
这个特性可以帮助我们避免一些 PHP 的隐式类型转换带来的问题。在定义一个函数之前就想好预期的结果可以避免一些不必要的错误。
不过这里也有一个特点需要注意。PHP 7 增加了一个&declare&指令:strict_types,既使用严格模式。
使用返回值类型声明时,如果没有声明为严格模式,如果返回值不是预期的类型,PHP 还是会对其进行强制类型转换。但是如果是严格模式, 则会出发一个&TypeError&的 Fatal error。
强制模式:
&php&function&foo($a)&:&int&{&&&&&return&$a;&}&&foo(1.0);&
以上代码可以正常执行,foo 函数返回 int 1,没有任何错误。
严格模式:
&php&declare(strict_types=1);&&function&foo($a)&:&int&{&&&&&return&$a;&}&&foo(1.0);&#&PHP&Fatal&error:&&Uncaught&TypeError:&Return&value&of&foo()&must&be&of&the&type&integer,&float&returned&in&test.php:6&
在声明之后,就会触发致命错误。
是不是有点类似与 js 的 strict mode?
3. 标量类型声明
PHP 7 中的函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接口、array&或者&callable&(PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用&string、int、float和&bool&了。
官方示例:
&php&&function&sumOfInts(int&...$ints)&{&&&&&return&array_sum($ints);&}&&var_dump(sumOfInts(2,&'3',&4.1));&
需要注意的是上文提到的严格模式的问题在这里同样适用:强制模式(默认,既强制类型转换)下还是会对不符合预期的参数进行强制类型转换,严格模式下则触发&TypeError&的致命错误。
4. use 批量声明
PHP 7 中 use 可以在一句话中声明多个类或函数或 const 了:
&php&use&some/namespace/{ClassA,&ClassB,&ClassC&as&C};&use&function&some/namespace/{fn_a,&fn_b,&fn_c};&use&const&some/namespace/{ConstA,&ConstB,&ConstC};&
但还是要写出每个类或函数或 const 的名称(并没有像 python 一样的&from some import *&的方法)。
需要留意的问题是:如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对其没有影响。
5. 其他的特性
其他的一些特性我就不一一介绍了,有兴趣可以查看官方文档:
简要说几个:
PHP 5.3 开始有了匿名函数,现在又有了匿名类了;
define 现在可以定义常量数组;
(&)增加了一个 call 方法;
生成器(或者叫迭代器更合适)可以有一个最终返回值(return),也可以通过&yield from&的新语法进入一个另外一个生成器中(生成器委托)。
生成器的两个新特性(return 和&yield from)可以组合。具体的表象大家可以自行测试。PHP 7 现在已经到 RC5 了,最终的版本应该会很快到来。【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点头条关注头条热点
24H热文一周话题本月最赞
讲师:30722人学习过
讲师:81806人学习过
讲师:11917人学习过
精选博文论坛热帖下载排行
精选目前国内外最流行的程序设计语言――Java作为本书的选题,并以丰富的内容来解决读者学习该语言时可能遇到的各种问题。以专业的论坛为基...
订阅51CTO邮刊471 次阅读
PHP 7.2已于 11月30日正式发布,该版本具有新特性,功能和改进,可以让我们编写更好的代码。在这篇文章中,我将介绍一些PHP 7.2中最有趣的语言特性-参数类型声明。
参数类型声明
从PHP 5开始,我们可以在函数的声明中指定预期要传递的参数类型。如果给定值的类型不正确,那么PHP将引发错误。参数类型声明(也称为类型提示)指定预期传递给函数或类方法的变量的类型。
来一个例子:
class MyClass {
public $var = 'Hello World';
$myclass = new MyC
function test(MyClass $myclass){
return $myclass-&
echo test($myclass);
在这段代码中,测试函数需要MyClass的一个实例。不正确的数据类型会导致以下致命错误:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
由于PHP 7.2 类型提示可以与对象数据类型一起使用,并且此改进允许将通用对象声明为函数或方法的参数。这里是一个例子:
class MyClass {
public $var = '';
class FirstChild extends MyClass {
public $var = 'My name is Jim';
class SecondChild extends MyClass {
public $var = 'My name is John';
$firstchild = new FirstC
$secondchild = new SecondC
function test(object $arg) {
return $arg-&
echo test($firstchild);
echo test($secondchild);
在这个例子中,我们调用了两次测试函数,每次调用都传递一个不同的对象。在以前的PHP版本中这是不可能的。
对象返回类型声明
如果参数类型声明指定函数参数的预期类型,则返回类型声明指定返回值的预期类型。
返回类型声明指定了函数预期返回的变量的类型。
从PHP 7.2开始,我们被允许为对象数据类型使用返回类型声明。这里是一个例子:
class MyClass {
public $var = 'Hello World';
$myclass = new MyC
function test(MyClass $arg) : object {
echo test($myclass)-&
以前的PHP版本会导致以下致命错误:
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
当然,在PHP 7.2中,这个代码会回应'Hello World'。
参数类型宽限声明
PHP目前不允许子类和它们的父类或接口之间的参数类型有任何差异。那是什么意思?考虑下面的代码:
class MyClass {
public function myFunction(array $myarray) { /* ... */ }
class MyChildClass extends MyClass {
public function myFunction($myarray) { /* ... */ }
这里我们省略了子类中的参数类型。在PHP 7.0中,此代码会产生以下警告:
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
自PHP 7.2以来,我们被允许在不破坏任何代码的情况下省略子类中的类型。这个建议将允许我们升级类以在库中使用类型提示,而不需要更新所有的子类。
在列表语法中尾随逗号
数组中最后一项之后的尾随逗号是PHP中的有效语法,有时为了轻松附加新项目并避免由于缺少逗号而导致解析错误,鼓励使用它。自PHP 7.2起,我们被允许在
分组命名空间中使用尾随逗号。
请参阅列表语法中的尾随逗号以便更深入地查看此RFC和一些代码示例。
2 收藏&&|&&0
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。站点的翻译文章创建时,您将第一时间收到通知。
这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击
已经在 2017 年 11 月 30 日
。这次发布包含新特性、功能,及优化,以让我们写出更好的代码。在这篇文章里,将会介绍一些 PHP 7.2 最有趣的语言特性。
页面查看完整的更新清单。
leochien 翻译于 4个月前
参数类型声明
从 PHP5 起,我们可以指定函数参数的预期声明类型。如果传参类型错误,PHP 就会抛出一个错误。
(也称类型提示) 指定预期要传参给函数或者类方法的参数类型。
这里有个例子:
class MyClass {
public $var = 'Hello World';
$myclass = new MyC
function test(MyClass $myclass){
return $myclass-&
echo test($myclass);
wilson_yang 翻译于 4个月前
在这段代码中,测试函数需要一个 MyClass 实例。不正确的参数数据类型会导致一个致命错误。
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
从 PHP 7.2
可以被用在对象型数据上,并且这个改进允许通用对象类型作为一个函数或者方法的参数。这里有个例子:
class MyClass {
public $var = '';
class FirstChild extends MyClass {
public $var = 'My name is Jim';
class SecondChild extends MyClass {
public $var = 'My name is John';
$firstchild = new FirstC
$secondchild = new SecondC
function test(object $arg) {
return $arg-&
echo test($firstchild);
echo test($secondchild);
在以上示例中,我们调用了两次测试函数,每次都传递一个不同的对象。这在之前的 PHP 版本中是前所未有的。
在 Docker 中测试 PHP 7.0 和 PHP 7.2 的类型提示。
wilson_yang 翻译于 4个月前
对象返回类型声明
若变量类型指定函数参数的预期类型,返回值类型同样也可以被指定预期类型。
指定一个函数应该返回的预期类型。
PHP 7.2 起,对象数据类型可以使用返回类型声明。这里有个例子:
class MyClass {
public $var = 'Hello World';
$myclass = new MyC
function test(MyClass $arg) : object {
echo test($myclass)-&
之前的 PHP 版本会抛出以下致命错误:
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
当然,PHP 7.2 的代码会打印出 'Hello World'。
wilson_yang 翻译于 4个月前
参数类型泛化
PHP 目前是不允许子类和它父类或者接口的参数类型有任何差异的。 这是什么意思呢?
参考下以下代码:
class MyClass {
public function myFunction(array $myarray) { /* ... */ }
class MyChildClass extends MyClass {
public function myFunction($myarray) { /* ... */ }
这里我们省略了子类中的参数类型。 在 PHP 7.0 中,会产生以下警告:
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
从 PHP 7.2 起, 而不会破坏任何代码。这个方案使得我们可以在库中升级类,从而可以使用类型提示,却无需更新其所有的子类。
wilson_yang 翻译于 4个月前
列表语法中的尾随逗号
在 PHP 数组的最后一个元素上使用尾随逗号是
,可以很轻松的避免增加新元素的时候出现缺失逗号的错误。 从 PHP 7.2 在
获得 RFC 的直观感知和一些示例代码。
安全性改进
wilson_yang 翻译于 4个月前
密码哈希中的Argon2
是荣获 2015 年密码哈希算法比赛中的冠军的强大哈希算法, PHP 7.2 将其作为安全
算法的替代品。
新版的 PHP 中引入了
常量,现在可以在
系列函数中使用:
password_hash('password', PASSWORD_ARGON2I);
与只使用一个 cost 因子的 Bcrypt 不同, Argon2 使用三个 cost 因子 区分如下:
定义哈希计算期间应该消耗的KiB数量的内存开销(默认值为1 && 10或1024 KiB或1 MiB)
定义哈希算法迭代次数的时间开销(默认值为2)
并行因子,用于设置哈希计算时使用的并行线程数(缺省值为2)
以下三个新常量定义了默认的 cost 因子:
PASSWORD_ARGON2_DEFAULT_MEMORY_COST
PASSWORD_ARGON2_DEFAULT_TIME_COST
PASSWORD_ARGON2_DEFAULT_THREADS
这里有个例子:
$options = ['memory_cost' =& 1&&11, 'time_cost' =& 4, 'threads' =& 2];
password_hash('password', PASSWORD_ARGON2I, $options);
的更多信息。
wilson_yang 翻译于 4个月前
Libsodium 成为 PHP 核心的组成部分
从 7.2 版开始,PHP 在其核心中涵盖了
是一个跨平台和跨语言的库,用于加密,解密,签名,密码哈希等。
这个库之前是
来提供的。
有关 Libsodium 函数列表,参阅 。
也可参阅 。
wilson_yang 翻译于 4个月前
这里有个 PHP 7.2
清单,PHP 8.0 之后将全部移除。
PHP 5.1 中 __autoload 函数已被
取代。现在会在编译期间报一个弃用通知。
当抛出致命错误的时候,会创建 $php_errormsg 局部变量。 PHP 7.2 中应该使用
替代这种做法。
create_function() 可以创建一个具有函数名称的函数,将函数参数和函数体作为该函数的列表传入。因为安全问题和性能表现不佳,它被标记为弃用,鼓励用封装替代。
mbstring.func_overload ini 设置为非零值已经被标记为弃用。
(unset) cast 是个总是返回 null 的表达式,并且毫无用处。
如果传入第二个参数, 将查询字符串解析到数组当中, 否则解析到本地符号表。 因为安全原因,
在函数作用域中动态设置变量,使用不带第二个参数的 parse_str() 将抛一个弃用通知。
wilson_yang 翻译于 4个月前
gmp_random() 是平台相关的,将会被废弃。使用
each() 在数组上迭代的行为非常像 foreach(),但 foreach() 基于一些原因而成为更优选择,例如它的速度快上 10 倍。现在在循环中使用前者将会抛出一个废弃提示。
assert() 函数检查给定的断言,并在结果为 FALSE 的时候进行相关处理。 带有字符串参数的 assert() 现在已经弃用,因为它有 RCE 漏洞。
ini 选项可以关闭断言表达式。
$errcontext 是一个包含产生错误时的局部变量数组。它可被作为错误处理程序
函数的最后一个参数。
wilson_yang 翻译于 4个月前
gmp_random() 被认为有平台相依性,将会被弃用。使用
each() 非常像 foreach(),被用来遍历数组,但 foreach() 因为一些原因被视为更好的选择,包含更快 10 倍。现在第一次在回圈中调用 each() 时会抛出弃用警告。
assert() function 会检查给予的断言条件且在结果为 FALSE 时采取适当的行动。字串参数在 assert() 的使用已被弃用因为他将导致 RCE 漏洞。
ini 选项可以用来避免断言表达式的检测。
$errcontext 是一个数组,包含当一个错误产生时会存在的区域变数。他被作为错误捕捉器的最后一个参数,由
leochien 翻译于 4个月前
PHP 7.2 对 WordPress 用户意味着什么?
根据官方 所示,截至撰写本文时,只有 19.8% 的 WordPress 用户升级到了 PHP 7。只有 5%使用 。你可以看到超过 40% 的用户仍然使用 PHP 5.6,更可怕的是超过 39% 的用户在使用已经不受支持的 PHP 版本。截至 2016 年 12 月,WordPress.org 为 PHP 5.6 版本的用户修改
为建议使用 PHP 7 或以上的版本。
WordPress PHP 7.1 数据统计
科大大 翻译于 4个月前
以上的数据表现并不令人愉悦,因为看上去 PHP 7 好像更快点。下面是一些统计数据:
显示 PHP 7 允许系统每秒执行2次请求,与 PHP 5.6 相比,几乎只是一般的延迟。
Christian Vigh 也发布了一个
他发现 PHP 5.2 比 PHP 7 慢了近 400%。
我们在 2018 运行了性能基准测试 。与上述基准测试类似,我们发现 PHP 7.2 与 PHP 5.6 相比每秒可执行几乎三倍数量的事务(请求)。
wilson_yang 翻译于 4个月前
WordPress 基准测试
WordPress 4.9.4 PHP 5.6 基准测试结果: 49.18 req/sec
WordPress 4.9.4 PHP 7.0 基准测试结果: 133.55 req/sec
WordPress 4.9.4 PHP 7.1 基准测试结果:134.24 req/sec
WordPress 4.9.4 PHP 7.2 基准测试结果:148.80 req/sec ?
WordPress 4.9.4 HHVM 基准测试结果:144.76 req/sec
许多东西在仅仅在更新上比较慢,因为要花时间去参与测试所有新的第三方插件和主题确保它们可以正常运行。很多时候,慢是因为它们还没完成。不确定你运行的 PHP 是什么版本?其中一个很最简单的方法就是使用这个工具
或者 Google Chrome开发工具.。第一个 HTTP 请求头一般将会展示你的版本。
检查 PHP 版本
wilson_yang 翻译于 4个月前
这将依赖于主机不修改 X-Powered-By 头信息的值。如果修改了的话,你可能就看不到 PHP 的版本信息了,这种情况下你需要 .。或者你总是去询问主机。
升级到 PHP 7.2
PHP 7.2 还有一部分没完成,但是你可以先尝尝鲜。你可以
或者在类似
环境中检查你的脚本,你可以在命令行中测试比较不同的 PHP 版本。
准备好切换到 PHP 7.2 了吗?不过至少希望你首先已经过渡到了 PHP 7 以上的版本了。如果你现在还没准备好测试的话,那么,升级你的脚本,检查你的代码,说说你对 PHP 7.2 的首次体验。
wilson_yang 翻译于 4个月前
原文地址:
译文地址:
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 ,如果我们的工作有侵犯到您的权益,请及时联系我们。
附加内容, 使用此功能的话, 会给所有参加过讨论的人发送提醒.
我要举报该,理由是:
垃圾广告信息:恶意灌水、广告、推广、测试等内容
违规内容:色情、暴利、血腥、敏感信息等
不友善内容:人身攻击、挑衅辱骂、恶意行为
其他理由:请补充说明
<button class="btn btn-success popover-with-html"
data-toggle="modal" data-target="#payment-qrcode-modal" data-content="如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!可以修改个人资料「支付二维码」开启打赏功能。">
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
站长 @ laravel-china.org
您需要登陆以后才能留下评论!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
请使用微信扫描二维码。
将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
Lumen 是为速度而生,专注于构建无状态 API 的 Laravel 精简版
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
PHP 扩展依赖工具 Composer 的官方文档翻译,每年校对
全文搜索分析引擎 Elasticsearch PHP 端文档中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
GraphQL PHP 项目的中文文档,教你如何开发 GraphQL API 接口
一些撰写文档的技巧和思路,一个教你写出好文档的文档。
本系列文章为 laracasts.com 的系列视频教程的课程笔记
PSR 是由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。
设计模式是 PHP 架构师必备知识,本文档完整收录了 PHP 相关的设计模式。
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会纠纷处理 (9:00-18:00)
图书审核 (9:00-18:00)
该店铺的此商品已下架或删除,我们为您推荐其他店铺的该商品。
为您找到其他店铺的该商品
北京市海淀区
加入购物车
北京市海淀区
加入购物车
加入购物车
北京市通州区
加入购物车
北京市东城区
加入购物车
北京市房山区
加入购物车
北京市通州区
加入购物车
北京市海淀区
加入购物车
广东省东莞市
加入购物车
北京市通州区
加入购物车PHP7是什么鬼?
PHP7是PHP编程语言的一个主要版本,并号称是开发Web应用程序的一次革命,可开发和交付移动企业和云应用。此版本被认为是PHP在2004年发布PHP5后最重要的变化。
PHP7有加入几十个功能,最显著的是下面提到&-
改进的性能&-&PHPNG代码合并在PHP7中,这是比 PHP5快两倍;
降低内存消耗&-&优化后PHP7使用较少的资源;
标量类型声明&-&现在,参数和返回值类型可以被强制执行;
一致性的64位支持&-&64位架构机器持续支持;
改进异常层次结构&-&异常层次结构得到改善;
许多致命错误转换成异常&-&异常的范围增大覆盖为许多致命的错误转化异常;
安全随机数发生器&-&加入新的安全随机数生成器的API;
已过时的API和扩展删除&-&不同的旧的和不支持的应用程序和扩展,从最新的版本中删除;
null合并运算符(??)的新空合并运算符被加入;
返回和标量类型声明支持返回类型和参数类型也被加入;
增加了对匿名匿名类的支持;
零成本声明支持零成本加入断言。
PHP7使用新的&Zend&Engine&3.0&提高应用程序性能两倍,比PHP5.6 低了 50% 的内存消耗。&它可以服务于更多的并发用户,无需任何额外的硬件。考虑到当今的工作量&PHP7设计并重构。
PHP7&-&性能
按照Zend开发小组,下图显示了流行的基于PHP应用在3.7&HHVM上&PHP7&与 PHP5.6&比较的性能。
Magento 1.9
在执行的Magento事务相比PHP5.6,PHP7要快两倍。
在执行 Drupal 事务相比PHP5.6,PHP7证明快两倍。
Wordpress 3.6
PHP7 证明自己比&PHP5.6&快两倍,因为在执行 WordPress 事务相比。
动态语言的比较
PHP7&-&环境设置
为了开发和运行PHP&Web页面,需要您在计算机系统上安装三个重要组件。
Web服务器&-&PHP几乎能与所有的Web服务器软件一起工作,包括微软的Internet&Information&Server(IIS),但是最常用的是免费提供的Apache服务器。&在这里免费下载Apache&-&
数据库&-&PHP几乎能与所有的数据库软件工作,其中包括Oracle和Sybase,但最常用的是免费的MySQL数据库。MySQL在这里免费下载在&-
PHP分析器-&为了处理PHP脚本的说明必须安装一个分析器,生成HTML输出,可以发送到Web浏览器。本教程将指导您如何在您的计算机上安装PHP解析器。
PHP解析器安装
在继续之前,确保你有适当的环境设置在你的机器上,使用PHP开发Web程序是非常重要的。保存下面的PHP文件在Apache的htdocs文件夹中。
phpinfo.php
phpinfo();
输入下面的地址在浏览器的地址栏中,查看输出结果。
http://127.0.0.1/phpinfo.php&
如果这显示了PHP安装相关信息的页面,那么就意味着PHP和Web服务器安装正确。否则,您必须遵循特定程序在计算机上安装PHP。
本节将指导您安装并在以下四个平台上配置PHP(本系列教程是基于 Win10上安装Apache+PHP开发环境) -
Apache配置
如果您使用Apache作为Web服务器,本节将指导您编辑Apache的配置文件。
详细请看这里-&
PHP.INI文件配置
PHP配置文件 - php.ini,这会影响 PHP 功能最直接的方式。
Windows IIS配置
如果要在您的Windows计算机上配置IIS,可以参考IIS手册。
PHP7&-&标量类型声明
在PHP7有一个新的功能,标量类型声明已被引入。标量类型声明有两种选择:
强制&-&强制性是默认模式,不需要指定。
严格&-&严格模式有明确的暗示。
以下几种类型的函数参数可以通过上述方式强制执行:
interfaces
示例&-&强制模式
// Coercive mode
function sum(int ...$ints)
return array_sum($ints);
print(sum(2, '3', 4.1));
浏览器将产生以下输出&-
示例&-&严格模式
// Strict mode
declare(strict_types=1);
function sum(int ...$ints)
return array_sum($ints);
print(sum(2, '3', 4.1));
浏览器将产生以下输出&-
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...
PHP7&-&返回类型声明
在PHP7中有一个新的功能,已引入返回类型声明。返回类型声明指定一个函数的返回值类型。以下类型返回类型是可以声明的:
interfaces
示例&-&有效的返回类型
declare(strict_types=1);
function returnIntValue(int $value): int
print(returnIntValue(5));
浏览器将产生以下输出-
示例&-&无效的返回类型
declare(strict_types=1);
function returnIntValue(int $value): int
return $value + 1.0;
print(returnIntValue(5));
这将产生以下浏览器输出&-
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
PHP7&-&Null合并运算符
PHP7一个新的功能,空合并运算符(??)已经推出。它是用来与isset()函数函数一起替换三元操作。如果存在且不是 NULL 空合并运算符返回它的第一个操作数;否则返回第二个操作数。
// fetch the value of $_GET['user'] and returns 'not passed'
// if username is not passed
$username = $_GET['username'] ?? 'not passed';
print($username);
print("&br/&");
// Equivalent code using ternary operator
$username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
print($username);
print("&br/&");
// Chaining ?? operation
$username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
print($username);
这将在浏览器产生以下输出&-
not passed
not passed
not passed
PHP7飞船操作符
在PHP7中有一个新的功能-飞船操作符相继引入。它是用于比较两个表达式。当第一个表达式较第二个表达式分别小于,等于或大于时它分别返回-1,0或1。
//integer comparison
print( 1 &=& 1);print("&br/&");
print( 1 &=& 2);print("&br/&");
print( 2 &=& 1);print("&br/&");
print("&br/&");
//float comparison
print( 1.5 &=& 1.5);print("&br/&");
print( 1.5 &=& 2.5);print("&br/&");
print( 2.5 &=& 1.5);print("&br/&");
print("&br/&");
//string comparison
print( "a" &=& "a");print("&br/&");
print( "a" &=& "b");print("&br/&");
print( "b" &=& "a");print("&br/&");
这将在浏览器产生以下输出&-
PHP7&-&常量数组
数组常量现在可以使用&define()&函数定义。在PHP5.6中,它们只能使用const关键字定义。
//define a array using define function
define('animals', [
print(animals[1]);
这将在浏览器产生以下输出&-
PHP7&-&匿名类
匿名类现在可以使用&new&class&来定义。匿名类可以使用来代替完整的类定义。
interface Logger {
public function log(string $msg);
class Application {
public function getLogger(): Logger {
return $this-&
public function setLogger(Logger $logger) {
$this-&logger = $
$app = new A
$app-&setLogger(new class implements Logger {
public function log(string $msg) {
print($msg);
$app-&getLogger()-&log("My first Log Message");
这将在浏览器产生以下输出&-
My first Log Message
PHP7 - Closure::call()
Closure::call()&方法加入到临时绑定(bindTo)的对象范围,以简便方式封闭和调用它&它相比绑定到PHP5.6性能更快。
示例 - PHP7之前版本
private $x = 1;
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this-&x;
// Bind a clousure
$value = $getValue-&bindTo(new A, 'A');
print($value());
这将在浏览器产生以下输出&-
示例-PHP7+
private $x = 1;
// PHP 7+ code, Define
$value = function() {
return $this-&x;
print($value-&call(new A));
这将在浏览器产生以下输出&-
PHP7-&过滤unserialize()
PHP7引入了过滤&unserialize()函数以在反序列化不受信任的数据对象时提供更好的安全性。它可以防止可能的代码注入,使开发人员能够使用序列化白名单类。
class MyClass1 {
public $obj1
class MyClass2 {
public $obj2
$obj1 = new MyClass1();
$obj1-&obj1prop = 1;
$obj2 = new MyClass2();
$obj2-&obj2prop = 2;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
// default behaviour that accepts all classes
// second argument can be ommited.
// if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
$data = unserialize($serializedObj1 , ["allowed_classes" =& true]);
// converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" =& ["MyClass1", "MyClass2"]]);
print($data-&obj1prop);
print("&br/&");
print($data2-&obj2prop);
这将在浏览器产生以下输出&-
PHP7&-&国际字符
在PHP7,新的&IntlChar&类添加其目的是公开更多的ICU功能。&这个类定义了许多可用于操纵Unicode字符的静态方法和常数。你需要在使用这个类之前安装&Intl&扩展。
printf('%x', IntlChar::CODEPOINT_MAX);
print (IntlChar::charName('@'));
print(IntlChar::ispunct('!'));
这将在浏览器产生以下输出&-
COMMERCIAL AT
PHP7 - CSPRNG
在PHP7,以下两个新的函数引入以产生一个跨平台的方式加密安全整数和字符串。
random_bytes()&-&生成加密安全伪随机字节。
random_int()&-&生成加密安全伪随机整数。
random_bytes()
random_bytes()适合于使用来生成密码,密码学随机的任意长度的字符串,如:生成&salt,密钥或初始向量。
string random_bytes ( int $length )
length&-&返回随机串的字节长度
返回包含加密安全随机字节的请求数量的字符串。
如果无法找到随机性的适当源,将引发异常
如果给定参数无效,TypeError将被抛出
如果给出字节长度无效,错误将被抛出
$bytes = random_bytes(5);
print(bin2hex($bytes));
这将在浏览器产生以下输出&-
54cc305593
random_int()
random_int()产生适合于用于结果是非常重要的加密随机整数。
int random_int ( int $min , int $max )
min&-&返回最小值,它必须是PHP_INT_MIN或更大的值
max&-&返回最大值,它必须是小于或等于PHP_INT_MAX
返回最小值(min)到最大(max)的范围内,包括加密安全随机整数。
如果无法找到随机性一个适当的源,将引发异常
如果给定参数无效,TypeError 将被抛出
如果 max 小于 min 时,错误将被抛出
print(random_int(100, 999));
print(random_int(-1000, 0));
这将在浏览器产生以下输出&-
PHP7&- 期望
期望是向后兼容的增强到旧&assert()&函数。期望允许在生产代码零成本的断言,并提供在断言失败时抛出自定义异常的能力。assert()&不是一种语言构建体,其中第一个参数是一个表达式的比较字符串或布尔用于测试。
配置指令assert()
zend.assertions
1&-&生成并执行代码(开发模式)
0&-&生成代码,但它在运行时
-1&-&不生成代码(生产模式)
assert.exception
1&-&当断言失败时抛出,要么抛出的异常,或者通过抛出一个新的 AssertionError 对象提供的对象,如果没有提供异常
0&-&使用或与上述生成的Throwable,但只能根据该对象的警告,而不是(与PHP&5兼容的行为)把它抛出
assertion&-&断言。在PHP&5中,这必须是要计算一个字符串或要测试一个布尔值。&在PHP中7,这也可能是一个返回值的表达式,将执行和使用的结果,以指示断言是成功还是失败。
description&-&一个可选的描述,如果断言失败,将包括失败消息。
exception-在PHP7,第二个参数可以是一个 Throwable 对象,而不是一个描述字符串,在这种情况下,这是如果断言失败和assert.exception配置指令启用将抛出的对象。
如果断言为假为FALSE,否则为TRUE。
ini_set('assert.exception', 1);
class CustomError extends AssertionError {}
assert(false, new CustomError('Custom Error Message!'));
这将在浏览器产生以下输出&-
Fatal error: Uncaught CustomError: Custom Error Message! in...
PHP7 - use语句
从PHP7起,单次使用&use&语句可以用来从同一个命名空间导入类,函数和常量(而不用多次使用&use&语句)。
// Before PHP 7
use com\yiibai\ClassA;
use com\yiibai\ClassB;
use com\yiibai\ClassC as C;
use function com\yiibai\fn_a;
use function com\yiibai\fn_b;
use function com\yiibai\fn_c;
use const com\yiibai\ConstA;
use const com\yiibai\ConstB;
use const com\yiibai\ConstC;
// PHP 7+ code
use com\yiibai\{ClassA, ClassB, ClassC as C};
use function com\yiibai\{fn_a, fn_b, fn_c};
use const com\yiibai\{ConstA, ConstB, ConstC};
PHP7&-&错误处理
从PHP7,错误处理和报告已经改变。PHP5中使用了传统的错误报告机制的错误,现在大多数的错误将通过抛出异常错误处理。类似于异常,这些错误异常会冒泡,直到它们到达第一个匹配的catch块。如果没有匹配的块,那么会使用&set_exception_handler()&安装一个默认的异常处理并被调用,并在情况下,如果没有默认的异常处理程序,那么该异常将被转换为一个致命的错误,并会像传统错误那样处理。
由于&Error&层次结构不是从异常(Exception),代码扩展使用catch&(Exception $e) { ... }&块来处理未捕获的异常,PHP5中将不会处理这样的错误。& catch (Error $e) { ... }&块或 set_exception_handler()处理程序需要处理的致命错误。
class MathOperations
protected $n = 10;
// Try to get the Division by Zero error object and display as Exception
public function doOperation(): string
$value = $this-&n % 0;
} catch (DivisionByZeroError $e) {
return $e-&getMessage();
$mathOperationsObj = new MathOperations();
print($mathOperationsObj-&doOperation());
浏览器中将产生以下输出-
Modulo by zero
PHP7&-&整数除法
PHP7引入了intdiv()的新函数,它执行操作数的整数除法并返回结果为 int 类型。
$value = intdiv(10,3);
var_dump($value);
print($value);
这将在浏览器产生以下输出&-
PHP7 - Session选项
从PHP7+,session_start()函数接受数组参数覆盖在php.ini中设置的会话配置指令。这些选项支持 session.lazy,在默认情况下如果PHP会话数据改变,那么会覆盖任何会话数据信息。
添加另一种选择是:read_and_close,这表明会话数据应被读取,然后该会话应当立即被关闭不变。例如,session.cache_limiter 设置为私有,并设置标志使用下面的代码片段之后立即关闭会话。
session_start([
'cache_limiter' =& 'private',
'read_and_close' =& true,
PHP7&-&弃用的功能
以下功能已被取消,可能会在PHP的未来版本中删除。
PHP4风格的构造函数
PHP4式构造函数,它与类的名称相同,因为它们是在所定义类的方法,现在已过时,并且将在未来被移除。如果PHP4的构造仅仅是一个类中定义构造函数,PHP7将发出E_DEPRECATED。类实现构造函数&__construct()方法不受影响。
function A() {
print('Style Constructor');
这将在浏览器产生以下输出&-
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; A has a deprecated constructor in...
静态调用非静态方法
非静态方法静态调用已被弃用,并且可能在将来被移除。
function b() {
print('Non-static call');
这将在浏览器产生以下输出&-
Deprecated: Non-static method A::b() should not be called statically in...
Non-static call
password_hash() salt 选项
password_hash()函数的salt选项已被弃用,使开发人员不会产生他们自己的(通常是不安全的)salt。函数本身生成一个加密的安全salt,在开发者没有提供salt值时&-&因此,定制&salt&生成不再需要了。
capture_session_meta SSL上下文选项
capture_session_meta&SSL上下文选项已被弃用。&SSL元数据现在通过stream_get_meta_data()函数获取。
PHP7已删除的扩展
以下扩展名从PHP7起删除
PHP7已删除的SAPI
以下SAPI从PHP7起删除
apache_hooks
apache2filter
continuity
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
开始学习 >> :
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
Java技术群:
(人数:2000,免费:否)
MySQL/SQL群:
(人数:2000,免费:否)
大数据开发群:
(人数:2000,免费:否)
Python技术群:
(人数:2000,免费:否)
人工智能深度学习:
(人数:2000,免费:否)
测试工程师(新群):
(人数:1000,免费:否)
前端技术群(新群):
(人数:1000,免费:是)
C/C++技术(新群):
(人数:1000,免费:是)
Node.js技术(新群):
(人数:1000,免费:是)
PostgreSQL数据库(新群):
(人数:1000,免费:是)
Linux技术:
(人数:2000,免费:否)
PHP开发者:
(人数:2000,免费:否)
Oracle数据库:
(人数:2000,免费:否)
C#/ASP.Net开发者:
(人数:2000,免费:是)
数据分析师:
(人数:2000,免费:是)R语言,Matlab语言等技术

我要回帖

更多关于 php常用函数200举例 的文章

 

随机推荐